
Filtra elenchi di host per identificare candidati SSRF validi sondando la raggiungibilità HTTP e risolvendo IP interni/esterni, bypassando le blacklist tradizionali in ambienti cloud.
surf ti permette di filtrare una lista di host, restituendo una lista di candidati SSRF validi. Lo fa inviando una richiesta HTTP dalla tua macchina a ciascun host, raccogliendo tutti gli host che non hanno risposto, e quindi filtrandoli in una lista di host esterni e interni.
Puoi quindi provare questi host ovunque sia presente una vulnerabilità SSRF. Poiché la maggior parte dei filtri SSRF si concentra solo su intervalli IP interni o riservati, rimarrai piacevolmente sorpreso quando otterrai SSRF su un IP esterno che non è accessibile via HTTP(s) dalla tua macchina.
Spesso scoprirai che grandi aziende con ambienti cloud hanno IP esterni per app web interne. I filtri SSRF tradizionali non cattureranno questo a meno che questi host non vengano aggiunti specificamente a una blacklist (cosa che di solito non accade mai). Ed è per questo che questa tecnica può essere così potente.
Questo strumento richiede Go 1.19 o superiore poiché ci affidiamo a httpx per eseguire il probing HTTP.
Può essere installato con il seguente comando:
go install github.com/assetnote/surf/cmd/surf@latest
Considera di avere i sottodomini per bigcorp.com all'interno di un file chiamato bigcorp.txt, e vuoi trovare tutti i candidati SSRF per questi sottodomini. Ecco alcuni esempi:
# trova tutti i candidati ssrf (inclusi indirizzi IP esterni tramite probing HTTP)
surf -l bigcorp.txt
# trova tutti i candidati ssrf (inclusi indirizzi IP esterni tramite probing HTTP) con impostazioni di timeout e concorrenza
surf -l bigcorp.txt -t 10 -c 200
# trova tutti i candidati ssrf (inclusi indirizzi IP esterni tramite probing HTTP), e stampa solo tutti gli host
surf -l bigcorp.txt -d
# trova tutti gli host che puntano a un indirizzo IP interno/privato (senza probing HTTP)
surf -l bigcorp.txt -x
L'elenco completo delle impostazioni può essere trovato di seguito:
❯ surf -h
███████╗██╗ ██╗██████╗ ███████╗
██╔════╝██║ ██║██╔══██╗██╔════╝
███████╗██║ ██║██████╔╝█████╗
╚════██║██║ ██║██╔══██╗██╔══╝
███████║╚██████╔╝██║ ██║██║
╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
by shubs @ assetnote
Usage: surf [--hosts FILE] [--concurrency CONCURRENCY] [--timeout SECONDS] [--retries RETRIES] [--disablehttpx] [--disableanalysis]
Options:
--hosts FILE, -l FILE
Lista di asset (host o sottodomini)
--concurrency CONCURRENCY, -c CONCURRENCY
Thread (passati a httpx) - default 100 [default: 100]
--timeout SECONDS, -t SECONDS
Timeout in secondi (passati a httpx) - default 3 [default: 3]
--retries RETRIES, -r RETRIES
Tentativi in caso di fallimento (passati a httpx) - default 2 [default: 2]
--disablehttpx, -x Disabilita httpx e stampa solo la lista di host che risolvono a un indirizzo IP interno - default false [default: false]
--disableanalysis, -d
Disabilita l'analisi e stampa solo la lista di host - default false [default: false]
--help, -h mostra questo aiuto ed esci
Quando esegui surf, stamperà i candidati SSRF su stdout, ma salverà anche due file nella cartella da cui è stato eseguito:
external-{timestamp}.txt - Host che risolvono esternamente, ma ai quali non è possibile inviare richieste HTTP dalla tua macchinainternal-{timestamp}.txt - Host che risolvono internamente, e ovviamente impossibili da contattare via HTTP dalla tua macchinaQuesti due file conterranno l'elenco di host che sono candidati SSRF ideali da provare sul tuo target. La lista degli host esterni ha maggiori probabilità di essere valida rispetto alla lista interna.
Sotto il cofano, questo strumento sfrutta httpx per eseguire il probing HTTP. Cattura gli errori restituiti da httpx, e quindi esegue alcune analisi di base per determinare i candidati più validi per SSRF.
Questo strumento è stato creato come risultato di un evento di hacking dal vivo per HackerOne (H1-4420 2023).