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
К сведению
Сбрутить пароль можно было бы и с помощью wpscan
RCE
- WordPress => PHP. Качаем PHP-revshell
Не забывай
Не забывай поменять IP и порт. При замене не забывай про кавычки и прочие служебные символы
- Через административную панель находим раздел для загрузки файлов. Выясняем, что установлен фильтр который не загружает файлы с расшрением
.php
Меняем расширение на различные допустимые для php, исчерпывающий список приложен здесь.
Однако, я не стал идти этим путём и решил погуглить, можно ли с помощью wpscan доставить payload для RCE? В итоге было найдено более элегантное решение:
В административной панели, в разделе настройка темы сайта имеется редактор страниц. Выбрав 404 страницу, просто заменил её код на PHP-revshell. Информацию об этом нашел здесьПосле сохранения изменений обратился на несуществующий адрес - получил shell с правами daemon.
В /home
нашел директорию пользователя в которой находился втрой флаг и хэш в Raw-MD5. Зареверсил хэш через hashes.com, получил пароль пользователя. Авторизовался под ним через su
- прочитал файл со вторым флагом.
Эскалация привилегий.
-
Через
sudo -l
узнаем, что мы неsudo
) -
Ищем бинарники со SUID правами. Находим nmap. Запускаем его с ключём
--interative
, далее вызываем:!sh
-
Получаем root shell. Забираем root флаг в
/root/root.txt