
Filtert Host-Listen, um brauchbare SSRF-Kandidaten zu identifizieren, indem HTTP-Erreichbarkeit getestet und interne/externe IPs aufgelöst werden, wobei herkömmliche Blacklists in Cloud-Umgebungen umgangen werden.
Mit surf können Sie eine Liste von Hosts filtern und erhalten eine Liste von brauchbaren SSRF-Kandidaten. Dies geschieht, indem von Ihrem Rechner aus eine HTTP-Anfrage an jeden Host gesendet wird, alle Hosts gesammelt werden, die nicht geantwortet haben, und diese dann in eine Liste von extern und intern erreichbaren Hosts gefiltert werden.
Sie können diese Hosts dann überall dort ausprobieren, wo eine SSRF-Schwachstelle vorhanden sein könnte. Da die meisten SSRF-Filter nur auf interne oder eingeschränkte IP-Bereiche achten, werden Sie angenehm überrascht sein, wenn Sie SSRF auf einer externen IP erhalten, die von Ihrem Rechner aus nicht über HTTP(s) erreichbar ist.
Oft werden Sie feststellen, dass große Unternehmen mit Cloud-Umgebungen externe IPs für interne Web-Apps haben. Herkömmliche SSRF-Filter erfassen dies nicht, es sei denn, diese Hosts werden ausdrücklich zu einer Blacklist hinzugefügt (was normalerweise nie der Fall ist). Deshalb kann diese Technik so wirkungsvoll sein.
Dieses Tool benötigt Go 1.19 oder höher, da wir für das HTTP-Probing auf httpx angewiesen sind.
Es kann mit folgendem Befehl installiert werden:
go install github.com/assetnote/surf/cmd/surf@latest
Angenommen, Sie haben Subdomains für bigcorp.com in einer Datei namens bigcorp.txt und möchten alle SSRF-Kandidaten für diese Subdomains finden. Hier sind einige Beispiele:
# find all ssrf candidates (including external IP addresses via HTTP probing)
surf -l bigcorp.txt
# find all ssrf candidates (including external IP addresses via HTTP probing) with timeout and concurrency settings
surf -l bigcorp.txt -t 10 -c 200
# find all ssrf candidates (including external IP addresses via HTTP probing), and just print all hosts
surf -l bigcorp.txt -d
# find all hosts that point to an internal/private IP address (no HTTP probing)
surf -l bigcorp.txt -x
Die vollständige Liste der Einstellungen finden Sie unten:
❯ surf -h
███████╗██╗ ██╗██████╗ ███████╗
██╔════╝██║ ██║██╔══██╗██╔════╝
███████╗██║ ██║██████╔╝█████╗
╚════██║██║ ██║██╔══██╗██╔══╝
███████║╚██████╔╝██║ ██║██║
╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
by shubs @ assetnote
Usage: surf [--hosts FILE] [--concurrency CONCURRENCY] [--timeout SECONDS] [--retries RETRIES] [--disablehttpx] [--disableanalysis]
Options:
--hosts FILE, -l FILE
Liste der Assets (Hosts oder Subdomains)
--concurrency CONCURRENCY, -c CONCURRENCY
Threads (an httpx weitergegeben) - Standard 100 [default: 100]
--timeout SECONDS, -t SECONDS
Timeout in Sekunden (an httpx weitergegeben) - Standard 3 [default: 3]
--retries RETRIES, -r RETRIES
Wiederholungen bei Fehlschlag (an httpx weitergegeben) - Standard 2 [default: 2]
--disablehttpx, -x Httpx deaktivieren und nur Liste der Hosts ausgeben, die auf eine interne IP-Adresse aufgelöst werden - Standard false [default: false]
--disableanalysis, -d
Analyse deaktivieren und nur Liste der Hosts ausgeben - Standard false [default: false]
--help, -h diese Hilfe anzeigen und beenden
Wenn Sie surf ausführen, werden die SSRF-Kandidaten auf stdout ausgegeben, aber es werden auch zwei Dateien im Ordner gespeichert, von dem aus es ausgeführt wird:
external-{timestamp}.txt - Extern auflösend, aber von Ihrem Rechner aus nicht in der Lage, HTTP-Anfragen zu sendeninternal-{timestamp}.txt - Intern auflösend, und offensichtlich nicht in der Lage, HTTP-Anfragen von Ihrem Rechner aus zu sendenDiese beiden Dateien enthalten die Liste der Hosts, die ideale SSRF-Kandidaten zum Testen auf Ihrem Ziel sind. Die externe Zielliste hat höhere Chancen, brauchbar zu sein als die interne Liste.
Im Hintergrund nutzt dieses Tool httpx für das HTTP-Probing. Es erfasst die von httpx zurückgegebenen Fehler und führt dann eine grundlegende Analyse durch, um die am besten geeigneten Kandidaten für SSRF zu ermitteln.
Dieses Tool wurde im Rahmen eines Live-Hacking-Events für HackerOne (H1-4420 2023) erstellt.