
CF-Hero هي أداة استطلاع تستخدم مصادر بيانات متعددة لاكتشاف عناوين IP الأصلية لتطبيقات الويب المحمية بـ Cloudflare
ما هو؟ • الميزات • الخلفية • التثبيت • الاستخدام • تشغيل cf-hero • ZoomEye (الراعي) • المهام
CF-Hero أداة استطلاع شاملة طُوّرت لاكتشاف عناوين IP الحقيقية لتطبيقات الويب المحمية بواسطة Cloudflare. وهي تجمع المعلومات من مصادر متعددة عبر أساليب متنوعة.
تحلل الأداة البيانات الواردة من هذه المصادر لتحديد عناوين IP الأصلية المحتملة للأهداف المحمية بواسطة Cloudflare. وتتحقق من النتائج عبر تحليل الاستجابات لتقليل النتائج الإيجابية الكاذبة.
مخطط انسيابي بسيط للأداة```
┌──────────┐
│ │ ┌─────────┐
│ 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 المخصصة
- إمكانيات فحص متزامن
- دعم الإدخال القياسي (piping)
- مقارنة عنوان HTML للتحقق
- دعم الوكيل (Proxy)
- تكوين User-Agent مخصص
# خلفية
## سجلات DNS الحالية
لنلقِ نظرة على بعض حالات الاستخدام مع إعدادات DNS غير صحيحة.
كما ترى، استعلام DNS العادي يُرجع عنوان IP الخاص بالمجال. على سبيل المثال، musana.net يقع خلف Cloudflare (CF)، لكن في بعض الأحيان يحتوي المجال على عدة سجلات A، وقد لا يتوافق بعضها مع عناوين IP المرتبطة بـ CF. (مخرجات DNS هذه هي مجرد مثال توضيحي وقد لا تمثل إجابة DNS الدقيقة لـ 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)
الحالة الأخرى تتعلق بسجلات 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 هي تقنية أخرى للعثور على عنوان IP الحقيقي لأي نطاق يكون خلف Cloudflare. هناك العديد من محركات البحث الخاصة لأغراض خاصة. Shodan و Censys هما اثنان منها. توفران مزيدًا من التفاصيل والمعلومات التقنية. تفحص محركات البحث هذه الإنترنت بالكامل باستمرار وتكتشف الأصول الجديدة أو تراقب التغييرات في الأصول وتسجلها. عندما يظهر نطاق ليس خلف Cloudflare، يمكن لكلا المحركين تسجيل عنوان IP الحقيقي للنطاق. بعد فترة، إذا أصبح النطاق خلف Cloudflare، يمكن العثور على عنوان IP الخاص به باستخدام محركات البحث هذه.
يتحقق CF-Hero من Censys و Shodan أيضًا. (لاحظ أنه عند استخدام هذه الخدمات لديك بعض القيود بسبب حصة API.)
## (Sub)Domains
الطريقة الملتوية الأخرى هي تقنية النطاقات الفرعية. في الواقع، لا يشترط أن تكون نطاقًا فرعيًا؛ يمكن أن تكون نطاقًا أيضًا. النقطة الأساسية هنا؛ يجب أن تنتمي النطاقات إلى نفس الشركة.
لنفترض أن لدينا نطاقين. أحدهما خلف Cloudflare والآخر ليس كذلك. في هذه الحالة، تتصل بالنطاق الذي ليس خلف Cloudflare ثم تغيّر رأس المضيف (Host header) ليكون النطاق الذي خلف Cloudflare. إذا حصلت على استجابة التطبيق الذي خلف Cloudflare، فتهانينا فقد تجاوزت Cloudflare. يمكنك الوصول إلى تطبيق الويب مباشرة عبر عنوان IP بعد الآن. (وبالطبع هذا يعتمد أيضًا على الإعدادات)
لنلقِ نظرة عن قرب```
--> 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 الحقيقي في الماضي.
تستخدم هذه الأداة خدمة security trails لسجلات DNS التاريخية. يمكنك إجراء هذا الفحص باستخدام المعامل -securitytrails بعد إدخال مفتاح API في ملف cf-hero.yaml.
يتطلب 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 لمحاولة العثور على عنوان IP الخاص بالمجال الهدف من خلال الاستعانة بقائمة من المجالات أو النطاقات الفرعية التي لا تقع خلف Cloudflare. ومن خلال تحديد عناوين IP في الكتل التي رصدت فيها عناوين IP حية تستخدمها البنية التحتية السحابية أو المحلية للهدف باستخدام المعلمة -dl، يمكنك العثور على عنوان IP الحقيقي للمجال الهدف.```
للحصول على النطاقات خلف CF```
# cf-hero -f domains.txt -cf
للحصول على النطاقات غير الموجودة خلف CF```
خيارات أخرى (custom 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"
أنشئ ملف cf-hero.yaml تحت الدليل $HOME/.config/ لتعيين مفتاح 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` القديمة في 2026). أنشئ رمز وصول شخصي (PAT)
> من وحدة تحكم Censys Platform وضعه كأول إدخال `censys`. إذا كان حسابك على خطة مدفوعة،
> أضف معرف مؤسستك (المعروض في صفحة الوصول إلى API) كإدخال ثانٍ — بدونه، تُرجع واجهة API
> أذونات الطبقة المجانية وقد لا تُرجع أي نتائج (HTTP 403).
## لقطات الشاشة
- التلوين الذكي: تشير الإبرازات الصفراء إلى عناوين IP غير تابعة لـ Cloudflare، والتي ستخضع للفحوصات فقط.
- يمكن تعيين معامل 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>
## 🏆 الرعاية
هذا المشروع مدعوم بفخر من [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