tom@home.htb:~$

Blog o HTB

31 January 2021

Writeup

Úvod a kontext

Writeup je postavený na jedné úzké, ale velmi účinné cestě: CMS Made Simple v podadresáři writeup, blind SQL injection a z ní vytěžené SSH heslo pro jkr. Z pohledu útoku je podstatné, že injection nekončí u administrace CMS; rovnou otevírá systémový účet.

Druhá polovina je čistě lokální Linux detail. pspy ukáže, že root při přihlášení volá run-parts bez absolutní cesty, takže rozhoduje obsah $PATH, ne další webová zranitelnost. To je přesně ten vzorec, který rozebírám i v článku PATH, PYTHONPATH a wrapper hijack.

Počáteční průzkum

Kontext webu

Na hostu byla zmínka o podadresáři writeup, kde běžel CMS Made Simple. To je důležité, protože právě pro starší verze CMSMS existuje veřejně známý blind SQL injection exploit.

V takové situaci je lepší nesnažit se injection dokazovat ručně znak po znaku, ale použít hotový exploit zaměřený přímo na tento CMS.

Analýza zjištění

Blind SQL injection v CMS Made Simple

Exploit proti /writeup postupně získal tři zásadní údaje:

Výsledkem byl účet:

jkr

A po cracknutí i heslo:

raykayjay9

To je důležitý rozdíl proti mnoha jiným strojům: hash nesloužil k přihlášení do CMS administrace, ale fungoval přímo pro SSH. Blind SQL injection tu tedy ve výsledku otevírá jiný protokol, ne jen další webovou funkci.

Získání přístupu

SSH jako jkr

Jakmile jsou k dispozici funkční pověření, dává větší smysl přejít rovnou na SSH:

ssh jkr@10.10.10.138

Pak už šlo potvrdit user flag:

cat user.txt
__CENSORED__

Eskalace oprávnění

pspy a run-parts

Při lokální enumeraci bylo klíčové sledovat běžící procesy pomocí pspy. To ukázalo, že při přihlášení root spouští shell, který následně volá run-parts bez plně kvalifikované cesty.

To je přesně ten typ detailu, který se snadno přehlédne. Jakmile se spouští jen run-parts místo /bin/run-parts, začne rozhodovat obsah $PATH.

V prostředí Writeupu byl $PATH nastaven tak, že na začátku obsahoval i zapisovatelné cesty /usr/local/sbin a /usr/local/bin. To otevřelo možnost path hijacku.

Podstrčení vlastního run-parts

Stačilo vytvořit vlastní spustitelný soubor /usr/local/bin/run-parts, který neprovede běžnou práci, ale například připraví SUID kopii bashi:

echo -e '#!/bin/bash\n\ncp /bin/bash /bin/0xdf\nchmod u+s /bin/0xdf' > /usr/local/bin/run-parts
chmod +x /usr/local/bin/run-parts

Jakmile se pak znovu otevřelo SSH spojení a root login workflow sáhlo po run-parts, spustila se útočníkova verze místo systémové.

Výsledkem byl SUID shell:

/bin/0xdf -p

Ten už běžel s efektivním UID root a umožnil přečíst root.txt.

Shrnutí klíčových poznatků

Co si odnést do praxe

Další související články

HTB Stroje

Techniky

Nástroje

tags: linux - sql-injection - ssh - exploit - privesc - hackthebox