
CF-Hero is a reconnaissance tool that uses multiple data sources to discover the origin IP addresses of Cloudflare-protected web applications
Was ist das? • Funktionen • Hintergrund • Installation • Verwendung • cf-hero ausführen • ZoomEye (Sponsor) • To Do
CF-Hero ist ein umfassendes Reconnaissance-Tool, das entwickelt wurde, um die echten IP-Adressen von Cloudflare-geschützten Webanwendungen zu entdecken. Es führt durch verschiedene Methoden eine Informationssammlung aus mehreren Quellen durch.
Das Tool analysiert Daten aus diesen Quellen, um potenzielle Ursprungs-IP-Adressen von Cloudflare-geschützten Zielen zu identifizieren. Es validiert die Ergebnisse durch Antwortanalysen, um Fehlalarme zu minimieren.
ein einfaches Flussdiagramm des Tools```
┌──────────┐
│ │ ┌─────────┐
│ 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 │◄───────────────────────────┘
└──────────┘
# Funktionen
### Funktionen
- DNS-Aufklärung
- Prüft aktuelle DNS-Einträge (A, TXT)
- Extrahiert Domains hinter Cloudflare
- Extrahiert Domains, die nicht hinter Cloudflare liegen
- Vom Benutzer bereitgestellter HTML-Titel (falls CF dich blockiert)
- Intelligente Einfärbung
- Drittanbieter-Intelligenz
- ZoomEye-Integration
- Censys-Integration
- Shodan-Integration
- SecurityTrails-Integration
- Reverse-IP-Lookup für zugehörige Domains
- Erweiterte Funktionen
- Unterstützung für benutzerdefinierte JA3-Fingerprints
- Parallele Scan-Fähigkeiten
- Unterstützung für Standardeingabe (Piping)
- HTML-Titelvergleich zur Validierung
- Proxy-Unterstützung
- Benutzerdefinierte User-Agent-Konfiguration
# Hintergrund
## Aktuelle DNS-Einträge
Schauen wir uns einen Anwendungsfall mit falsch konfigurierten DNS-Einstellungen an.
Wie du sehen kannst, gibt eine reguläre DNS-Abfrage die IP-Adresse der Domain zurück. Zum Beispiel liegt musana.net hinter Cloudflare (CF), aber manchmal hat die Domain mehrere A-Einträge, und einige davon entsprechen möglicherweise nicht IP-Adressen, die mit CF in Verbindung stehen. (Diese DNS-Ausgabe ist lediglich ein illustratives Beispiel und stellt möglicherweise nicht die exakte DNS-Antwort für musana.net dar.)```
;; 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)
Der andere Fall betrifft TXT-Einträge. Manchmal liegt eine Domain hinter Cloudflare, aber die echte IP der Domain kann in TXT-Einträgen verwendet werden. CF-Hero prüft alle TXT-Einträge, extrahiert anschließend alle IP-Adressen und versucht schließlich, sich per HTTP mit den gefundenen IPs zu verbinden.
Nehmen wir an, wir haben solche DNS-TXT-Einträge. Wie in den TXT-Einträgen zu sehen ist, gibt es einen SPF-Eintrag. Manche Unternehmen können einen eigenen Mailserver betreiben, und TXT-Einträge können eine IP enthalten, die auf die Zieldomain verweist.
Wie Sie in der folgenden DNS-Antwort sehen können, enthält der SPF-Eintrag einige IP-Adressen. Cf-Hero prüft auch diese.``` ;; 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 ist eine weitere Technik, um die echte IP einer Domain zu finden, die hinter CF liegt. Es gibt viele spezielle Suchmaschinen für spezielle Zwecke. Shodan und Censys sind zwei davon. Sie liefern detailliertere und technische Informationen. Diese Suchmaschinen scannen kontinuierlich das gesamte Internet, entdecken neue Assets oder überwachen und protokollieren Änderungen an Assets. Wenn eine Domain, die nicht hinter CF liegt, online geht, können Bots dieser Suchmaschinen die echte IP der Domain protokollieren. Wenn die Domain später hinter Cloudflare genommen wird, kann ihre IP mithilfe dieser Suchmaschinen gefunden werden.
CF-Hero prüft auch Censys und Shodan. (Hinweis: Wenn du diese Dienste nutzt, hast du aufgrund des API-Kontingents gewisse Limits.)
## (Sub)Domains
Der andere Trick ist die (Sub)domain-Technik. Eigentlich muss es nicht unbedingt eine Subdomain sein, es kann auch eine Domain sein. Der entscheidende Punkt ist hier: Die Domains sollten derselben Firma gehören.
Nehmen wir an, wir haben 2 Domains. Eine davon liegt hinter CF, die andere nicht. In diesem Fall verbindest du dich mit der Domain, die nicht hinter CF liegt, und änderst dann den Host-Header auf die Domain, die hinter CF liegt. Wenn du die Antwort der Anwendung erhältst, die hinter CF liegt, herzlichen Glückwunsch, du hast CF umgangen. Du kannst nun direkt über die IP auf die Webanwendung zugreifen. (und das hängt natürlich auch von der Konfiguration ab)
Schauen wir uns das genauer an```
--> 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 ----------------->/
Dienste für historische DNS-Einträge versuchen, alle Domains im Internet zu entdecken und Änderungen in den DNS-Einträgen dieser Domains aufzuzeichnen. Der bekannteste dieser Dienste ist securitytrails. Wenn eine Domain mit ihrer echten IP-Adresse im Internet veröffentlicht wird, kann der Bot dieses Dienstes ihre echte IP-Adresse protokollieren. Wenn die Domain anschließend hinter Cloudflare platziert wird, können die echten IP-Adressen mithilfe dieser Dienste herausgefunden werden. So können wir die echte IP-Adresse einer Domain ermitteln, die in der Vergangenheit über ihre echte IP-Adresse ausgestrahlt wurde.
Für historische DNS-Einträge wird der Security-Trails-Dienst verwendet. Sie können diesen Scan mit dem Parameter -securitytrails durchführen, nachdem Sie den API-Schlüssel in die Datei cf-hero.yaml eingetragen haben.
Für cf-hero ist go1.18 erforderlich, um es erfolgreich zu installieren. Führen Sie den folgenden Befehl aus, um es zu installieren.``` go install -v github.com/musana/cf-hero/cmd/cf-hero@latest
# Verwendung```
____ __
_____/ __/ / /_ ___ _________
/ ___/ /__ ___ / __ \/ _ \/ ___/ __ \
/ /__/ ___/ (___) / / / / __/ / / /_/ /
\___/_/ /_/ /_/\___/_/ \____/
@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
Der grundlegendste Ausführungsbefehl. Standardmäßig prüft er A- und TXT-Einträge.```
oder Sie können ihm den Parameter "f" übergeben.```
# cf-hero -f domains.txt
Verwenden Sie den Parameter zoomeye, um ZoomEye in den Scan einzubeziehen.```
Verwenden Sie den Parameter **censys**, um Censys in den Scan einzubeziehen.```
# cat domain.txt | cf-hero -censys
Verwenden Sie den Parameter shodan, um Shodan in den Scan einzubeziehen.```
Verwenden Sie den Parameter **securitytrails**, um SecurityTrails in den Scan einzubeziehen.```
# cat domain.txt | cf-hero -securitytrails
Verwenden Sie die Parameter -td und -dl, um zu versuchen, die IP-Adresse der Zieldomäne zu finden, indem Sie eine Liste von Domänen oder Subdomänen verwenden, die sich nicht hinter Cloudflare befinden. Indem Sie mit dem Parameter -dl die IP-Adressen in den Blöcken angeben, in denen Sie aktive IP-Adressen identifiziert haben, die von der Cloud- oder On-Premises-Infrastruktur des Ziels verwendet werden, können Sie die tatsächliche IP-Adresse der Zieldomäne finden.```
um Domains hinter CF zu erhalten```
# cf-hero -f domains.txt -cf
um Domains zu erhalten, die nicht hinter CF liegen```
weitere Optionen (benutzerdefinierte ja3, proxy, worker, user agent)```
# cf-hero -d https://musana.net -ua "Mozilla" -w 32 -ja3 "771,22..." -px "http://127.0.0.1:8080"
Erstelle die Datei cf-hero.yaml im Verzeichnis $HOME/.config/, um den API-Schlüssel festzulegen.```
// content of YAML file should be like;
zoomeye:
> **Hinweis zu Censys:** CF-Hero verwendet jetzt die [Censys Platform API](https://docs.censys.com/reference/get-started)
> (die ältere `search.censys.io`-API wird 2026 eingestellt). Erzeugen Sie ein Personal Access Token (PAT)
> aus der Censys-Platform-Konsole und fügen Sie ihn als ersten `censys`-Eintrag ein. Wenn Ihr Konto einen kostenpflichtigen
> Plan hat, fügen Sie Ihre Organization ID (auf der API-Access-Seite angezeigt) als zweiten Eintrag hinzu — ohne sie gibt die API
> Free-Tier-Berechtigungen zurück und liefert möglicherweise keine Ergebnisse (HTTP 403).
## SS
- Intelligente Farbgebung: Gelbe Markierungen kennzeichnen Nicht-Cloudflare-IPs, die nur einer Prüfung unterzogen werden.
- Der Titel-Parameter kann gesetzt werden, wenn die erste Anfrage von Cloudflare blockiert wird. (Der Titel wäre 'Just a moment...') Wenn der Titel-Parameter nicht gesetzt ist, wird der HTML-Titel automatisch abgerufen.
<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>
## 🏆 Sponsoring
Dieses Projekt wird stolz unterstützt von [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>
## Offene Aufgaben
- Favicon-Suche
- viewdns-Integration