
CF-Hero is a reconnaissance tool that uses multiple data sources to discover the origin IP addresses of Cloudflare-protected web applications
Cos'è? • Funzionalità • Contesto • Installazione • Utilizzo • Esecuzione di cf-hero • ZoomEye (Sponsor) • Da fare
CF-Hero è uno strumento completo di ricognizione sviluppato per scoprire i veri indirizzi IP delle applicazioni web protette da Cloudflare. Esegue la raccolta di informazioni da più fonti attraverso diversi metodi.
Lo strumento analizza i dati provenienti da queste fonti per identificare i potenziali indirizzi IP di origine dei target protetti da Cloudflare. Convalida i risultati tramite l'analisi delle risposte per ridurre al minimo i falsi positivi.
un semplice diagramma di flusso dello strumento```
┌──────────┐
│ │ ┌─────────┐
│ 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 │◄───────────────────────────┘
└──────────┘
# Funzionalità
### Funzionalità
- Ricognizione DNS
- Controlla i record DNS attuali (A, TXT)
- Estrae i domini dietro Cloudflare
- Estrae i domini non dietro Cloudflare
- Titolo HTML fornito dall'utente (nel caso in cui CF ti blocchi)
- Colorazione intelligente
- Intelligence di terze parti
- Integrazione ZoomEye
- Integrazione Censys
- Integrazione Shodan
- Integrazione SecurityTrails
- Reverse IP lookup per domini associati
- Funzionalità avanzate
- Supporto per fingerprint JA3 personalizzate
- Capacità di scansione concorrente
- Supporto per input standard (piping)
- Confronto del titolo HTML per la validazione
- Supporto proxy
- Configurazione personalizzata dello User-Agent
# Contesto
## Record DNS attuali
Diamo un'occhiata ad alcuni casi d'uso con impostazioni DNS non configurate correttamente.
Come puoi vedere, una normale query DNS restituisce l'indirizzo IP del dominio. Ad esempio, musana.net è dietro Cloudflare (CF), ma a volte il dominio ha più record A, e alcuni di essi potrebbero non corrispondere agli indirizzi IP associati a CF. (Questa risposta DNS è solo un esempio illustrativo e potrebbe non rappresentare la risposta DNS esatta per 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)
L'altro caso è legato ai record TXT. A volte il dominio è dietro a CF, ma l'IP reale del dominio può essere usato nei record TXT. CF-Hero controlla tutti i record TXT, poi estrae tutti gli indirizzi IP e infine tenta di connettersi all'IP trovato via HTTP.
Supponiamo di avere dei record TXT DNS. Come si vede nei record TXT, c'è un record SPF. Alcune aziende possono ospitare il proprio server di posta e i record TXT possono contenere un IP che punta al dominio di destinazione.
Come puoi vedere nella seguente risposta DNS, il record SPF contiene alcuni indirizzi IP. Cf-Hero controlla anche questi.``` ;; 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
L'OSINT è un'altra tecnica per trovare l'IP reale di qualsiasi dominio che si trova dietro a CF. Ci sono molti motori di ricerca specializzati per scopi specifici. Shodan e Censys sono due di questi. Forniscono più dettagli e informazioni tecniche. Questi motori di ricerca scansionano l'intera internet continuamente e scoprono nuove risorse o monitorano e registrano i cambiamenti nelle risorse. Quando un dominio che non è dietro a CF viene attivato, entrambi questi motori possono registrare l'IP reale del dominio. Dopo un po', se il dominio viene messo dietro Cloudflare, il suo IP può essere trovato usando questi motori di ricerca.
CF-Hero controlla anche Censys e Shodan. (Nota: quando usi questi servizi hai alcuni limiti dovuti alla quota API.)
## (Sotto)Domini
L'altro modo ingegnoso è la tecnica dei (sotto)domini. In realtà non deve essere per forza un sottodominio, può essere anche un dominio. Il punto chiave è questo: i domini dovrebbero appartenere alla stessa azienda.
Diciamo che abbiamo 2 domini. Uno di essi è dietro a CF ma l'altro no. In questo caso, ti connetti al dominio che non è dietro a CF e poi cambi l'host header con il dominio che è dietro a CF. Se ottieni la risposta dell'applicazione che è dietro a CF, congratulazioni hai bypassato CF. Puoi ora accedere all'applicazione web direttamente dall'IP. (e ovviamente dipende anche dalla configurazione)
Diamo un'occhiata più da vicino```
--> 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 ----------------->/
I servizi di record DNS storici cercano di scoprire tutti i domini su Internet e registrano le modifiche nei record DNS di questi domini. Il più noto di questi servizi è securitytrails. Se un dominio viene pubblicato su Internet con il suo indirizzo IP reale, il bot di questi servizi può registrarne l'indirizzo IP reale; successivamente, se il dominio viene spostato dietro cloudflare, gli indirizzi IP reali possono essere scoperti usando questi servizi. In questo modo, possiamo trovare l'indirizzo IP reale di un dominio che in passato ha reso pubblico il proprio indirizzo IP reale.
Utilizza il servizio security trails per i record DNS storici. Puoi eseguire questa scansione usando il parametro -securitytrails dopo aver inserito la chiave API nel file cf-hero.yaml.
cf-hero richiede go1.18 per installarsi correttamente. Esegui il seguente comando per installarlo.``` 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
Il comando di esecuzione più semplice. Per impostazione predefinita, controlla i record A e TXT.```
oppure puoi passare ad esso il parametro "f".```
# cf-hero -f domains.txt
Usa il parametro zoomeye per includere ZoomEye nella scansione.```
Usa il parametro **censys** per includere Censys nella scansione```
# cat domain.txt | cf-hero -censys
Usa il parametro shodan per includere Shodan nella scansione```
Usa il parametro **securitytrails** per includere SecurityTrails nella scansione.```
# cat domain.txt | cf-hero -securitytrails
Utilizza i parametri -td e -dl per tentare di trovare l'indirizzo IP del dominio di destinazione utilizzando un elenco di domini o sottodomini che non sono dietro Cloudflare. Specificando gli indirizzi IP nei blocchi in cui hai identificato indirizzi IP live utilizzati dall'infrastruttura cloud o on-premises del target con il parametro -dl, puoi trovare l'indirizzo IP reale del dominio di destinazione.```
per ottenere i domini dietro CF```
# cf-hero -f domains.txt -cf
per ottenere domini non dietro CF```
altre opzioni (ja3 personalizzato, proxy, worker, user agent)```
# cf-hero -d https://musana.net -ua "Mozilla" -w 32 -ja3 "771,22..." -px "http://127.0.0.1:8080"
crea il file cf-hero.yaml nella directory $HOME/.config/ per impostare la chiave delle API```
// content of YAML file should be like;
zoomeye:
> **Nota su Censys:** CF-Hero ora utilizza la [Censys Platform API](https://docs.censys.com/reference/get-started)
> (l'API legacy `search.censys.io` verrà dismessa nel 2026). Genera un Personal Access Token (PAT)
> dalla console Censys Platform e inseriscilo come prima voce `censys`. Se il tuo account è su un piano a pagamento,
> aggiungi il tuo Organization ID (mostrato nella pagina API Access) come seconda voce — senza di esso, l'API
> restituisce autorizzazioni di livello gratuito e potrebbe non produrre risultati (HTTP 403).
## Schermate
- Colorazione intelligente: le evidenziazioni gialle indicano IP non Cloudflare, che saranno soggetti solo a controlli.
- Il parametro title può essere impostato se la prima richiesta viene bloccata da Cloudflare. (Il titolo sarebbe 'Just a moment...') Se il parametro title non è impostato, il titolo HTML viene recuperato 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>
## 🏆 Sponsorizzazione
Questo progetto è orgogliosamente supportato da [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>
## Da fare
- ricerca favicon
- integrazione viewdns