Перейти к содержанию

Mr Robot CTF


Основная задача - Получение RCE на сайте управляемым Wordpress.
Описание задания можно найти на TryHackme

Сканирование

Проведение разведки с nmap на предмет наличия открытых портов:

sudo nmap -T4  -p- IP-ADDRESS
#После получения сведений о портах
sudo nmap -sV -sC -O -p 22,80,443 IP-ADDRESS 

Обнаружены открытые порты 22, 80, 443. Получены версии, наименование ПО работающего на открытых портах.

На 80 порту, находим сайт который представляет из себя приложение на JS которое имитирует сцены из сериала Mr Robot.

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

Проводим разведку с gobuster или feroxbuster для получения информации о имеющихся директориях и файлов php,txt,js,cgi,html,htm,sh:

feroxbuster -u IP-ADDRESS -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -t 64 -x php,txt,js,cgi,html,htm,sh``

gobuster dir -t 64-u IP-ADDRESS -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php,txt,js,cgi,html,htm,sh``

Находим множество различных каталогов. В числе прочего находим robots.txt и директорию wp-admin

Из robots.txt получаем наименование файла содержащего либо логины/пароли либо наименование директорий. Кроме того, получаем наименование файла содержащего первый флаг.

К сведению

Gobuster быстро показал наличие robots.txt при получении доступа к нему я опечатался и попал на 404 страницу, которая оказалась страницей блога на Wordpress. Сделал об этом заметку на будущее - в качестве исследования сайта передавать в качестве адреса заведомо несуществующие страницы для отображения 404 ошибки.

Еще раз проходимся gobuster, в качестве списка слов подставляем найденный файл, однако не находим ничего интересного.

Проходимся по сайту с wpscan. Новых полезных сведений он не принёс.

Брутфорс формы входа

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

Для получения информации о передаваемом запросе воспользовался BurpSuite: перехватил запрос, для изучения его структуры, проанализировал ответ, для получения текста ошибки.

Перебор пользователей
hydra -L fsocity.dic -P testpassword $IP_ADDRESS http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.164.132%2Fwp-admin%2F&testcookie=1:Invalid username." -V -o hydra_res.txt
Получив имя пользователя запускаем процедуру поиска его пароля. Делаем все тоже самое, только меняем значения ключей -l и -P, текст сообщения об ошибке:

Брутфорс пароля пользователя
hydra -l $USER_NAME -P res.txt 10.10.164.132 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.164.132%2Fwp-admin%2F&testcookie=1:The password you entered for the username" -V -I -t 30 -o hydra_res.txt
Получаем пароль пользователя, переходим к этапу получения RCE.

К сведению

Сбрутить пароль можно было бы и с помощью wpscan

RCE

  1. WordPress => PHP. Качаем PHP-revshell

Не забывай

Не забывай поменять IP и порт. При замене не забывай про кавычки и прочие служебные символы

  1. Через административную панель находим раздел для загрузки файлов. Выясняем, что установлен фильтр который не загружает файлы с расшрением .php Меняем расширение на различные допустимые для php, исчерпывающий список приложен здесь.

Однако, я не стал идти этим путём и решил погуглить, можно ли с помощью wpscan доставить payload для RCE? В итоге было найдено более элегантное решение:

В административной панели, в разделе настройка темы сайта имеется редактор страниц. Выбрав 404 страницу, просто заменил её код на PHP-revshell. Информацию об этом нашел здесьПосле сохранения изменений обратился на несуществующий адрес - получил shell с правами daemon.

В /home нашел директорию пользователя в которой находился втрой флаг и хэш в Raw-MD5. Зареверсил хэш через hashes.com, получил пароль пользователя. Авторизовался под ним через su - прочитал файл со вторым флагом.

Эскалация привилегий.

  1. Через sudo -l узнаем, что мы не sudo )

  2. Ищем бинарники со SUID правами. Находим nmap. Запускаем его с ключём --interative, далее вызываем: !sh

  3. Получаем root shell. Забираем root флаг в /root/root.txt