
Filtra listas de hosts para identificar candidatos viáveis a SSRF, testando a acessibilidade HTTP e resolvendo IPs internos/externos, contornando listas negras tradicionais em ambientes de nuvem.
surf permite que você filtre uma lista de hosts, retornando uma lista de candidatos viáveis para SSRF. Ele faz isso enviando uma requisição HTTP da sua máquina para cada host, coletando todos os hosts que não responderam e filtrando-os em uma lista de hosts voltados para o exterior (externos) e hosts voltados para a rede interna.
Você pode então testar esses hosts onde quer que uma vulnerabilidade SSRF possa estar presente. Como a maioria dos filtros SSRF se concentra apenas em intervalos de IP internos ou restritos, você ficará surpreso ao conseguir SSRF em um IP externo que não está acessível via HTTP(s) a partir da sua máquina.
Frequentemente, você encontrará grandes empresas com ambientes cloud que possuem IPs externos para aplicações web internas. Filtros SSRF tradicionais não capturam isso, a menos que esses hosts sejam especificamente adicionados a uma lista negra (o que geralmente nunca acontece). É por isso que essa técnica pode ser tão poderosa.
Esta ferramenta requer Go 1.19 ou superior, pois dependemos do httpx para fazer a sondagem HTTP.
Pode ser instalada com o seguinte comando:
go install github.com/assetnote/surf/cmd/surf@latest
Considere que você possui subdomínios para bigcorp.com dentro de um arquivo chamado bigcorp.txt, e deseja encontrar todos os candidatos SSRF para esses subdomínios. Aqui estão alguns exemplos:
# encontrar todos os candidatos ssrf (incluindo endereços IP externos via sondagem HTTP)
surf -l bigcorp.txt
# encontrar todos os candidatos ssrf (incluindo endereços IP externos via sondagem HTTP) com configurações de timeout e concorrência
surf -l bigcorp.txt -t 10 -c 200
# encontrar todos os candidatos ssrf (incluindo endereços IP externos via sondagem HTTP) e apenas imprimir todos os hosts
surf -l bigcorp.txt -d
# encontrar todos os hosts que apontam para um endereço IP interno/privado (sem sondagem HTTP)
surf -l bigcorp.txt -x
A lista completa de configurações pode ser encontrada abaixo:
❯ surf -h
███████╗██╗ ██╗██████╗ ███████╗
██╔════╝██║ ██║██╔══██╗██╔════╝
███████╗██║ ██║██████╔╝█████╗
╚════██║██║ ██║██╔══██╗██╔══╝
███████║╚██████╔╝██║ ██║██║
╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
por shubs @ assetnote
Uso: surf [--hosts FILE] [--concurrency CONCURRENCY] [--timeout SECONDS] [--retries RETRIES] [--disablehttpx] [--disableanalysis]
Opções:
--hosts FILE, -l FILE
Lista de assets (hosts ou subdomínios)
--concurrency CONCURRENCY, -c CONCURRENCY
Threads (repassado para httpx) - padrão 100 [padrão: 100]
--timeout SECONDS, -t SECONDS
Timeout em segundos (repassado para httpx) - padrão 3 [padrão: 3]
--retries RETRIES, -r RETRIES
Tentativas em caso de falha (repassado para httpx) - padrão 2 [padrão: 2]
--disablehttpx, -x Desabilitar httpx e apenas exibir lista de hosts que resolvem para um endereço IP interno - padrão falso [padrão: false]
--disableanalysis, -d
Desabilitar análise e apenas exibir lista de hosts - padrão falso [padrão: false]
--help, -h exibir esta ajuda e sair
Ao executar surf, ele imprimirá os candidatos SSRF no stdout, mas também salvará dois arquivos na pasta de onde foi executado:
external-{timestamp}.txt - Resolução externa, mas incapaz de enviar requisições HTTP a partir da sua máquinainternal-{timestamp}.txt - Resolução interna e, obviamente, incapaz de enviar requisições HTTP a partir da sua máquinaEsses dois arquivos conterão a lista de hosts que são candidatos SSRF ideais para testar em seu alvo. A lista de alvos externos tem maiores chances de ser viável do que a lista interna.
Por baixo dos panos, esta ferramenta utiliza httpx para fazer a sondagem HTTP. Ela captura erros retornados pelo httpx e realiza uma análise básica para determinar os candidatos mais viáveis para SSRF.
Esta ferramenta foi criada como resultado de um evento de hacking ao vivo para o HackerOne (H1-4420 2023).