
Filtra listas de hosts para identificar candidatos viables para SSRF probando la accesibilidad HTTP y resolviendo IPs internas/externas, evitando las listas negras tradicionales en entornos de nube.
surf te permite filtrar una lista de hosts, devolviendo una lista de candidatos SSRF viables. Lo hace enviando una petición HTTP desde tu máquina a cada host, recogiendo todos los hosts que no respondieron y luego filtrándolos en una lista de hosts de cara externa y de cara interna.
Luego puedes probar estos hosts donde sea que pueda haber una vulnerabilidad SSRF. Debido a que la mayoría de los filtros SSRF solo se centran en rangos IP internos o restringidos, te sorprenderá gratamente cuando consigas un SSRF en una IP externa que no es accesible vía HTTP(s) desde tu máquina.
A menudo encontrarás que grandes empresas con entornos cloud tienen IPs externas para aplicaciones web internas. Los filtros SSRF tradicionales no capturarán esto a menos que estos hosts se añadan específicamente a una lista negra (lo que normalmente nunca ocurre). Por eso esta técnica puede ser tan poderosa.
Esta herramienta requiere go 1.19 o superior, ya que dependemos de httpx para realizar el sondeo HTTP.
Se puede instalar con el siguiente comando:
go install github.com/assetnote/surf/cmd/surf@latest
Considera que tienes subdominios de bigcorp.com dentro de un archivo llamado bigcorp.txt, y quieres encontrar todos los candidatos SSRF para esos subdominios. Aquí tienes algunos ejemplos:
# 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
La lista completa de opciones se encuentra a continuación:
❯ surf -h
███████╗██╗ ██╗██████╗ ███████╗
██╔════╝██║ ██║██╔══██╗██╔════╝
███████╗██║ ██║██████╔╝█████╗
╚════██║██║ ██║██╔══██╗██╔══╝
███████║╚██████╔╝██║ ██║██║
╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
by shubs @ assetnote
Usage: surf [--hosts FILE] [--concurrency CONCURRENCY] [--timeout SECONDS] [--retries RETRIES] [--disablehttpx] [--disableanalysis]
Options:
--hosts FILE, -l FILE
List of assets (hosts or subdomains)
--concurrency CONCURRENCY, -c CONCURRENCY
Threads (passed down to httpx) - default 100 [default: 100]
--timeout SECONDS, -t SECONDS
Timeout in seconds (passed down to httpx) - default 3 [default: 3]
--retries RETRIES, -r RETRIES
Retries on failure (passed down to httpx) - default 2 [default: 2]
--disablehttpx, -x Disable httpx and only output list of hosts that resolve to an internal IP address - default false [default: false]
--disableanalysis, -d
Disable analysis and only output list of hosts - default false [default: false]
--help, -h display this help and exit
Al ejecutar surf, se imprimirán los candidatos SSRF en stdout, pero también guardará dos archivos dentro de la carpeta desde donde se ejecuta:
external-{timestamp}.txt - Resuelve externamente, pero no se pueden enviar peticiones HTTP desde tu máquinainternal-{timestamp}.txt - Resuelve internamente, y obviamente no se pueden enviar peticiones HTTP desde tu máquinaEstos dos archivos contendrán la lista de hosts que son candidatos SSRF ideales para probar en tu objetivo. La lista de objetivos externos tiene más probabilidades de ser viable que la lista interna.
Internamente, esta herramienta utiliza httpx para realizar el sondeo HTTP. Captura los errores devueltos por httpx y luego realiza un análisis básico para determinar los candidatos más viables para SSRF.
Esta herramienta fue creada como resultado de un evento de hacking en vivo para HackerOne (H1-4420 2023).