
أداة اختبار أمان WAF آلية تكتشف الإيجابيات الكاذبة والسلبيات الكاذبة باستخدام أكثر من 15 فئة من الحمولات بما في ذلك SQLi و XSS و RCE وحقن GraphQL. تدعم Docker وإخراج JSON والحمولات المخصصة.
أداة تجاوز WAF هي أداة مفتوحة المصدر لتحليل أمان أي جدار حماية من حيث الإيجابيات الخاطئة والسلبيات الخاطئة باستخدام حمولات محددة مسبقًا وقابلة للتخصيص. اختبر جدار الحماية الخاص بك قبل أن يقوم المهاجم بذلك. تم تطوير أداة تجاوز WAF بواسطة فريق Nemesida WAF بمشاركة المجتمع.

يحظر استخدام هذه الأداة لأغراض غير قانونية. لا تخالف القانون. نحن لسنا مسؤولين عن أي مخاطر محتملة مرتبطة باستخدام هذا البرنامج.
أحدث إصدار من waf-bypass متاح دائمًا عبر Docker Hub. يمكن سحبه بسهولة باستخدام الأمر التالي:
# docker pull nemesida/waf-bypass # docker run nemesida/waf-bypass --host='example.com'
# pipx install git+https://github.com/nemesida-waf/waf-bypass.git # <pipx bin dir>/waf-bypass
# git clone https://github.com/nemesida-waf/waf_bypass.git /opt/waf-bypass/ # python3 -m pip install -r /opt/waf-bypass/requirements.txt # python3 /opt/waf-bypass/main.py --host='example.com'
'--proxy' (--proxy='http://proxy.example.com:3128') - يسمح هذا الخيار بتحديد مكان الاتصال بدلاً من المضيف.
'--header' (--header 'Authorization: Basic YWRtaW46YWRtaW4=' --header 'X-TOKEN: ABCDEF') - يسمح هذا الخيار بتحديد رأس HTTP لإرساله مع جميع الطلبات (مثل المصادقة). يُسمح بالاستخدام المتعدد.
'--user-agent' (--user-agent 'MyUserAgent 1/1') - يسمح هذا الخيار بتحديد وكيل مستخدم HTTP لإرساله مع جميع الطلبات، باستثناء عندما يتم تعيين وكيل المستخدم بواسطة الحمولة ("USER-AGENT").
'--block-code' (--block-code='403' --block-code='222') - يسمح هذا الخيار بتحديد رمز حالة HTTP المتوقع عند حظر WAF (الافتراضي هو 403). يُسمح بالاستخدام المتعدد.
مثال على مواصفات إخراج JSON:
{
"TARGET": "https://example.com", // defined by --host option
"PROXY": {}, // defined by --proxy option
"HEADERS": { // defined by --header option
"User-Agent": ""
},
"BLOCK-CODE": [ // defined by --block-code option
...
],
"THREADS": 50, // defined by --threads option
"TIMEOUT": 30, // defined by --timeout option
"EXCLUDE-DIR": [ // defined by --exclude-dir option
...
],
"FAILED": { // requests with failed processing status
"MFD/7.json": {
"BODY": "WBHTTPSConnectionPool(host='example.com', port=443): Read timed out. (read timeout=1)"
},
...
},
"PASSED": { // passed requests
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
},
"FALSED": { // requests with false positive processing status
...
},
"BYPASSED": { // requests with false negative processing status
"UWA/26.json": {
"URL": "200 RESPONSE CODE"
},
...
},
"TestRequest": { // test requests with processing status, exclude passed
"FAILED": {},
"FALSED": {
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
}
},
"CURL": { // cURL command to reproduce false positive and false negative requests
"FALSED": {},
"BYPASSED": {
"UWA/26.json": {
"URL": "curl -X GET -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' 'https://example.com/do.php#.png'"
},
...
}
}
}
اعتمادًا على الغرض، توجد الحمولات في المجلدات المناسبة:
عند تجميع حمولة، يتم استخدام المناطق التالية والطريقة والخيارات:
Base64، HTML-ENTITY، UTF-16) بالإضافة إلى ترميز الحمولة. يتم الإشارة إلى القيم المتعددة بمسافة (مثل Base64 UTF-16). ينطبق فقط على مناطق ARGS وBODY وCOOKIE وHEADER. لا ينطبق على الحمولات في مجلدات API و MFD. غير متوافق مع خيار JSON.باستثناء بعض الحالات الموضحة أدناه، فإن المناطق مستقلة عن بعضها ويتم اختبارها بشكل منفصل (أي إذا تم تحديد منطقتين - سيرسل البرنامج النصي طلبين - يتحقق بالتناوب من المنطقة الأولى والثانية).
بالنسبة للمناطق، يمكنك استخدام اللاحقة %RND%، والتي تسمح بتوليد سلسلة عشوائية من 6 أحرف وأرقام. (مثل: param%RND=my_payload أو param=%RND% أو A%RND%B)
يمكنك إنشاء حمولاتك الخاصة، للقيام بذلك، أنشئ مجلدك الخاص داخل المجلد '/payload/'، أو ضع الحمولة في مجلد موجود (مثل: '/payload/XSS'). تنسيق البيانات المسموح به هو JSON.
يتم إضافة رأس 'Content-Type: application/json' تلقائيًا إلى حمولات اختبار API الموجودة في هذا المجلد.
بالنسبة لحمولات MFD (multipart/form-data) الموجودة في هذا المجلد، يجب عليك تحديد BODY (إجباري) وBOUNDARY (اختياري). إذا لم يتم تعيين BOUNDARY، فسيتم إنشاؤه تلقائيًا (في هذه الحالة، يجب تحديد الحمولة فقط لـBODY، بدون بيانات إضافية ('... Content-Disposition: form-data; ...')).
إذا تم تحديد BOUNDARY، فيجب تنسيق محتوى BODY وفقًا لـ RFC، ولكن هذا يسمح بوجود حمولات متعددة في BODY مفصولة بـ BOUNDARY.
يُسمح بمناطق أخرى في هذا المجلد (مثل: URL، ARGS إلخ). بغض النظر عن المنطقة، سيتم إضافة رأس 'Content-Type: multipart/form-data; boundary=...' إلى جميع الطلبات.
'--threads' (--threads=15) - يسمح هذا الخيار بتحديد عدد سلاسل المسح المتوازية (الافتراضي هو 10).
'--timeout' (--timeout=10) - يسمح هذا الخيار بتحديد مهلة معالجة الطلب بالثواني (الافتراضي هو 30).
'--exclude-dir' - استبعاد دليل الحمولات (--exclude-dir='SQLi,XSS').
'--json-format' - خيار يسمح بعرض نتيجة العمل بتنسيق JSON (مفيد لدمج الأداة مع منصات الأمان). إذا لم يتم تحديد الخيار، سيكون الإخراج بتنسيق جدول (التنسيق الافتراضي).
'--details' - عرض حمولات الإيجابيات الخاطئة والسلبيات الخاطئة. غير متوافق مع خيار --json-format.
'--no-progress' - لا تعرض شريط التقدم.
'--curl-replay' - عرض أمر cURL لإعادة إنتاج الطلبات ذات الإيجابية الخاطئة أو السلبية الخاطئة أو الفاشلة. غير متوافق مع خيار --json-format.