Codeby.Games. CTF TASK «СМС»-«SMS»

в 11:16, , рубрики: ctf, hash, redteam, SQLi, task

Приветствую всех любителей CTF и этичного хакинга на стороне Red Team! В этой статье мы рассмотрим прохождение легкого таска "СМС", разработанного пентестерами из команды Codeby.Games.

Справка: codeby.games - отечественный условно бесплатный веб-проект, где каждый может попрактиковаться в оттачивании навыков наступательной кибербезопасности. Таски (задания) представлены в широком спектре: начиная от использования методов OSINT и заканчивая компрометацией учебного домена Active Directory. CTF разделяются на три группы - "Легкий", "Средний", "Сложный" в различных категориях. Но подробнее об этом - на официальном сайте проекта.

Итак, приступим. Задание "СМС" находится в категории "Квесты".

Тем, кто решает CTF впервые, следует знать, что подсказка к решению задачи нередко скрывается в самом описании задания. Как ее отыскать - однозначно ответить трудно. Многое зависит от опыта участия в CTF, работы в IТ-отрасли, личной внимательности и - самое главное -  практики в области наступательной кибербезопасности. Но если ты нашел подсказку, напиши в комментариях :)

Тем, кто решает CTF впервые, следует знать, что подсказка к решению задачи нередко скрывается в самом описании задания. Как ее отыскать - однозначно ответить трудно. Многое зависит от опыта участия в CTF, работы в IТ-отрасли, личной внимательности и - самое главное - практики в области наступательной кибербезопасности. Но если ты нашел подсказку, напиши в комментариях :)

Общий план решения CTF выглядит так:

  1. Сканируем порты.

  2. Проводим брутфорс эндпоинтов.

  3. Изучаем логику работы Web API

  4. Внедряем SQL-инъекцию и дампим БД.

  5. Проводим брутфорс хэшей.

  6. Подключаемся по SSH.

  7. Повышаем привилегии в системе.

  8. Получаем флаг.

1. Сканируем порты

Подключаемся к VPN и начинаем сканировать порты c помощью nmap, чтобы получить информацию о запущенных сервисах и версиях установленного ПО.

Codeby.Games. CTF TASK «СМС»-«SMS» - 2

На сервере открыто всего два порта - tcp22 (OpenSSH) и tcp80 (Apache httpd). Не очень-то много, для того, чтобы понять вектор атаки. Идем дальше.

2. Проводим брутфорс эндпоинтов

У каждого пентестера свой набор инструментов для перебора эндпоинтов Web API. Я предпочитаю использовать gobuster из-за его достаточно широкого и гибкого функционала.

В интересах экономии места и времени, вывод работы утилиты указан не весь

В интересах экономии места и времени, вывод работы утилиты указан не весь

Нас интересует эндпоинт "/admin", который обычно свидетельствует о наличии точки входа в панель администратора. Однако новичкам я настоятельно рекомендую всегда вручную проверять каждый веб-каталог. Иногда там встречается очень много полезной информации, о которой забыл разработчик.

Нас автоматически редиректит на страницу авторизации веб-сервиса "Stock Management System".

Codeby.Games. CTF TASK «СМС»-«SMS» - 4

И тут начинается самое интересное, потому что задачу можно решить двумя способами: легким и сложным. Суть легкого заключается в том, чтобы внимательно изучить Web API, а после - тщательно погуглить. Описывать легкий путь (а он на самом деле крайне легкий) я не буду, т.к. это не совсем педагогично:) Вместо этого, опишу "сложный", потому что он позволит лучше понять суть уязвимости, а также способы ее эксплуатации.

3. Изучаем работу Web API

Приложение принимает пользовательский ввод, в частности - логин и пароль. Вывод: приложение возможно работает с локальной базой данных. Намеренно вызываем ошибку и перехватываем POST-запрос его с помощью Burp Suite.

POST-запрос с преднамеренно неверными идентификаторами

POST-запрос с преднамеренно неверными идентификаторами
Ответ сервера на POST-запрос

Ответ сервера на POST-запрос

Мы видим ошибку в формировании SQL-запроса к локальной базе данных. Такой ответ свидетельствует об уязвимости к внедрению SQL-инъекции.

4. Внедряем SQL-инъекцию и дампим БД

Для этого лучше всего использовать утилиту sqlmap. Сохраняем POST-запрос в отдельный файл и формируем синтаксис команды (поскольку для защиты Web API используется WAF, следует использовать тамперы). Оговорюсь сразу: внедрять SQLi будет непросто, нужно поиграть с ключами. Подробнее об sqlmap и его опциях читай здесь

В результате эксплуатации уязвимости к SQL-инъекции, мы получим дамп таблицы

Codeby.Games. CTF TASK «СМС»-«SMS» - 7

5. Проводим брутфорс хэшей

В данном таске есть два способа это сделать - с помощью самого sqlmap или с помощью утилиты hashcat. Как вам удобнее - выбирайте сами. К тому же, тип шифрования нам уже известен (см. п. 3)

Если используем hashcat, то синтаксис команды следующий: hashcat -a 3 -m 0 hash /path/to/custom/wordlist

6. Подключение по SSH

В результате перебора хэшей по словарю мы получаем пароль от учетной записи, которую можно использоваться для подключения по SSH. Кто эот пользователь - вы узнаете сами, когда завершите п. 5.

Переходим в каталог /home/<cutrrent_user> мы видим файл "first_part", но читать его может только root-пользователь

Codeby.Games. CTF TASK «СМС»-«SMS» - 8

7. Повышаем привилегии в системе

Выполняем команду sudo -l, чтобы понять, какими правами обладает локальный пользователь. Вывод выглядит следующим образом:

Codeby.Games. CTF TASK «СМС»-«SMS» - 9

Что с этим делать дальше? А дальше рекомендую ознакомиться с интересной фичей под названием GTFOBINS.

8. Получаем флаг

Изучив, как работает GTFOBINS, вы с легкостью получите root-права и сможете прочитать первую часть флага. Вторая же часть находится в каталоге /root. Соединив части вместе, впишите ответ в консоль и получите баллы за выполнение.

На этом все)

P.s.

Я намеренно не раскрывал весь путь решения от А до Я. На мой взгляд, лучше научиться самому видеть вектор атаки, понять способы ее проведения и как работать с доступными инструментами.

Автор: Mr_Hartman

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js