Как я проходил первый хак квест CTF Ratazana
ВведениеВ качестве введения я расскажу кратко о хак квесте Ratazana CTF. Его организовали специалисты из ЦИС (Центр Информационной Безопасности), представительство которого располагается в г. Бишкек Киргизия. Это первый отлично организованный хак квест. Он был прост и интересен и скорее всего служил так называемой отправной точкой (так сказать организаторы хотели прощупать уровень участников).Коротко о квесте По легенде квеста компания VideoCorp столкнулась с утечкой исходных кодов ее продукта, в результате чего EvilCorp выпустила очень похожу версию ПО, раньше чем компания VideoCorp, что привело к убыткам компании и потере хороших клиентов. Нужно было найти крота и собрать доказательства. На весь квест отводилось 7 дней. В квесте 8 миссий. И так приступим!#1 Начало Первая миссия Тут все просто, нужна лишь внимательность к деталям. Как обычно это бывает, но некоторая категория пользователей, выбирает себе пароли совпадающие с логином, чем мы и воспользуемся в первом случае. Идем на вкладку «Новости» и видим там логин пользователя manager01, запоминаем его, он нам пригодится. Далее ищем как можно попасть на форму логина админки.
Страница Новостей на сайте Банально /admin/ и мы можем теперь воспользоваться логином менеджера, опубликовавшего новости.
Вводим логин manager01 и соответственно предполагаем, что пароль такой же!
Форма логина в админку И о чудо! Мы в админке! И в качестве награды получаем первый флаг. Теперь мы можем продолжить со второй миссией!
Получаем первый флаг #2 Персонал И так во второй миссии, нам нужно получить информацию о персонале!
Вторая миссия И так мы в админке и готовы получить информацию о сотрудниках. Но нас ждет разочарование в меню, есть пункт «Список сотрудников», но к сожалению воспользоваться им, мы не можем, так как не хватает прав, мы не админ. Но внимание привлекает меню «Сменить пароль». Жмем на него и видим свой логин и пароль. В URL интересный параметр, который тоже привлекает внимание и это user_id=3. При виде формы смены пароля, очень хочется посмотреть, что же будет выведено, если к примеру поменять значение, банально на 1.
Форма смены пароля Меняем значение 3 на 1 и жмем Enter, после чего видим, что вместо логина manager01 отобразился логин admin и поле с паролем тоже похоже заполнено значением из БД для админа. Но визуально посмотреть пароль мы не можем, так как отображаются точки.Но мы можем посмотреть HTML элемента. И что же мы видим, а мы видим пароль админа! О да сегодня нам очень везет.Остается выйти из под учетной записи менеджера и войти под админом.
Процесс получения пароля админа Заходим под админом и проходим на форму списка сотрудников. И в качестве награды получаем второй флаг!
Вход под админом Форма списка сотрудников #3 Изучай В этой миссии нужно изучить список сотрудников и сделать выводы, куда же дальше двигаться.
Третья миссия В общем перед нами список сотрудников с их e-mail и ф.и.о, а также датами приема на работу, но вот вопрос, а что можно взять из этого полезного для нас. С первого взгляда ничего полезного, но взглянем на список почт сотрудников. Почти все находятся на разных доменах (проверил, ни один не существовал на момент прохождения миссии), кроме сотрудника под логином dev4
Список сотрудников и интересный для на dev4 Так вот получается видим мы, что почта этого пользователя находится на текущем домене. Ага скажете вы! Вот куда нужно копать. И это верное направление. Банально предполагаем, что если добавить mail перед наименованием домена videocorp.net.kg, то мы попадем на mail сервис и его веб интерфейс.
Но нам нужно сначала узнать пароль dev4 так как мы предполагаем, что к почте может подойти его логин и пароль.
Получение пароля dev4 по аналогии с admin Далее идем на мэйл сервиса mail.videocorp.net.kg
Форма логина mail сервиса Вводим почту dev4 в качестве логина dev4@videocorp.net.kg и в качестве пароля, то что взяли из HTML страницы смены пароля, жмем Enter и успешно входим в почтовый ящик dev4
Интерфейс почтового ящика и третий флаг #4 Бэкап В этой миссии нам как бы намекают, что нам нужно будет поработать с каким то бэкапом и добыть из него нужные нам данные.
Четвертая миссия В общем мы уже в почтовом ящике dev4 и тут в письме видим, что есть какой то архивчик под названием backup. Качаем его сразу же и пытаемся разархивировать и тут сюрприз нас ждет, архив защищен паролем.
Бэкап в письме Первое, что приходит в голову — это конечно сбрутить пароль используя fcrackzip. Хм, так и сделаем. Идем в виртуалку с Kali Linux, так как там есть весь необходимый нам инструментарий и запускаем fcrackzip на архиве с бэкапом (на самом деле все банальней, иногда стоит проверить на возможность установки в качестве пароля, части названия файла, тогда брут не понадобится, но я пошел по длинному пути).
Брутфорс пароля на архив при помощи fcrackzip Так как пароль начинается на букву b как потом выяснилось, то брутфорс пароля не был затяжным, после пятиминутного ожидания, пароль стал известен! И в качестве пароля использовалась часть имени файла, а конкретно «backup»
Запускал я fcrackzip со следующими параметрами fcrackzip -v -b -u путь/до/файла_архива.zip
При помощи пароля получаем доступ к содержимому архива!
Вводим пароль и разархивируем архив Далее смотрим содержимое и получаем в качестве награды четвертый флаг
Содержимое архива с флагом Четвертый флаг #5 Вперед, к серверу! В этой миссии как бы намекают на то, что у нас есть исходники сайта и мы можем почерпнуть информацию из них для того, чтобы попасть внутрь сайта. Хм, приступим к изучению исходников.
Пятая миссия В общем смотрим содержимое архива и анализируем то что видим. А видим мы там несколько папок, к примеру config.php очень интересен, там ведь пароли для доступа к БД, но нам сейчас не это нужно. В мозгу генерируется мысль, видимо идет речь о заливке шелла, так как более менее логичный способ проникновения на сайт это какая нибудь форма для заливки файлов. Будем искать файл, отвечающий за этот функционал. И не долго нам пришлось копаться как в глаза бросился файл upload.php
Содержимое папки admin/handlers Посмотрим его код! Честное слово, этот файл написал дьявол и положил в эту директорию.
Содержимое файла upload.php В общем видим, что тут нет никаких проверок на состав файла и нет никаких сомнений в том, что это верный путь. При заливке файла меняется только его имя на MD5 хеш, но это не проблема, название файла нам выводится. При этом оригинальное расширение (к примеру, php) остается без изменения. И так! Пришло время залить нам шелл.
В качестве шелла я выбрал простой и удобный шелл, код которого лежит на гитхаб. Этот шелл не палится антивирусами, что мне очень понравилось. Вот ссылка до репозитория с этим шеллом github.com/b374k/b374k
Теперь мы знаем как добраться до upload.php на сайте. Вводим videocorp.net.kg/admin/handlers/upload.php и вот нашему взору отображается страница для безнаказанной и наглой загрузки файла нашего шелла.
Форма загрузки шелла Заливаем наш шелл! И да чуть не забыл, из исходников upload.php мы знаем папку, в которую будет залит шелл, эта папка находится в корне сайта, т.е. доступ до шелла будет следующим videocorp.net.kg/uploads/a987eqwdiasuyq86we78q6e78qe6.php
Заливаем шелл, входим в его интерфейс и нашему вниманию сразу же бросается файл пятого флага!
Файл пятого флага, просмотр через залитый шелл #6 Он твой! Но их несколько… В этой миссии нам намекают, что мы скоро сможем найти зацепки и узнать кто же крот. И нам предлагают изучить сервер на предмет интересных данных, которые позволят нам идти дальше.
Шестая миссия В общем у нас есть доступ к содержимому сервера посредством шелла. Теперь нужно проявить внимательность и отыскать нужные нам данные. Чтож походим по папкам и после недолгого просмотра исходников сайта и родительских папок видим в папке backup интересный файл под названием dev4.tar.gz.
Расположение файла dev4.tar.gz Качаем его и начинаем смотреть, что же в нем такого есть. Шел предоставляет классный диалог с экшенами и мы пользуемся меню для скачивания файла.
Процесс скачивания архива Далее разархивируем его и смотрим содержимое.
Содержимое архива dev4.tar.gz Из всего набора файлов очень интересен файл .bash_history и папка .ssh. В .bash_history конечно же мы можем посмотреть историю выполняемых команд, по которым видно, что была генерация ключа ssh и потом этот ключ был добавлен authorized_keys, значит при помощи данного ключа мы можем получить доступ по ssh
Содержимое .bash_history В общем берем приватный и публичные ключи ssh и создаем config внутри папки .ssh
Приватный и публичный ключи из архива Еще при прохождении первого задания я при помощи nmap узнал, что есть два открытых порта 80 и 22, так что теперь дело за малым
Содержимое нашего config файла в папке .ssh После создания конфига, пробуем соединиться посредством ssh при помощи команды ssh videocorp
Вводим команду ssh с удобством И о да! У нас получилось подсоединиться к серверу посредством ssh
Вот такой симпатичный крысик нас приветствует И так мы на сервере, но пока что флага нет.
Содержимое папки в которой мы находимся при входе посредством ssh Но зато есть снова .bash_history который нам снова поможет. Открываем его и смотрим.
Содержимое файла .bash_history Из содержимого видим, что был установлен ssh ключ на машину с IP 192.168.0.1. Ага, что это нам дает, а дает это нам следующее, нужно выяснить какой IP адрес у машины, на которую мы попали. После набора команды ifconfig видим, что мы на машине с IP 192.168.0.2
Вывод команды ifconfig Значит мы свободно можем зайти на 0.1 машину при помощи команды ssh dev4@192.168.0.1Таким образом мы заходим на 0.1 машину. Осматриваемся и в качестве награды получаем шестой флаг.
Получение шестого флага Содержимое шестого флага #7 Личное? В этой миссии нам предстоит покопаться в грязном белье и личных данных пользователя dev4
Седьмая миссия И так мы находимся на рабочей машине разработчика dev4 и что же интересного мы видим в папке, конечно же нас привлекает папка .Skype в которой наверняка можно найти что-то интересное. Поглядим что там, а там main.db текущего пользователя под ником peleninv
Интересующая нас папка .Skype Мы знаем, что это база данных sqlite, так значит мы можем открыть ее и прочитать данные. Сделаем это!
Путь по которому лежит файл main.db Для того чтобы не вдаваться сильно в подробности, тут нужно знать структуру таблиц БД скайпа. Интересующая нас таблица под названием Messages, содержит данные о сообщениях между пользователями и нужная нам колонка с содержимым сообщения — это body_xml
Выполним запрос select body_xml from messages; и вот что будет представлено нашему взору
Переписка в skype Внимательно просмотрев сообщения, понимаешь что dev4 передал какие то исходники и получил за это деньги.Тут же в качестве вознаграждения получаем седьмой флаг. И нам становится понятно кто же оказывается крот — это конечно же dev4!
Собеседника dev4 мы вычисляем из таблицы accounts получая его данные.
Данные о заказчике неких исходников Ну и переписка с никами, из той же таблицы мы можем добавить еще одно поле author в запрос и получить более удобочитаемую переписку
Переписка с включенными никами #8 Неужели??? И так в этой миссии нам нужно раздобыть исходники и удостовериться, что это исходники продукта фирмы videocorp.
Восьмая финальная миссия Ну как говорится у нас пока нет доказательств и нам нужно скачать исходники с dropbox, по ссылке из переписки и удостовериться, что это те исходники, утечка которых принесла убытки фирме videocorp
И так качаем исходники и конечно же сталкиваемся снова с проблемой, отсутствия пароля, так как архив снова защищен паролем. Из переписки ясно, что пароль был отослан на почту заказчику. Но из профиля в скайпе заказчика нет реальной почты, так что тут снова брут или же смекалка.
Ссылка из переписки Скачав архив, пытаемся разархивировать его с паролем идентичным имени архива, т.е. используем в качестве пароля слово source
Разархивирование архива с исходниками используя пароль source В итоге мы получаем в качестве награды восьмой флаг и убеждаемся, что это исходники продукта videocorp. Мы нашли крота и у нас есть неопровержимые доказательства.
Восьмой флаг Заключительная часть Вот так легко и непринужденно был пройден этот хак квест. После ввода восьмого флага в форму миссии и отправки, нас поздравляют с успешным завершением миссии. Мы молодцы!
Поздравления и хантинг В целом конкурс мне понравился, он легкий и интересный. Это первый хак квест в формате CTF проведенный у нас в Киргизии. Огромное спасибо организаторам! Надеюсь что скоро будет еще квесты более сложные и интересные!
Всем огромное спасибо за внимание! Надеюсь было интересно.