Luke
Úvod a kontext
Luke je typický stroj o informačním úniku a špatně oddělených službách. Nejde o jednu RCE, ale o řetězec, kde anonymní FTP zpřístupní zdrojové kódy, API na portu 3000 pustí po úspěšném přihlášení další interní data a administrační panel Ajenti nakonec promění reuse hesla rovnou v root přístup.
Proto je důležité nečíst Luke jako obyčejný brute-force příklad. Heslové hádání má smysl až ve chvíli, kdy z úniku zdrojáků vyplyne, který účet a která služba za to opravdu stojí.
Počáteční průzkum
FTP se zdrojáky, API a Ajenti
Hned první scan ukazuje, že host nepublikuje jen web. Vedle Apache na 80/tcp běží i JSON API na 3000/tcp a Ajenti na 8000/tcp. To je samo o sobě zajímavé, ale skutečný posun přinese až anonymní FTP, které zpřístupní adresář webapp a krátkou interní zprávu o tom, že zdrojové kódy jsou na serveru dočasně vystavené.
21/tcp open ftp vsftpd 3.0.3+ (ext.1)
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxr-xr-x 2 0 0 512 Apr 14 12:35 webapp
22/tcp open ssh?
80/tcp open http Apache httpd 2.4.38 ((FreeBSD) PHP/7.3.3)
3000/tcp open http Node.js Express framework
8000/tcp open http Ajenti http control panel
Dear Chihiro !!
As you told me that you wanted to learn Web Development and Frontend, I can give you a little push by showing the sources of
the actual website I've created.
Normally you should know where to look but hurry up because I will delete them soon because of our security policies !
Derry
Jakmile jsou k dispozici zdrojáky a několik navzájem propojených služeb, dává větší smysl mapovat workflow aplikace a účty než bezhlavě fuzzovat další cesty.
Analýza zjištění
API účet admin jako rozumný cíl
Zdrojové kódy ukazují, že web na 80/tcp je jen jedna vrstva nad API na 3000/tcp a že klíčovým účtem je admin. To je přesně ten moment, kdy je heslové hádání obhajitelné: nejde o náhodný spray proti celé infrastruktuře, ale o cílený pokus proti účtu, který má v aplikaci zjevně privilegovanou roli.
Po úspěšném přihlášení API vrací další interní informace o uživatelích a jejich přístupových údajích. Právě tím se z jedné chyby stává řetězec: hesla, která aplikace používá interně, se opakují i na systémových službách.
Získání přístupu
Z API na stabilní shell
Nejdůležitější mezikrok na Luke není další exploit, ale převod uniklých dat do stabilního přístupu. Přihlašovací údaje z API stačí k prvnímu běžnému shellu a tím pádem i k přečtení user.txt. Tady je podstatné hlavně to, že nejde o jednorázový webový kontext, ale o opakovatelný přístup založený na platných pověřeních.
Další postup už stojí na credential reuse. Stejná nebo úzce příbuzná hesla fungují i na dalších službách, které host provozuje.
Eskalace oprávnění
Ajenti jako rovnou root rozhraní
Na Luke není root část klasická privilege escalation z běžného shellu. Rozhodující je to, že Ajenti na 8000/tcp je plnohodnotný administrační panel. Jakmile se do něj podaří přihlásit pomocí zrecyklovaných hesel, webový terminál nebo příkazový modul už běží s oprávněními, která stačí ke čtení root.txt.
Luke tak dobře ukazuje rozdíl mezi lokální eskalací a převzetím administrativní služby. K rootu se tu nejde přes kernel nebo špatná ACL, ale přes panel, který už je sám o sobě root ekvivalent.
Shrnutí klíčových poznatků
- První chyba nebyla v samotném API, ale už v tom, že anonymní FTP zpřístupnilo zdrojové kódy a tím i vnitřní model celé aplikace.
- Heslové hádání dávalo smysl až po analýze zdrojáků, protože z nich vyplynulo, že účet
adminna API je privilegovaný a stojí za cílený pokus. - Root přístup nakonec nepřišel přes lokální exploit, ale přes Ajenti, tedy administrační službu, do níž se přelily stejné přihlašovací údaje.
Co si odnést do praxe
- Zdrojové kódy, interní poznámky a pomocné artefakty nesmějí končit na veřejném FTP ani v jiném anonymně dostupném úložišti. U Luke právě tohle odstranilo téměř celou nejistotu v prvotní enumeraci.
- Credential reuse mezi API, SSH a administračním panelem je zásadní architektonická chyba. Jedna kompromitovaná vrstva pak automaticky otevírá i ostatní.
- Administrační panely jako Ajenti mají být přístupné jen z management sítě a s oddělenými účty. Pokud jsou otevřené zvenku a sdílejí hesla s běžnými službami, stávají se přímou cestou k rootu.