
برنامج لاختبار وظائف WAF
أداة تقييم جدران الحماية للمؤسسات — حمولات هجوم حقيقية. نتائج حقيقية. تقارير جاهزة للامتثال.
يقوم مُختبر WAF بتقييم جدران حماية تطبيقات الويب (WAF) عن طريق إرسال حمولات هجوم حقيقية إلى عنوان URL يوفره المستخدم والإبلاغ عما إذا تم حظرها. متوفر كتطبيق سطح مكتب ويندوز (Electron) وواجهة سطر أوامر بايثون (CLI) تعمل في أي مكان.

هذه الأداة مخصصة لاختبار الأمن المصرح به فقط. استخدمها فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها. قد يؤدي الاختبار غير المصرح به لأنظمة الطرف الثالث إلى انتهاك قانون الاحتيال وإساءة استخدام الكمبيوتر (CFAA) والقوانين المماثلة في منطقتك. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام.
| المجموعة | الاختبارات | ما تغطيه |
|---|---|---|
| الأساسي OWASP / CWE | 44 | حقن SQL (12 متغيرًا)، XSS (10 متغيرات)، تجاوز المسار، حقن الأوامر، XXE، SSRF، Log4Shell، SSTI، إعادة توجيه مفتوحة |
| تقييد المعدل | 3 | فيضان مفاجئ (30 متزامن)، فيضان تسلسلي، تجاوز تدوير IP عبر رأس X-Forwarded-For |
| كشف الروبوتات | 10 | sqlmap، Nikto، Nmap، Scrapy، Masscan، HeadlessChrome، python-requests، curl، وكيل مستخدم فارغ، رؤوس Accept مفقودة |
| محاولات الالتفاف | 15 | ترميز URL مزدوج، Unicode كامل العرض، وحدات بايت فارغة، تباين حالة الأحرف، إخفاء التعليقات، حقن CRLF، حقن رأس المضيف، تجاوز الطريقة، حيل المسار |
| أمن واجهة API | 10 | استعلام GraphQL (الاستبطان/الدفعة/التعداد)، خوارزمية JWT لا شيء والارتباك الخوارزمي، تعيين الكتلة، العبث بفعل HTTP، BOLA، ارتباك نوع المحتوى |
| منطق الأعمال | 8 | كمية سالبة، إرسال بسعر صفري، الوصول إلى نقاط نهاية المشرف، تلوث معامل HTTP، تعداد الحسابات، كشف البيانات المفرط، التصفح القسري، تصعيد الامتيازات |
كل اختبار مُوسم بإطار امتثال واحد أو أكثر:
HIGH (عالية)، LIKELY (محتملة)، أو UNCERTAIN (غير مؤكدة) بدلاً من نجاح/فشل ثنائيgit clone https://github.com/kpomin57/waf-tester.git
cd waf-tester
npm install
npm start
npm run build
يظهر الإخراج في المجلد dist/ كمثبت NSIS وملف .exe محمول. لا حاجة لمتطلبات أساسية على الجهاز الهدف — Electron يضم وقت التشغيل الخاص به.
نسخة بملف واحد تعمل في أي مكان يتوفر فيه بايثون — خوادم لينكس، خطوط CI/CD، حاويات Docker، WSL، أو أي بيئة حيث لا يمكن استخدام ملف .exe لويندوز.
pip install rich requests
python waf_tester.py --url https://target.example.com
يشغل جميع الاختبارات الـ90، ويطالب بتأكيد الإذن، ويطبع النتائج الملونة في الطرفية، ويحفظ تقرير JSON وتقرير HTML في الدليل الحالي.
# تشغيل جميع المجموعات
python waf_tester.py --url https://app.example.com
# تشغيل مجموعتي OWASP وAPI فقط
python waf_tester.py --url https://app.example.com --suites owasp,api
# مصادقة رمز الوصلة (Bearer)
python waf_tester.py --url https://app.example.com/api \
--auth-type bearer --auth-value eyJhbGciOiJIUzI1NiJ9...
# مصادقة مفتاح API
python waf_tester.py --url https://app.example.com/api \
--auth-type apikey --auth-header X-API-Key --auth-value mykey123
# حفظ التقارير في مجلد، وتخطي التأكيد (CI/CD)
python waf_tester.py --url https://app.example.com \
--output-dir ./reports --confirm
# إخراج طرفية فقط — لا حفظ للملفات
python waf_tester.py --url https://app.example.com --output terminal
# توجيه المرور عبر Burp Suite
python waf_tester.py --url https://app.example.com --proxy http://127.0.0.1:8080
docker run --rm -v $(pwd)/reports:/reports \
python:3.12-slim sh -c \
"pip install rich requests -q && python waf_tester.py \
--url https://target.example.com \
--output-dir /reports --confirm"
- name: WAF Evaluation
run: |
pip install rich requests
python waf_tester.py \
--url ${{ secrets.WAF_TARGET_URL }} \
--suites owasp,api,bypass \
--output json \
--output-dir ./reports \
--confirm
- name: Upload report
uses: actions/upload-artifact@v3
with:
name: waf-report
path: reports/
يمكن لواجهة سطر الأوامر بايثون توجيه جميع حركة الاختبار عبر Burp Suite، مما يمنحك سجل HTTP كامل لكل حمولة يرسلها مُختبر WAF. هذا مفيد للفحص اليدوي للطلبات والاستجابات، وضبط الحمولات بدقة، واستكشاف سلوك WAF غير المتوقع، واستخدام ماسح Burp أو أداة Repeater على النتائج المثيرة للاهتمام.
يدير Burp Suite مستمع وكيل محلي (الافتراضي 127.0.0.1:8080). عندما توجه متغيرات بيئة الوكيل الخاصة بمُختبر WAF إلى هذا العنوان، يمر كل طلب يرسله الأداة عبر Burp قبل الوصول إلى الهدف. ترى كل حمولة في سجل HTTP الخاص بـ Burp مع الطلب والاستجابة بالكامل — رمز الحالة، الرؤوس، الجسم — تمامًا كما رآها WAF.
1. ابدأ Burp Suite وتأكد من أن مستمع الوكيل نشط:
افتح Burp → Proxy → Proxy Settings → تأكد من أن المستمع على 127.0.0.1:8080 (أو لاحظ منفذك إذا كان مختلفًا).
2. قم بتصدير شهادة CA الخاصة بـ Burp وتثبيتها (إعداد لمرة واحدة):
يتصل مُختبر WAF بأهداف HTTPS، لذا يحتاج Burp إلى اعتراض TLS. اذهب إلى Burp → Proxy → Proxy Settings → Import/Export CA Certificate → Export as DER. قم بتثبيتها كمرجع جذر موثوق به على نظامك، أو قم بتعيين متغير البيئة أدناه لتجاوز التحقق (مناسب للاستخدام المخبري، وليس الإنتاج).
3. شغّل مُختبر WAF مع --proxy:
python waf_tester.py --url https://target.example.com --proxy http://127.0.0.1:8080
على ويندوز:
python waf_tester.py --url https://target.example.com --proxy http://127.0.0.1:8080
يمكنك أيضًا استخدام متغيرات البيئة إذا فضلت:
HTTPS_PROXY=http://127.0.0.1:8080 HTTP_PROXY=http://127.0.0.1:8080 \
python waf_tester.py --url https://target.example.com
4. أوقف الاعتراض في Burp:
في Burp → Proxy → Intercept، تأكد من أن الاعتراض متوقف — وإلا سيتوقف Burp عند كل طلب بانتظار منك تمريره يدويًا، وسيؤدي ذلك إلى انتهاء المهلة لمُختبر WAF. تريد أن يسجل Burp حركة المرور بشكل سلبي، وليس اعتراضها.
5. شاهد الطلبات تصل إلى سجل HTTP الخاص بـ Burp:
تظهر كل حمولة من حمولات مُختبر WAF كإدخال منفصل. يمكنك النقر بزر الماوس الأيمن على أي طلب وإرساله إلى Repeater لتعديله يدويًا وإعادة إرساله، أو إلى Intruder لمزيد من الفجش.
إذا لم تكن شهادة CA الخاصة بـ Burp موثوقة، أضف حلاً مؤقتًا --no-verify عن طريق تعطيل التحقق من SSL في الأداة. بدلاً من ذلك، ثبّت شهادة CA الخاصة بـ Burp على مستوى النظام بالكامل أو استخدم هدف HTTP (وليس HTTPS) للاختبار الأولي.
مستويات الثقة:
HIGH (عالية) — حالة حظر صلبة (403، 406، 429) دون غموضLIKELY (محتملة) — كلمات مفتاحية WAF في نص الاستجابة، أو أن الحالة تختلف عن الأساسUNCERTAIN (غير مؤكدة) — حظر ناعم (400, 503) قد يكون خطأ تطبيق مشروع# Juice Shop (بدون WAF — توقع تجاوز الكل)
docker run -d -p 3000:3000 bkimminich/juice-shop
# ModSecurity مع OWASP CRS (توقع حظره غالبًا)
docker run -d -p 80:80 owasp/modsecurity-crs:nginx
waf-tester/
├── src/
│ ├── main.js # Electron main process — all test logic & IPC
│ ├── preload.js # Secure context bridge
│ └── renderer/
│ ├── index.html # App shell
│ ├── styles.css # Dark military/SOC UI theme
│ └── app.js # UI logic, filters, live feed, export
├── waf_tester.py # Python CLI — single file, no config needed
├── package.json
└── README.md
waf_tester.py) — ملف واحد، يعمل في أي مكانMIT — راجع LICENSE للحصول على التفاصيل.
صُممت لمهندسي الأمن الذين يحتاجون إلى تحقق من WAF يتجاوز الامتثال على الورق.
| العلم | الوصف | الافتراضي |
|---|
--url | عنوان URL الهدف (مطلوب) | — |
--suites | المجموعات المراد تشغيلها مفصولة بفاصلة | all |
--auth-type | none / bearer / apikey / cookie / basic | none |
--auth-value | الرمز، سلسلة ملف تعريف الارتباط، أو قيمة مفتاح API | — |
--auth-header | اسم الرأس لمصادقة مفتاح API | X-API-Key |
--auth-user | اسم المستخدم للمصادقة الأساسية | — |
--auth-pass | كلمة المرور للمصادقة الأساسية | — |
--no-baseline | تعطيل مقارنة الأساس | off |
--no-rotate-ua | تعطيل تدوير وكيل المستخدم | off |
--waf-header | إرسال رأس تعريف X-WAF-Tester | off |
--output | terminal، json، html (مفصولة بفاصلة) | all three |
--output-dir | الدليل لحفظ ملفات التقارير | . |
--timeout | مهلة كل طلب بالثواني | 10 |
--proxy | عنوان URL للوكيل لجميع الطلبات (مثل http://127.0.0.1:8080) | off |
--confirm | تخطي طلب تأكيد الإذن | off |
| النتيجة | التقدير | المعنى |
|---|
| 90–100% | A | ممتاز — WAF يحظر تقريبًا جميع نواقل الهجوم |
| 80–89% | B | جيد — فجوات بسيطة تستحق التحقيق |
| 65–79% | C | مقبول — توجد ناقلات التفاف ملحوظة |
| 50–64% | D | ضعيف — فجوات حماية كبيرة |
| < 50% | F | حرج — WAF غير فعال إلى حد كبير |