
CF-Heroは、複数のデータソースを使用してCloudflareで保護されたWebアプリケーションのオリジンIPアドレスを発見する偵察ツールです。
What's it? • Features • Background • Installation • Usage • Running cf-hero • ZoomEye (Sponsor) • To Do
CF-Hero は、Cloudflare によって保護された Web アプリケーションの実 IP アドレスを発見するために開発された、包括的な偵察ツールです。複数の情報源から多角的なインテリジェンス収集を行います。
このツールは、これらの情報源から得られたデータを分析し、Cloudflare で保護されたターゲットの潜在的なオリジン IP アドレスを特定します。また、応答分析を通じて検証を行い、誤検知を最小限に抑えます。
ツールの簡単なフローチャート```
┌──────────┐
│ │ ┌─────────┐
│ 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 │◄───────────────────────────┘
└──────────┘
# 機能
### 機能
- DNS 偵察
- 現在のDNSレコード(A、TXT)を確認します
- Cloudflareの背後にあるドメインを抽出します
- Cloudflareの背後にないドメインを抽出します
- ユーザー指定のHTMLタイトル(CFがブロックする場合用)
- スマートな色分け
- サードパーティインテリジェンス
- ZoomEye連携
- Censys連携
- Shodan連携
- SecurityTrails連携
- 関連ドメインの逆IPルックアップ
- 高度な機能
- カスタムJA3フィンガープリントのサポート
- 並行スキャン機能
- 標準入力サポート(パイプ)
- 検証用のHTMLタイトル比較
- プロキシサポート
- カスタムUser-Agent設定
# 背景
## 現在のDNSレコード
設定が誤っているDNS設定に関するいくつかのユースケースを見てみましょう。
ご覧のとおり、通常のDNSクエリはドメインのIPアドレスを返します。たとえば、musana.netはCloudflare(CF)の背後にありますが、ドメインが複数のAレコードを持ち、その一部がCFに関連付けられたIPアドレスに対応していない場合があります。(このDNS出力は単なる説明用の例であり、musana.netの正確なDNS応答を表すものではありません。)```
;; 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)
もう1つのケースはTXTレコードに関連するものです。ドメインがCFの背後にある場合でも、ドメインの実際のIPアドレスがTXTレコードに使用されていることがあります。CF-HeroはすべてのTXTレコードをチェックし、すべてのIPアドレスを抽出した後、最終的にHTTP経由で見つけたIPへの接続を試みます。
たとえば、このようなDNS TXTレコードがあるとします。TXTレコードで確認できるように、SPFレコードが存在します。一部の企業は自社のメールサーバーをホストしており、TXTレコードに対象ドメインを指すIPアドレスが含まれる場合があります。
以下のDNS応答で確認できるように、SPFレコードにはいくつかのIPアドレスが含まれています。Cf-Heroはこれらもチェックします。``` ;; 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 は、CFの背後にあるドメインの実IPを見つけるもう一つの手法です。特定の目的に特化した検索エンジンはたくさんあります。Shodan と Censys はそのうちの2つです。これらはより詳細で技術的な情報を提供します。これらの検索エンジンはインターネット全体を継続的にスキャンし、新しいアセットを発見したり、アセットの変化を監視・記録したりします。CFの背後にないドメインが公開されると、これらのエンジンのボットがそのドメインの実IPを記録できます。その後、ドメインがCloudflareの背後に移動した場合でも、これらの検索エンジンを使ってIPを見つけることができます。
CF-Hero は Censys と Shodan もチェックします。(注: これらのサービスを使用する場合、APIクォータによる制限があります。)
## (サブ)ドメイン
もう一つのトリックは(サブ)ドメインの手法です。実際にはサブドメインである必要はなく、ドメインでも構いません。ここで重要なのは、ドメインが同じ会社に属している必要があるということです。
2つのドメインがあるとしましょう。1つはCFの背後にあり、もう1つはCFの背後にありません。この場合、CFの背後にないドメインに接続し、HostヘッダーをCFの背後にあるドメインに変更します。CFの背後にあるアプリケーションの応答が得られたら、おめでとうございます、CFをバイパスできました。以降はIPから直接Webアプリケーションにアクセスできます。(もちろん、これも設定によります)
もう少し詳しく見てみましょう```
--> 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 ----------------->/
履歴DNSレコードサービスは、インターネット上のすべてのドメインを発見し、これらのドメインのDNSレコードの変更を記録しようとします。これらのサービスの中で最もよく知られているのは securitytrails です。ドメインが実IPアドレスとともにインターネット上に公開されている場合、これらのサービスのボットはその実IPアドレスを記録できます。その後、ドメインがCloudflareの背後に配置された場合でも、これらのサービスを使用して実IPアドレスを見つけ出すことができます。これにより、過去に実IPアドレスで公開されたことのあるドメインの実IPアドレスを見つけることができます。
履歴DNSレコードには securitytrails サービスを使用します。cf-hero.yaml ファイルにAPIキーを入力した後、-securitytrails パラメータを使用してこのスキャンを実行できます。
cf-hero を正常にインストールするには go1.18 が必要です。次のコマンドを実行してインストールしてください。``` go install -v github.com/musana/cf-hero/cmd/cf-hero@latest
# 使用方法```
____ __
_____/ __/ / /_ ___ _________
/ ___/ /__ ___ / __ \/ _ \/ ___/ __ \
/ /__/ ___/ (___) / / / / __/ / / /_/ /
\___/_/ /_/ /_/\___/_/ \____/
@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
最も基本的な実行コマンドです。デフォルトではAレコードとTXTレコードをチェックします。```
または、"f"パラメータを渡すこともできます。```
# cf-hero -f domains.txt
zoomeye パラメータを使用して、スキャンに ZoomEye を含めます。```
スキャンに Censys を含めるには、**censys** パラメータを使用します。```
# cat domain.txt | cf-hero -censys
shodan パラメータを使用して、スキャンに Shodan を含めます。```
**securitytrails** パラメータを使用して、スキャンに SecurityTrails を含めます。```
# cat domain.txt | cf-hero -securitytrails
-td パラメータと -dl パラメータを使用して、Cloudflare の背後にないドメインまたはサブドメインのリストを活用し、ターゲットドメインの IP アドレスを見つけようとします。-dl パラメータで、ターゲットのクラウドまたはオンプレミスインフラストラクチャで使用されているライブ IP アドレスを特定したブロック内の IP アドレスを指定すると、ターゲットドメインの実際の IP アドレスを見つけることができます。```
CFの背後にあるドメインを取得する```
# cf-hero -f domains.txt -cf
CFの背後にないドメインを取得するには```
その他のオプション (カスタム ja3、プロキシ、ワーカー、ユーザーエージェント)```
# cf-hero -d https://musana.net -ua "Mozilla" -w 32 -ja3 "771,22..." -px "http://127.0.0.1:8080"
$HOME/.config/ ディレクトリ配下に cf-hero.yaml ファイルを作成して、API キーを設定します。```
// content of YAML file should be like;
zoomeye:
> **Censys に関する注意:** CF-Hero は現在 [Censys Platform API](https://docs.censys.com/reference/get-started) を使用しています
> (旧 `search.censys.io` API は 2026 年に廃止予定です)。Censys Platform コンソールから Personal Access Token (PAT) を生成し、
> 最初の `censys` エントリとして設定してください。有料プランのアカウントの場合は、
> Organization ID (API Access ページに表示されています) を 2 番目のエントリとして追加してください。これがないと、API は
> Free 層の権限を返し、結果が得られない場合があります (HTTP 403)。
## SS
- スマートカラーリング: 黄色いハイライトは Cloudflare 以外の IP を示し、これらはチェックのみが行われます。
- title パラメータは、最初のリクエストが Cloudflare によってブロックされた場合に設定できます。(タイトルは 'Just a moment...' になります) title パラメータが設定されていない場合、HTML タイトルは自動的に取得されます。
<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>
## 🏆 Sponsorship
このプロジェクトは [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>
## 今後の予定
- favicon 検索
- viewdns 統合