
CF-Hero é uma ferramenta de reconhecimento que utiliza múltiplas fontes de dados para descobrir os endereços IP de origem de aplicações web protegidas pelo Cloudflare.
O que é? • Recursos • Contexto • Instalação • Uso • Executando o cf-hero • ZoomEye (Patrocinador) • Pendências
O CF-Hero é uma ferramenta abrangente de reconhecimento desenvolvida para descobrir os endereços IP reais de aplicações web protegidas pelo Cloudflare. Ela realiza a coleta de inteligência de múltiplas fontes por meio de diversos métodos.
A ferramenta analisa os dados dessas fontes para identificar possíveis endereços IP de origem de alvos protegidos pelo Cloudflare. Ela valida os resultados por meio da análise de respostas para minimizar falsos positivos.
um fluxograma simples da ferramenta```
┌──────────┐
│ │ ┌─────────┐
│ Domain │───────►│ Check A │
│ │ │ Records │
└──────────┘ └────┬────┘
│
┌──────────────────┘
│
▼
┌─────────────┐
│Is it behind │ YES
│ CloudFlare │────────────────────────────────────────┐
└─────────────┘ │
│ │
│ │
│ ▼
│ ┌──────────────────────────┐
│ │ Check the domain from │
│ ┌─────────────────│ various sources │───────────────────┐
│ │ └──────────────────────────┘ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ ▼
│ ┌────────────────┐ ┌─────────────┐ ┌───────────┐ ┌─────────────┐
│ │ Historical DNS │ │ Current DNS │ ┌─┤ OSINT │ │ Sub/domains │
│ ┌──│ Records │ ┌─│ Records │ │ └───────────┘ ┌─│ │
│ │ └────────────────┘ │ └─────────────┘ │ ┌─────────┐ │ └─────────────┘
│ │ ┌──────────────┐ │ ┌───────────┐ ├──►│ ZoomEye │ │ ┌─────────────┐
│ ├───►│SecurityTrails│ ├──►│ TXT │ │ └─────────┘ │ │ sub(domains)│
│ │ └──────────────┘ │ └───────────┘ │ ┌─────────┐ └──►│ used by the │
│ │ ┌──────────────┐ │ ┌───────────┐ ├──►│ Shodan │ │ same company│
│ │ └───►│Completedns │ └──►│ A │ │ └─────────┘ └─────────────┘ │
│ │ └──────────────┘ └───────────┘ │ ┌─────────┐ │
│ │ └──►│ Censys │ │
│ │ └─────────┘ │
│ │ │
│ │ │
│ └────────────────────────────────────────────┬────────────────────────────────────────────┘
│ │
NO │ │
│ │
│ │
│ ▼
│ ┌──────────────────────────────────────┐
│ │ Establish direct HTTP connections to │
│ │ each discovered IP address │
│ └──────────────────────────────────────┘
│ │
│ │
│ │
│ ▼
│ ┌─────────────────────────────┐
│ │ Compare the HTML title with │
│ │ the target's title │
│ └─────────────────────────────┘
│ │
│ │
│ │
│ ▼
│ ┌─────────────────────┐
│ │ │ YES
│ │ Are they the same ? │─────────────────────┐
│ │ │ │
│ └─────────────────────┘ ▼
│ │ ┌───────────────┐
│ │NO │ Real IP found │
│ │ └───────┬───────┘
│ ▼ │
│ ┌──────────┐ │
└───────────────────────────────────────────►│ FINISH │◄───────────────────────────┘
└──────────┘
# Recursos
### Funcionalidades
- Reconhecimento de DNS
- Verifica os registos DNS atuais (A, TXT)
- Extrai domínios por detrás da Cloudflare
- Extrai domínios que não estão atrás da Cloudflare
- Título HTML fornecido pelo utilizador (caso a CF bloqueie)
- Coloração inteligente
- Intelligence de Terceiros
- Integração ZoomEye
- Integração Censys
- Integração Shodan
- Integração SecurityTrails
- Pesquisa reversa de IP para domínios associados
- Funcionalidades Avançadas
- Suporte de impressão digital JA3 personalizada
- Capacidades de verificação concorrente
- Suporte de entrada padrão (piping)
- Comparação do título HTML para validação
- Suporte de proxy
- Configuração de User-Agent personalizado
# Contexto
## Registos DNS Atuais
Vamos analisar alguns casos de uso com definições DNS mal configuradas.
Como pode ver, uma consulta DNS normal devolve o endereço IP do domínio. Por exemplo, musana.net está atrás da Cloudflare (CF), mas por vezes o domínio tem múltiplos registos A, e alguns deles podem não corresponder a endereços IP associados à CF. (Esta saída DNS é meramente um exemplo ilustrativo e pode não representar a resposta DNS exata para musana.net.)```
;; ANSWER SECTION:
musana.net. 300 IN A 104.16.42.102
musana.net. 300 IN A 104.16.43.102
musana.net. 300 IN A 123.45.67.89 (Real IP exposed)
musana.net. 300 IN A 123.45.76.98 (Real IP exposed)
Outro caso está relacionado a registros TXT. Às vezes o domínio está atrás do CF, mas o IP real do domínio pode ser usado em registros TXT. CF-Hero verifica todos os registros TXT, depois extrai todos os endereços IP e finalmente tenta se conectar via HTTP ao IP que encontrou.
Digamos que temos registros DNS TXT. Como visto nos registros TXT, há o registro SPF. Alguma empresa pode hospedar seu próprio servidor de e-mail e os registros TXT podem conter o IP que aponta para o domínio de destino.
Como você pode ver na seguinte resposta DNS, o registro SPF tem alguns endereços IP. O Cf-Hero também verifica esses.``` ;; ANSWER SECTION: musana.net. 115 IN TXT "1password-site-verification=LROK6G5XFJG5NF76TE2FBTABUA" musana.net. 115 IN TXT "5fG-7tA-G4V" musana.net. 115 IN TXT "MS=ms16524910" musana.net. 115 IN TXT "OSSRH-74956" musana.net. 115 IN TXT "docker-verification=6910d334-a3fc-419c-89ac-57668af5bf0d" musana.net. 115 IN TXT "docusign=4c6d27bb-572e-4fd4-896c-81bfb0af0aa1" musana.net. 115 IN TXT "shopify-verification-code=1Ww5VsPpkIf32cJ5PdDHdguRk22K2R" musana.net. 115 IN TXT "shopify-verification-code=NM243t2faQbaJs8SRFMSEQAc4J9UQf" musana.net. 115 IN TXT "v=spf1 include:_spf.google.com include:cust-spf.exacttarget.com include:amazonses.com include:mail.zendesk.com include:servers.mcsv.net include:spf.mailjet.com ip4:216.74.162.13 ip4:216.74.162.14 ip4:153.95.95.86 ip4:18.197.36.5 -all"
## OSINT
OSINT é outra técnica para encontrar o IP real de qualquer domínio que esteja atrás da CF. Existem muitos mecanismos de busca especiais para fins especiais. Shodan e Censys são dois deles. Eles fornecem mais detalhes e informações técnicas. Esses mecanismos de busca varrem toda a internet continuamente e descobrem novos ativos ou monitoram e registram mudanças em ativos. Quando um domínio que não está atrás da CF é colocado no ar, os bots desses mecanismos podem registrar o IP real do domínio. Depois de um tempo, se o domínio for colocado atrás do Cloudflare, o IP deles pode ser encontrado usando esses mecanismos de busca.
CF-Hero também verifica Censys e Shodan. (Observe que quando você usa esses serviços, você tem algum limite devido à cota da API.)
## (Sub)Domínios
A outra forma de truque é a técnica de (sub)domínio. Na verdade, não precisa ser um subdomínio, pode ser também um domínio. O ponto-chave aqui é: os domínios devem pertencer à mesma empresa.
Digamos que temos 2 domínios. Um deles está atrás da CF, mas o outro não. Nesse caso, você se conecta ao domínio que não está atrás da CF e então altera o host header para o domínio que está atrás da CF. Se você obtiver resposta da aplicação que está atrás da CF, parabéns, você contornou a CF. Você pode acessar a aplicação web pelo IP diretamente agora. (e, claro, isso também depende da configuração)
Vamos dar uma olhada mais de perto```
--> TCP --> blog.musana.net [123.45.67.89] ---> HTTPs -------------\
\
--> TCP --> api.musana.net [123.67.45.98] ----> HTTPs -----------\ \
\ \
--> TCP --> test.musana.net [123.89.44.88] ---> HTTPs -------------\ \
\___\____________________
--> TCP --> tools.musana.net [123.44.55.66] --> HTTPs -------------> | GET / HTTP/2 |
| Host: musana.net | ====> Check & Compare Responses
--> TCP --> admin.musana.net [33.44.123.45] --> HTTPs -------------->|_______________________|
/ /
--> TCP --> ... [...] ------------------------> HTTPs ------------------>/ /
/ /
--> TCP --> ... [...] ------------------------> HTTPs ---------------->/ /
/ /
--> TCP --> random-test.com [55.44.11.33] ----> HTTPs -------------->/ /
/
--> TCP --> fsubsidiary.net [66.77.22.123] ---> HTTPs ----------------->/
Os serviços de registros históricos de DNS tentam descobrir todos os domínios na Internet e registrar alterações nos registros DNS desses domínios. O mais conhecido desses serviços é o securitytrails. Se um domínio for publicado na internet com seu endereço IP real, o bot desse serviço pode registrar seu endereço IP real; depois, se o domínio for colocado atrás do cloudflare, os endereços IP reais podem ser descobertos usando esses serviços. Assim, podemos encontrar o endereço IP real de um domínio que foi divulgado com o endereço IP real no passado.
Ele usa o serviço security trails para registros históricos de DNS. Você pode realizar essa verificação usando o parâmetro -securitytrails após inserir a chave de API no arquivo cf-hero.yaml.
O cf-hero requer go1.18 para instalar com sucesso. Execute o seguinte comando para instalar.``` go install -v github.com/musana/cf-hero/cmd/cf-hero@latest
# Uso```
____ __
_____/ __/ / /_ ___ _________
/ ___/ /__ ___ / __ \/ _ \/ ___/ __ \
/ /__/ ___/ (___) / / / / __/ / / /_/ /
\___/_/ /_/ /_/\___/_/ \____/
@musana
_____________________________________________
Unmask the origin IPs of Cloudflare-protected domains
Usage:
cf-hero [flags]
Flags:
GENERAL OPTIONS:
-w int Worker count (default 16)
-f string Input file containing list of host/domain
-v Enable verbose output
-title string Specify HTML title to match (skip fetching from Cloudflare domain)
PRINT OPTIONS:
-cf Print domains behind Cloudflare
-non-cf Print domains not behind Cloudflare
SOURCES:
-censys Include Censys in scanning
-securitytrails Include SecurityTrails historical DNS records in scanning
-shodan Include Shodan historical DNS records in scanning
-zoomeye Include Zoomeye in scanning
-dl string Domain list for sub/domain scanning
-td string Target domain for sub/domain scanning
CONFIGURATION:
-hm string HTTP method. (default "GET")
-ja3 string JA3 String (default "772,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-10-16-23-45-35-5-11-13-65281-0-51-43-17513-27,29-23-24,0")
-ua string HTTP User-Agent (default "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/113.0")
-px string HTTP proxy URL
O comando de execução mais básico. Ele verifica registros A e TXT por padrão.```
ou você pode passar o parâmetro "f" para ele.```
# cf-hero -f domains.txt
Use o parâmetro zoomeye para incluir ZoomEye na varredura```
Use o parâmetro **censys** para incluir o Censys na varredura```
# cat domain.txt | cf-hero -censys
Use o parâmetro shodan para incluir o Shodan na varredura```
Use o parâmetro **securitytrails** para incluir SecurityTrails na varredura.```
# cat domain.txt | cf-hero -securitytrails
Use os parâmetros -td e -dl para tentar encontrar o endereço IP do domínio de destino utilizando uma lista de domínios ou subdomínios que não estão atrás do Cloudflare. Ao especificar os endereços IP nos blocos onde você identificou endereços IP ativos usados pela infraestrutura de nuvem ou on-premises do alvo com o parâmetro -dl, você pode encontrar o endereço IP real do domínio de destino.```
para obter domínios atrás do CF```
# cf-hero -f domains.txt -cf
para obter domínios que não estão atrás de CF```
outras opções (ja3 personalizado, proxy, worker, user agent)```
# cf-hero -d https://musana.net -ua "Mozilla" -w 32 -ja3 "771,22..." -px "http://127.0.0.1:8080"
crie o arquivo cf-hero.yaml no diretório $HOME/.config/ para definir a chave das APIs```
// content of YAML file should be like;
zoomeye:
> **Nota sobre o Censys:** O CF-Hero agora usa a [Censys Platform API](https://docs.censys.com/reference/get-started)
> (a API legada `search.censys.io` está sendo descontinuada em 2026). Gere um Personal Access Token (PAT)
> no console da Censys Platform e coloque-o como a primeira entrada `censys`. Se a sua conta estiver em um plano
> pago, adicione o ID da sua Organização (mostrado na página de API Access) como a segunda entrada — sem ele, a API
> retorna permissões de nível gratuito e pode não retornar resultados (HTTP 403).
## SS
- Coloração inteligente: destaques em amarelo indicam IPs que não são da Cloudflare, os quais serão apenas submetidos a verificações.
- O parâmetro title pode ser definido se a primeira requisição for bloqueada pela Cloudflare. (O título seria 'Just a moment...') Se o parâmetro title não for definido, o título HTML é recuperado automaticamente.
<p align="left">
<img src="https://assets.kitploit.com/production/public/readmes/49199/e80b0d75e679cf55e02181d2af808f95830912a200c11a7c30427223bd7099cf.png">
</p>
<p align="left">
<img src="https://assets.kitploit.com/production/public/readmes/49199/71d5a3a4afae8732b7a7f945260bf65cdd5b28599adc9677d601c9977a84bf0f.png">
</p>
## 🏆 Patrocínio
Este projeto é orgulhosamente apoiado pela [ZoomEye](https://www.zoomeye.ai).
<p height="100" align="left">
<a href="https://www.zoomeye.ai"><img height="100" src="https://www.zoomeye.ai/static/logo-CVnk4X2t.svg"></a>
</p>
## A Fazer
- pesquisa de favicon
- integração com viewdns