Gobuster
Úvod a kontext
gobuster je na tomhle blogu prakticky synonymem pro rychlou webovou content discovery. Nejde ale o nástroj, který by “našel skryté URL” sám od sebe. Jeho hodnota stojí hlavně na tom, že umí systematicky ověřit rozumnou hypotézu:
- že aplikace používá běžné názvy adresářů nebo souborů,
- že má smysl zkoušet konkrétní přípony,
- nebo že určitá část webu stojí za cílenou enumeraci víc než homepage.
Na Admireru dovedl od robots.txt k credentials.txt, na Nibbles od minimalistického webu ke skrytému nibbleblog a na Doctoru pomohl rozšířit útok z viditelného portálu na další obsah webu. Prakticky tedy nejde o “brute force webu”, ale o nástroj pro potvrzení a rozvinutí stop, které už někde vznikly.
K čemu je gobuster v praxi nejlepší
gobuster má největší hodnotu tehdy, když:
- víte, že cílem je klasický webový obsah,
- dává smysl zkusit konkrétní názvy, slovníky nebo přípony,
- a chcete rychle ověřit, jestli za viditelnou aplikací neleží ještě další cesta, adresář nebo pomocný soubor.
Naopak není moc užitečný tam, kde vše běží za jedním API endpointem, přes JavaScript router nebo za silnou autentizační vrstvou. Tam je často důležitější číst aplikaci samotnou než slepě zkoušet slovník.
Nejčastější scénáře využití v tomto projektu
Cílená enumerace podadresáře, ne celého webu
Na Admireru nepadla hodnota gobusteru z ničeho. První stopa přišla z robots.txt, který odkazoval na /admin-dir. Až teprve na tomto konkrétním místě dávalo smysl spustit cílenou enumeraci:
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/raft-small-directories-lowercase.txt -t 40 -x php,txt,log,xml -u http://10.10.10.187/admin-dir/
Výsledek nebyl “další adresář”. Byl to přímo soubor credentials.txt, který posunul útok z webu k FTP, WordPressu a nakonec k SSH. To je důležitá lekce: gobuster má největší návratnost tam, kde už existuje konkrétní důvod prozkoumat úzký prostor.
Rozšíření malého webu o skrytý produkt nebo aplikaci
Na Nibbles hlavní web skoro nic neříkal. Právě tam má content discovery smysl, protože drobný veřejný web bývá často jen rozcestník k vlastní aplikaci. Výsledkem byl skrytý nibbleblog, který pak rozhodl celý foothold.
V tomhle případě je důležité ještě něco jiného: slovník nevznikl jen ze standardního seznamu, ale i z textu samotného webu. CeWL vytvořil krátký, kontextový wordlist a gobuster ho pak využil.
cewl -v --with-numbers http://$IP > /tmp/$IP-dict.txt
gobuster dir -u http://$IP/ -w /tmp/$IP-dict.txt -t 40 -x php
Tahle kombinace je praktická hlavně tehdy, když je aplikace malá, doménově specifická a standardní slovníky by byly zbytečně hlučné.
Doplňková enumerace po prvním základním průzkumu
Na Doctoru, Cache nebo Blunderu dává gobuster smysl ve chvíli, kdy už základní webový průzkum proběhl, ale pořád chybí:
- administrační cesta,
- upload endpoint,
- logický podsystém,
- nebo pomocné soubory jako
log,txtčixml.
gobuster v takové chvíli funguje dobře právě proto, že je rychlý a jednoduchý. Umí rychle projít sadu realistických názvů a doplnit to, co nevydal hlavní web, robots.txt ani homepage.
Co v gobusteru rozhoduje víc než samotný příkaz
Wordlist
Nejdůležitější není počet vláken, ale kvalita slovníku. Na blogu se opakují dvě použitelné strategie:
- vzít menší, realistický seznam jako
raft-small-directories-lowercase, - nebo si vytvořit krátký slovník z obsahu cílového webu.
Čím menší a přesnější prostor prohledáváte, tím větší šanci máte najít něco hodnotného bez zbytečného šumu.
Správné přípony
Na PHP webech se opakovaně objevují přepínače jako:
-x php,txt,log,xml,html
To je prakticky důležité proto, že mnoho zajímavých souborů není adresář, ale:
- konfigurační export,
- log,
- pomocný textový soubor,
- nebo vývojový artefakt.
Bez přípon by některé z těchto nálezů vůbec nevyšly.
Správný scope
Mechanická enumerace celé domény bývá často horší než cílený scan konkrétního místa. Admirer je dobrý příklad: důležité nebylo “prohledat web”, ale ověřit /admin-dir/. Stejně tak u jiných hostů dává větší smysl:
- konkrétní vhost,
- konkrétní podsložka,
- nebo konkrétní typ obsahu
než bezmyšlenkovitě pouštět stejný slovník nad každým webem.
Kdy gobuster nepomůže
Je dobré explicitně říct, kdy už je lepší sáhnout po jiné metodě.
gobuster často nepomůže, pokud:
- aplikace žije hlavně v API a JavaScriptu,
- kritické cesty jsou až za loginem,
- odpovědi jsou dynamické a všechny vracejí podobný status,
- server agresivně rate limituje nebo vrací falešné pozitivy na neexistující cesty.
V takové situaci dává větší smysl číst aplikaci, procházet frontend, zkoumat requesty nebo využít jiné techniky než klasické content discovery.
Nejčastější chyby při použití
- příliš velký slovník bez hypotézy,
- chybějící přípony a tím pádem přehlédnuté soubory,
- enumerace špatného scope, například rootu místo relevantního podadresáře,
- zaměnění nálezu za exploit:
gobustertypicky najde stopu, ale sám o sobě nevytvoří foothold.
Na Admireru našel credentials.txt, ale skutečný dopad vznikl až po ověření reuse hesel. Na Nibbles našel nibbleblog, ale shell vznikl až z admin loginu a upload exploitu.
Související články v projektu
- Rozbory: Admirer, Nibbles, Doctor, Cache, Blunder, Luanne
- Techniky: Password reuse a rozpad hranic mezi aplikací, SSH, WinRM a admin nástroji, Nebezpečné uploady: polygloty, WAR deploy a plugin upload, File read a include varianty mimo klasické LFI
Co si odnést do praxe
gobusterje nejsilnější tehdy, když potvrzuje konkrétní hypotézu, ne když jen bezcílně zkouší slovník nad celým webem.- Nejvíc se vyplatí práce se scope, slovníkem a příponami; právě tyhle tři věci rozhodují, jestli nástroj najde užitečný artefakt.
- Samotný nález ještě není foothold. Praktická hodnota
gobusteruje v tom, že dovede od stopy k dalšímu rozhodujícímu kroku.
Další Související Články V Projektu
HTB Stroje
Techniky
- kid/jku a vzdálené načítání klíčů
- OAuth a zneužití autorizačního toku
- NoSQL injection v loginu a extrakce přes `$regex` / `$ne`