
أداة Go تكتشف بشكل سلبي عنوان IP الأصلي الحقيقي خلف WAF/CDN باستخدام مصادر OSINT متعددة، ثم تتحقق من المرشحين عبر تشابه HTML، وبصمات شهادات SSL، وترويسات HTTP.
Unwaf هي أداة مكتوبة بلغة Go مصممة للمساعدة في تحديد طرق تجاوز WAF باستخدام تقنيات سلبية. تقوم بأتمتة عملية اكتشاف عنوان IP الأصلي الحقيقي خلف WAF/CDN من خلال الجمع بين عدة طرق للاكتشاف والتحقق من المرشحين عبر مقارنة تشابه HTML، وبصمة شهادة SSL، وتحليل ترويسات HTTP.
تقوم Unwaf بأتمتة الخطوات التي شرحتها في منشور LinkedIn هذا: Passive WAF bypassing
الإصدار الحالي: 3.0.0 — راجع CHANGELOG.md لسجل الإصدارات.
curl.go install github.com/mmarting/unwaf@latest
unwaf -h
فحص نطاق (الطرق المجانية فقط، لا حاجة لمفاتيح API):
unwaf -d example.com
تعمل كل من النطاقات المجردة وعناوين URL الكاملة:
unwaf -d https://example.com/path
الفحص باستخدام ملف HTML محفوظ يدويًا (مفيد عندما يحجب WAF الأداة):
unwaf -d example.com -s original.html
خفض حد التشابه لالتقاط التطابقات الجزئية:
unwaf -d example.com -t 40
زيادة التزامن لفحص أسرع:
unwaf -d example.com -w 100
الوضع المطوّل لرؤية كل نطاق فرعي/IP يتم حله:
unwaf -d example.com -v
الوضع الصامت للأتمتة — يُخرج عناوين IP فقط، واحد في كل سطر:
unwaf -q -d example.com
إخراج JSON للأتمتة:
unwaf -d example.com --json
الوضع الدفعي مع قائمة النطاقات:
unwaf -l domains.txt --json -o results.json
استخدام وكيل (Tor، Burp، إلخ):
unwaf -d example.com --proxy socks5://127.0.0.1:9050
فحص جيران /24 لعناوين IP للتجاوز:
unwaf -d example.com --scan-neighbors
تحديد معدل الطلبات إلى 2/ثانية مع مهلة 5 ثوانٍ:
unwaf -d example.com --rate-limit 2 --timeout 5
# Feed into nuclei
unwaf -q -d target.com | nuclei -l - -t waf-bypass.yaml
# Feed into httpx
unwaf -q -d target.com | httpx -silent
# Batch recon
cat domains.txt | while read d; do unwaf -q -d "$d" | sed "s/^/$d,/"; done > results.csv
# JSON + jq
unwaf -d target.com --json | jq '.bypasses[].ip'
عند التشغيل الأول، تنشئ Unwaf ملف $HOME/.unwaf.conf بهذا القالب:
# Unwaf config file — API keys for optional discovery methods
# Free methods (SPF, MX, crt.sh, subdomains, OTX, RapidDNS, HackerTarget, Wayback) work without any keys.
# ViewDNS.info — DNS history (250 free requests, no credit card required)
viewdns=""
# SecurityTrails — DNS history (https://securitytrails.com/corp/api)
securitytrails=""
# Censys — SSL certificate search (requires a PAID license)
censys_token=""
censys_org_id=""
# AlienVault OTX — passive DNS (optional, raises rate limits)
otx_api_key=""
# Shodan — host search by SSL cert, hostname, favicon hash
shodan_api_key=""
# DNSDB/Farsight — historical DNS records (Community Edition: 500 queries/month free)
dnsdb_api_key=""
Martín Martín
موزّع تحت رخصة GPL v3.
| الطريقة | النوع | الوصف |
|---|
| سجلات SPF | مجاني | تستخرج عناوين IP من آليات SPF ip4:/ip6: |
| سجلات MX | مجاني | تحل أسماء مضيفي خادم البريد (تتخطى Google/Microsoft/إلخ) |
| فحص النطاقات الفرعية | مجاني | تحل أكثر من 30 نطاقًا فرعيًا شائعًا (mail، dev، staging، cpanel، origin، إلخ) |
| شفافية الشهادات | مجاني | تستعلم من crt.sh عن جميع النطاقات الفرعية، وتحل إلى عناوين IP غير تابعة لـ WAF |
| AlienVault OTX | مجاني | سجلات DNS السلبية (مفتاح API اختياري يرفع حدود المعدل) |
| RapidDNS | مجاني | تعداد النطاقات الفرعية عبر كشط HTML |
| HackerTarget | مجاني | واجهة برمجة البحث عن المضيفين (50 طلبًا/يوم) |
| Wayback Machine | مجاني | تستخرج أسماء المضيفين من عناوين URL المؤرشفة عبر CDX API |
| كشف WAF | مجاني | تأخذ بصمة مورّد WAF عبر ترويسات HTTP |
| تجزئة الأيقونة المفضلة | مجاني | تولّد تجزئات MD5 وSHA256 وMMH3 للبحث في Shodan/Censys |
| بحث مضيف Shodan | API (طبقة مجانية) | تبحث حسب CN لشهادة SSL واسم المضيف وتجزئة الأيقونة المفضلة (يتطلب البحث عضوية) |
| سجل SecurityTrails | API (طبقة مجانية) | سجلات DNS A التاريخية (50 طلبًا/شهر مجانًا) |
| سجل ViewDNS | API (طبقة مجانية) | سجلات DNS A التاريخية (250 طلبًا مجانيًا) |
| بحث Censys SSL | API (مدفوع) | يجد المضيفين الذين يقدمون شهادات SSL مطابقة للنطاق |
| DNSDB/Farsight | API (طبقة مجانية) | سجلات DNS التاريخية عبر NDJSON API (إصدار المجتمع: 500 استعلام/شهر) |
| الطريقة | الوزن | الوصف |
|---|
| تشابه HTML | 60% | مقارنة نصية قائمة على الفروقات مع الصفحة المرجعية |
| شهادة SSL | 25% | الرقم التسلسلي (50%)، تطابق CN (25%)، تداخل SAN (25%) |
| ترويسات HTTP | 15% | مقارنة Server وX-Powered-By واسم Set-Cookie |
| رمز الحالة | ±5-20% | مكافأة عند التطابق، عقوبة عند عدم تطابق النجاح/الخطأ |
| العلم | العلم الطويل | الوصف | الافتراضي |
|---|
-d | --domain | النطاق المراد فحصه | (مطلوب ما لم يُستخدم -l) |
-s | --source | ملف HTML المصدر للمقارنة | — |
-c | --config | مسار ملف الإعداد | $HOME/.unwaf.conf |
-t | --threshold | نسبة حد التشابه | 60 |
-w | --workers | عدد العمال المتزامنين | 50 |
-v | --verbose | تفعيل الإخراج المطوّل | false |
-q | --quiet | الوضع الصامت: إخراج عناوين IP للتجاوز فقط | false |
--timeout | مهلة HTTP بالثواني | 10 | |
--rate-limit | الحد الأقصى لطلبات HTTP في الثانية، 0=غير محدود | 0 | |
--proxy | عنوان URL للوكيل (http:// أو socks5://) | — | |
--scan-neighbors | فحص جيران /24 لعناوين IP المؤكدة للتجاوز | false | |
--json | إخراج النتائج بصيغة JSON | false | |
-l | --list | ملف يحتوي على النطاقات المراد فحصها، واحد في كل سطر | — |
-o | --output | كتابة النتائج إلى ملف | — |
--version | طباعة الإصدار والخروج | — | |
-h | --help | عرض معلومات المساعدة | — |