Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
gotestwaf — مشروع مفتوح المصدر بلغة Golang لتقييم أدوات أمان واجهات برمجة التطبيقات (API Security) وجدران الحماية (WAF) من حيث منطق الكشف والتجاوزات. | Kitploit
أدوات/GitHubGitHub/wallarm/gotestwaf
ماسحات الثغرات الأمنيةماسحات الثغرات الأمنية للويباختبار أمان APIتجاوز WAFأمن الويباختبار الاختراقأمن واجهات برمجة التطبيقاتالأفضل في أمن واجهات برمجة التطبيقات #11الأفضل في اختبار أمان API #11الأفضل في تجاوز WAF #3
1.8k26024منذ سنة واحدةتمت المراجعة من قبل Kitploit
GitHubwallarm/gotestwaf

gotestwaf

مشروع مفتوح المصدر بلغة Golang لتقييم أدوات أمان واجهات برمجة التطبيقات (API Security) وجدران الحماية (WAF) من حيث منطق الكشف والتجاوزات.

عرض المستودعالموقع الإلكتروني

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

GoTestWAF Black Hat Arsenal USA 2022

GoTestWAF هي أداة لمحاكاة هجمات API وOWASP تدعم مجموعة واسعة من بروتوكولات API بما في ذلك REST وGraphQL وgRPC وSOAP وXMLRPC وغيرها.

تم تصميمها لتقييم حلول أمن تطبيقات الويب، مثل وكلاء أمان API، وجدران الحماية لتطبيقات الويب (WAF)، وأنظمة منع الاختراق (IPS)، وبوابات API، وغيرها.


  • كيف تعمل
  • المتطلبات
  • البدء السريع مع Docker
  • فحص نتائج التقييم
  • العروض التوضيحية
  • خيارات أخرى لتشغيل GoTestWAF
  • خيارات التهيئة
  • التشغيل مع مجموعة اختبار الانحدار لـ OWASP Core Rule Set

كيف تعمل

يقوم GoTestWAF بإنشاء طلبات ضارة باستخدام حمولات مشفرة موضوعة في أجزاء مختلفة من طلبات HTTP: جسمها، رؤوسها، معلمات URL، إلخ. يتم إرسال الطلبات المُنشأة إلى عنوان URL الخاص بحل أمن التطبيق المحدد عند تشغيل GoTestWAF. يتم تسجيل نتائج تقييم الحل الأمني في ملف التقرير الذي يتم إنشاؤه على جهازك.

الشروط الافتراضية لإنشاء الطلبات محددة في مجلد في ملفات YAML بالتنسيق التالي:```yaml payload:

testcases
  • '"union select -7431.1, name, @aaa from u_base--w-'
  • "'or 123.22=123.22"
  • "' waitfor delay '00:00:10'--"
  • "')) or pg_sleep(5)--" encoder:
  • Base64Flat
  • URL placeholder:
  • UrlPath
  • UrlParam
  • JSUnicode
  • Header type: SQL Injection
root@kitploit:~
* `payload` هي عينة هجوم خبيثة (مثل حمولة XSS مثل ```<script>alert(111)</script>``` أو شيء أكثر تعقيدًا).
بما أن تنسيق سلسلة YAML مطلوب للحمولات، يجب [ترميزها كبيانات ثنائية](https://yaml.org/type/binary.html).

* `encoder` هو مشفر يتم تطبيقه على الحمولة قبل وضعها في طلب HTTP. المشفرات الممكنة هي:

    * Base64
    * Base64Flat
    * JSUnicode
    * URL
    * Plain (للاحتفاظ بسلسلة الحمولة كما هي)
    * XML Entity

* `placeholder` هو مكان داخل طلب HTTP حيث يجب وضع الحمولة المشفرة. الأماكن الممكنة هي:

    * gRPC
    * Header
    * UserAgent
    * RequestBody
    * JSONRequest
    * JSONBody
    * HTMLForm
    * HTMLMultipartForm
    * SOAPBody
    * XMLBody
    * URLParam
    * URLPath
    * RawRequest

    سيتيح لك العنصر النائب `RawRequest` إجراء طلب HTTP تعسفي. يتم استبدال الحمولة عن طريق استبدال السلسلة `{{payload}}` في مسار URL أو الرؤوس أو الجسم. حقول العنصر النائب `RawRequest`:

    * `method`
    * `path`
    * `headers`
    * `body`

    الحقول المطلوبة للعنصر النائب `RawRequest`:
    
    * حقل `method`

    مثال:
    
    ```yaml
    payload:
      - test
    encoder:
      - Plain
    placeholder:
      - RawRequest:
          method: "POST"
          path: "/"
          headers:
            Content-Type: "multipart/form-data; boundary=boundary"
          body: |
            --boundary
            Content-disposition: form-data; name="field1"
            
            Test
            --boundary
            Content-disposition: form-data; name="field2"
            Content-Type: text/plain; charset=utf-7
            
            Knock knock.
            {{payload}}
            --boundary--
    type: RawRequest test
    ```

* `type` هو اسم المجموعة الكاملة للحمولات في الملف. يمكن أن يكون عشوائيًا، ولكن يجب أن يعكس نوع الهجمات في الملف.

توليد الطلب هو عملية من ثلاث خطوات تتضمن ضرب عدد الحمولات في عدد المشفرات وعدد العناصر النائبة.
لنفترض أنك عرّفت **2 حمولات** و **3 مشفرات** (Base64 و JSUnicode و URL) و **عنصر نائب واحد** (URLParameter - معامل HTTP GET).
في هذه الحالة، سيرسل GoTestWAF 2x3x1 = 6 طلبات في حالة اختبار واحدة.

أثناء تشغيل GoTestWAF، يمكنك أيضًا اختيار حالات الاختبار بين حالتين مدمجتين: OWASP Top-10 و OWASP-API،
أو حالاتك الخاصة (باستخدام [خيار التهيئة](#configuration-options) `testCasePath`).

## المتطلبات

* يدعم GoTestWAF جميع أنظمة التشغيل الشائعة (Linux، Windows، macOS)، ويمكن بناؤه أصليًا
إذا كان [Go](https://golang.org/doc/install) مثبتًا على النظام. إذا كنت تريد تشغيل GoTestWAF أصليًا،
تأكد من أن لديك متصفح Chrome لتتمكن من إنشاء تقارير PDF. إذا لم يكن لديك Chrome،
يمكنك إنشاء تقرير بتنسيق HTML.
* إذا كنت تشغل GoTestWAF كحاوية Docker، فيرجى التأكد من [تثبيت Docker وتهيئته](https://docs.docker.com/get-docker/)،
وأن GoTestWAF وحل أمان التطبيق المُقيَّم متصلان بنفس [شبكة Docker](https://docs.docker.com/network/).
* لبدء تشغيل GoTestWAF بنجاح، يرجى التأكد من أن عنوان IP للجهاز الذي يشغل GoTestWAF مدرج في القائمة البيضاء
على الجهاز الذي يشغل حل أمان التطبيق.

## البدء السريع مع Docker

الخطوات أدناه توضح كيفية تنزيل وبدء تشغيل GoTestWAF بأقل تكوين على Docker.

1.  اسحب [صورة GoTestWAF](https://hub.docker.com/r/wallarm/gotestwaf) من Docker Hub:

    ```
    docker pull wallarm/gotestwaf
    ```

2.  ابدأ تشغيل صورة GoTestWAF:

    ```sh
    docker run --rm --network="host" -it -v ${PWD}/reports:/app/reports \
        wallarm/gotestwaf --url=<EVALUATED_SECURITY_SOLUTION_URL>
    ```

    إذا لزم الأمر، يمكنك استبدال `${PWD}/reports` بمسار مجلد آخر يُستخدم لوضع تقرير التقييم.

    إذا كنت لا تريد إرسال التقرير عبر البريد الإلكتروني اختياريًا، فقط اضغط على Enter بعد ظهور رسالة طلب البريد الإلكتروني، أو يمكنك استخدام --noEmailReport لتخطي الرسالة:

    ```sh
    docker run --rm --network="host" -v ${PWD}/reports:/app/reports \
        wallarm/gotestwaf --url=<EVALUATED_SECURITY_SOLUTION_URL> --noEmailReport
    ```

    إذا كانت أداة الأمان المُقيَّمة متاحة خارجيًا، يمكنك تخطي الخيار `--network="host"`. هذا الخيار يتيح التفاعل بين حاويات Docker التي تعمل على 127.0.0.1.

    لإجراء اختبارات gRPC، يجب أن يكون لديك نقطة نهاية عاملة واستخدام خيار سطر الأوامر --grpcPort <port>.

    ```sh
    docker run --rm --network="host" -it -v ${PWD}/reports:/app/reports \
        wallarm/gotestwaf --grpcPort 9000 --url=http://my.grpc.endpoint
    ```

3.  تحقق من بريدك الإلكتروني للحصول على التقرير.

لقد قمت بتقييم حل أمان التطبيق الخاص بك بنجاح باستخدام GoTestWAF بأقل تكوين.
للتعرف على خيارات التهيئة المتقدمة، يرجى استخدام هذا [الرابط](#configuration-options).

## التحقق من نتائج التقييم

تحقق من نتائج التقييم المسجلة باستخدام خدمتي `STDOUT` و `STDERR`. على سبيل المثال:```
INFO[0000] GoTestWAF started                             version=v0.5.6-7-g48e6959
INFO[0000] Test cases loading started                   
INFO[0000] Test cases loading finished                  
INFO[0000] Test cases fingerprint                        fp=c6d14d6138601d19d215bb97806bcda3
INFO[0000] Try to identify WAF solution                 
INFO[0000] WAF was not identified                       
INFO[0000] gohttp is used as an HTTP client to make requests  http_client=gohttp
INFO[0000] WAF pre-check                                 url="http://host.docker.internal:8080"
INFO[0000] WAF pre-check                                 blocked=true code=403 status=done
INFO[0000] gRPC pre-check                                status=started
INFO[0000] gRPC pre-check                                connection="not available" status=done
INFO[0000] GraphQL pre-check                             status=started
INFO[0000] GraphQL pre-check                             connection="not available" status=done
INFO[0000] Scanning started                              url="http://host.docker.internal:8080"
INFO[0005] Scanning finished                             duration=5.422700876s                                                                            
True-Positive Tests:
┌────────────┬───────────────────────────┬──────────────────────┬─────────────────────┬──────────────────────┬────────────────────┬─────────────┬─────────────────┐
│  TEST SET  │         TEST CASE         │    PERCENTAGE , %    │       BLOCKED       │       BYPASSED       │     UNRESOLVED     │    SENT     │     FAILED      │
├────────────┼───────────────────────────┼──────────────────────┼─────────────────────┼──────────────────────┼────────────────────┼─────────────┼─────────────────┤
│ community  │ community-128kb-rce       │ 0.00                 │ 0                   │ 0                    │ 1                  │ 1           │ 0               │
│ community  │ community-128kb-sqli      │ 0.00                 │ 0                   │ 0                    │ 1                  │ 1           │ 0               │
│ community  │ community-128kb-xss       │ 0.00                 │ 0                   │ 0                    │ 1                  │ 1           │ 0               │
│ community  │ community-16kb-rce        │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-16kb-sqli       │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-16kb-xss        │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-32kb-rce        │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-32kb-sqli       │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-32kb-xss        │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-64kb-rce        │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-64kb-sqli       │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-64kb-xss        │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-8kb-rce         │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-8kb-sqli        │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-8kb-xss         │ 100.00               │ 1                   │ 0                    │ 0                  │ 1           │ 0               │
│ community  │ community-lfi             │ 100.00               │ 8                   │ 0                    │ 0                  │ 8           │ 0               │
│ community  │ community-lfi-multipart   │ 0.00                 │ 0                   │ 0                    │ 2                  │ 2           │ 0               │
│ community  │ community-rce             │ 50.00                │ 2                   │ 2                    │ 0                  │ 4           │ 0               │
│ community  │ community-rce-rawrequests │ 100.00               │ 3                   │ 0                    │ 0                  │ 3           │ 0               │
│ community  │ community-sqli            │ 100.00               │ 12                  │ 0                    │ 0                  │ 12          │ 0               │
│ community  │ community-user-agent      │ 66.67                │ 6                   │ 3                    │ 0                  │ 9           │ 0               │
│ community  │ community-xss             │ 88.46                │ 92                  │ 12                   │ 0                  │ 104         │ 0               │
│ community  │ community-xxe             │ 0.00                 │ 0                   │ 1                    │ 1                  │ 2           │ 0               │
│ owasp      │ crlf                      │ 85.71                │ 6                   │ 1                    │ 0                  │ 7           │ 0               │
│ owasp      │ ldap-injection            │ 8.33                 │ 2                   │ 22                   │ 0                  │ 24          │ 0               │
│ owasp      │ mail-injection            │ 12.50                │ 3                   │ 21                   │ 0                  │ 24          │ 0               │
│ owasp      │ nosql-injection           │ 24.00                │ 12                  │ 38                   │ 0                  │ 50          │ 0               │
│ owasp      │ path-traversal            │ 30.00                │ 6                   │ 14                   │ 0                  │ 20          │ 0               │
│ owasp      │ rce                       │ 33.33                │ 2                   │ 4                    │ 0                  │ 6           │ 0               │
│ owasp      │ rce-urlparam              │ 33.33                │ 3                   │ 6                    │ 0                  │ 9           │ 0               │
│ owasp      │ rce-urlpath               │ 0.00                 │ 0                   │ 3                    │ 0                  │ 3           │ 0               │
│ owasp      │ shell-injection           │ 18.75                │ 6                   │ 26                   │ 0                  │ 32          │ 0               │
│ owasp      │ sql-injection             │ 29.17                │ 14                  │ 34                   │ 0                  │ 48          │ 0               │
│ owasp      │ ss-include                │ 50.00                │ 12                  │ 12                   │ 0                  │ 24          │ 0               │
│ owasp      │ sst-injection             │ 29.17                │ 7                   │ 17                   │ 0                  │ 24          │ 0               │
│ owasp      │ xml-injection             │ 0.00                 │ 0                   │ 7                    │ 0                  │ 7           │ 0               │
│ owasp      │ xss-scripting             │ 39.91                │ 89                  │ 134                  │ 1                  │ 224         │ 0               │
│ owasp-api  │ graphql                   │ 0.00                 │ 0                   │ 0                    │ 0                  │ 0           │ 0               │
│ owasp-api  │ graphql-post              │ 0.00                 │ 0                   │ 0                    │ 0                  │ 0           │ 0               │
│ owasp-api  │ grpc                      │ 0.00                 │ 0                   │ 0                    │ 0                  │ 0           │ 0               │
│ owasp-api  │ non-crud                  │ 100.00               │ 2                   │ 0                    │ 0                  │ 2           │ 0               │
│ owasp-api  │ rest                      │ 42.86                │ 3                   │ 4                    │ 0                  │ 7           │ 0               │
│ owasp-api  │ soap                      │ 20.00                │ 1                   │ 4                    │ 0                  │ 5           │ 0               │
├────────────┼───────────────────────────┼──────────────────────┼─────────────────────┼──────────────────────┼────────────────────┼─────────────┼─────────────────┤
│      Date: │             Project Name: │ True-Positive Score: │ Blocked (Resolved): │ Bypassed (Resolved): │ Unresolved (Sent): │ Total Sent: │ Failed (Total): │
│ 2025-07-14 │                   generic │               45.36% │    303/668 (45.36%) │     365/668 (54.64%) │      7/675 (1.04%) │         675 │   0/675 (0.00%) │
└────────────┴───────────────────────────┴──────────────────────┴─────────────────────┴──────────────────────┴────────────────────┴─────────────┴─────────────────┘

True-Negative Tests:
┌────────────┬───────────────┬──────────────────────┬─────────────────────┬──────────────────────┬────────────────────┬─────────────┬─────────────────┐
│  TEST SET  │   TEST CASE   │    PERCENTAGE , %    │       BLOCKED       │       BYPASSED       │     UNRESOLVED     │    SENT     │     FAILED      │
├────────────┼───────────────┼──────────────────────┼─────────────────────┼──────────────────────┼────────────────────┼─────────────┼─────────────────┤
│ false-pos  │ texts         │ 90.78                │ 13                  │ 128                  │ 0                  │ 141         │ 0               │
├────────────┼───────────────┼──────────────────────┼─────────────────────┼──────────────────────┼────────────────────┼─────────────┼─────────────────┤
│      Date: │ Project Name: │ True-Negative Score: │ Blocked (Resolved): │ Bypassed (Resolved): │ Unresolved (Sent): │ Total Sent: │ Failed (Total): │
│ 2025-07-14 │       generic │               90.78% │      13/141 (9.22%) │     128/141 (90.78%) │      0/141 (0.00%) │         141 │   0/141 (0.00%) │
└────────────┴───────────────┴──────────────────────┴─────────────────────┴──────────────────────┴────────────────────┴─────────────┴─────────────────┘

Summary:
┌──────────────────────┬───────────────────────────────┬──────────────────────────────┬─────────┐
│         TYPE         │ TRUE - POSITIVE TESTS BLOCKED │ TRUE - NEGATIVE TESTS PASSED │ AVERAGE │
├──────────────────────┼───────────────────────────────┼──────────────────────────────┼─────────┤
│ API Security         │ 42.86%                        │ n/a                          │ 42.86%  │
│ Application Security │ 45.41%                        │ 90.78%                       │ 68.10%  │
├──────────────────────┼───────────────────────────────┼──────────────────────────────┼─────────┤
│                      │                               │                        Score │  55.48% │
└──────────────────────┴───────────────────────────────┴──────────────────────────────┴─────────┘

ملف التقرير waf-evaluation-report-<date>.pdf متاح في مجلد reports داخل دليل المستخدم. يمكنك أيضًا تحديد الدليل لحفظ التقارير باستخدام الوسيط reportPath واسم ملف التقرير باستخدام الوسيط reportName. لمعرفة خيارات التكوين المتقدمة، يُرجى استخدام هذا الرابط.

يمكنك العثور على مثال لتقرير PDF هنا.

مثال على تقرير GoTestWaf

عروض توضيحية

يمكنك تجربة GoTestWAF عن طريق تشغيل البيئة التجريبية التي تنشر ModSecurity القائم على NGINX باستخدام OWASP Core Rule Set ويقوم GoTestWAF بتقييم ModSecurity على Docker.

لتشغيل البيئة التجريبية:

  1. استنساخ هذا المستودع والانتقال إلى الدليل المستنسخ:

    root@kitploit:~
    git clone https://github.com/wallarm/gotestwaf.git
    cd gotestwaf
    
  2. ابدأ تشغيل ModSecurity من صورة Docker باستخدام أمر make التالي:

    root@kitploit:~
    make modsec
    

    يتم تعريف إعدادات تشغيل حاوية ModSecurity Docker في القاعدة modsec داخل ملف Makefile المستنسخ. يقوم بتشغيل حاوية ModSecurity Docker على المنفذ 8080 مع الحد الأدنى من التكوين المحدد في الملف المستنسخ ./resources/default.conf.template وقيمة PARANOIA مضبوطة على 1.

    إذا لزم الأمر، يمكنك تغيير هذه الإعدادات عن طريق تحرير القاعدة modsec في ملف Makefile المستنسخ. الخيارات المتاحة لتكوين ModSecurity موصوفة في Docker Hub.

    لإيقاف حاويات ModSecurity، استخدم الأمر التالي:

    root@kitploit:~
    make modsec_down
    
  3. ابدأ تشغيل GoTestWAF بأقل تكوين باستخدام إحدى الطرق التالية:

    ابدأ تشغيل صورة Docker باستخدام الأمرين docker pull و docker run التاليين:

    root@kitploit:~
    docker pull wallarm/gotestwaf
    docker run --rm --network="host" -v ${PWD}/reports:/app/reports \
        wallarm/gotestwaf --url=http://127.0.0.1:8080 --noEmailReport
    

    قم ببناء صورة Docker لـ GoTestWAF من Dockerfile وقم بتشغيل الصورة باستخدام أوامر make التالية (تأكد من أن ModSec يعمل على المنفذ 8080؛ إذا لم يكن كذلك، قم بتحديث قيمة المنفذ في Makefile):

    root@kitploit:~
    make gotestwaf
    make scan_local_from_docker
    

    ابدأ تشغيل GoTestWAF محليًا باستخدام go مع أمر make التالي: (تأكد من أن ModSec يعمل على المنفذ 8080؛ إذا لم يكن كذلك، قم بتحديث قيمة المنفذ في Makefile):

    root@kitploit:~
    make scan_local
    
  4. ابحث عن ملف التقرير waf-evaluation-report-<date>.pdf في مجلد reports الذي قمت بربطه بـ /app/reports داخل الحاوية.

خيارات أخرى لتشغيل GoTestWAF

بالإضافة إلى تشغيل صورة GoTestWAF Docker التي تم تنزيلها من Docker Hub، يمكنك تشغيل GoTestWAF باستخدام الخيارات التالية:

  • استنساخ هذا المستودع وبناء صورة Docker لـ GoTestWAF من Dockerfile، على سبيل المثال:

    root@kitploit:~
    git clone https://github.com/wallarm/gotestwaf.git
    cd gotestwaf
    DOCKER_BUILDKIT=1 docker build --force-rm -t gotestwaf .
    docker run --rm --network="host" -it -v ${PWD}/reports:/app/reports \
        gotestwaf --url=<EVALUATED_SECURITY_SOLUTION_URL>
    

    إذا كانت أداة الأمان التي يتم تقييمها متاحة خارجيًا، يمكنك تخطي الخيار --network="host". هذا الخيار يتيح التفاعل بين حاويات Docker التي تعمل على 127.0.0.1.

  • استنساخ هذا المستودع وتشغيل GoTestWAF باستخدام go، على سبيل المثال:

    root@kitploit:~
    git clone https://github.com/wallarm/gotestwaf.git
    cd gotestwaf
    go run ./cmd --url=<EVALUATED_SECURITY_SOLUTION_URL>
    
  • استنساخ هذا المستودع وبناء GoTestWAF كوحدة Go:

    root@kitploit:~
    git clone https://github.com/wallarm/gotestwaf.git
    cd gotestwaf
    go build -mod vendor -o gotestwaf ./cmd
    

يتم شرح خيارات تكوين GoTestWAF المدعومة أدناه.

خيارات التكوين```

Usage: ./gotestwaf [OPTIONS] --url

Options: --addDebugHeader Add header "X-GoTestWAF-Test" with a hash of the test information in each request --addHeader string An HTTP header to add to requests --blockConnReset If present, connection resets will be considered as block --blockRegex string Regex to detect a blocking page with the same HTTP response status code as a not blocked request --blockStatusCodes ints HTTP status code that WAF uses while blocking requests (default [403]) --configPath string Path to the config file (default "config.yaml") --email string E-mail to which the report will be sent --followCookies If present, use cookies sent by the server. May work only with --maxIdleConns=1 (gohttp only) --graphqlURL string GraphQL URL to check --grpcPort uint16 gRPC port to check --hideArgsInReport If present, GoTestWAF CLI arguments will not be displayed in the report --httpClient string Which HTTP client use to send requests: chrome, gohttp (default "gohttp") --idleConnTimeout int The maximum amount of time a keep-alive connection will live (gohttp only) (default 2) --ignoreUnresolved If present, unresolved test cases will be considered as bypassed (affect score and results) --includePayloads If present, payloads will be included in HTML/PDF report --logFormat string Set logging format: text, json (default "text") --logLevel string Logging level: panic, fatal, error, warn, info, debug, trace (default "info") --maxIdleConns int The maximum number of keep-alive connections (gohttp only) (default 2) --maxRedirects int The maximum number of handling redirects (gohttp only) (default 50) --noEmailReport Save report locally --nonBlockedAsPassed If present, count requests that weren't blocked as passed. If false, requests that don't satisfy to PassStatusCodes/PassRegExp as blocked --openapiFile string Path to openAPI file --passRegex string Regex to a detect normal (not blocked) web page with the same HTTP status code as a blocked request --passStatusCodes ints HTTP response status code that WAF uses while passing requests (default [200,404]) --proxy string Proxy URL to use --quiet If present, disable verbose logging --randomDelay int Random delay in ms in addition to the delay between requests (default 400) --renewSession Renew cookies before each test. Should be used with --followCookies flag (gohttp only) --reportFormat strings Export report in the following formats: none, json, html, pdf (default [pdf]) --reportName string Report file name. Supports `time' package template format (default "waf-evaluation-report-2006-January-02-15-04-05") --reportPath string A directory to store reports (default "reports") --sendDelay int Delay in ms between requests (default 400) --skipWAFBlockCheck If present, WAF detection tests will be skipped --skipWAFIdentification Skip WAF identification --testCase string If set then only this test case will be run --testCasesPath string Path to a folder with test cases (default "testcases") --testSet string If set then only this test set's cases will be run --tlsVerify If present, the received TLS certificate will be verified --url string URL to check --version Show GoTestWAF version and exit --wafName string Name of the WAF product (default "generic") --workers int The number of workers to scan (default 5)

root@kitploit:~
يدعم GoTestWAF عميلين HTTP لتنفيذ الطلبات، يمكن اختيارهما عبر الخيار `--httpClient`. العميل الافتراضي هو عميل Golang القياسي. الخيار الثاني هو Chrome، والذي يمكن استخدامه مع وسيطة سطر الأوامر `--httpClient=chrome`. لاحظ أنه على أنظمة Linux، يجب إضافة الوسيطة `--cap-add=SYS_ADMIN` إلى وسيطات Docker لتشغيل GoTestWAF باستخدام Chrome كمنفذ الطلب.

### الفحص استنادًا إلى ملف OpenAPI

للحصول على فحص أفضل، يدعم GTW إرسال ناقلات خبيثة من خلال طلبات تطبيق صالحة. بدلاً من إنشاء طلبات بسيطة في الهيكل وإرسالها إلى عنوان URL المحدد عند بدء التشغيل، يقوم GoTestWAF بإنشاء طلبات صالحة بناءً على وصف API للتطبيق بتنسيق OpenAPI 3.0.

كيف يعمل:

1. يقوم GoTestWAF بتحميل ملف OpenAPI وإنشاء نماذج طلبات. يتم بعد ذلك تقسيم جميع النماذج إلى مجموعات بناءً على العناصر النائبة التي تدعمها (على سبيل المثال، إذا كان هناك معلمة سلسلة نصية في مسار الطلب، فسيتم تعيين هذا الطلب إلى مجموعة من الطلبات تدعم العنصر النائب URLPath)

2. يتم اختيار الناقل الخبيث التالي من قائمة الانتظار للإرسال. بناءً على العنصر النائب المحدد له، يتم تحديد جميع نماذج الاستعلام التي يمكن استبدال هذا الناقل فيها. بعد ذلك، يتم استبدال الناقل في النموذج وإرسال الطلب.

3. بناءً على الردود المحتملة المحددة في ملف OpenAPI، يتم تحديد ما إذا كان الطلب قد تم حظره بواسطة WAF أو تم تمريره إلى التطبيق. إذا كانت حالة رمز الاستجابة ونمطها تتطابق مع تلك الموصوفة في ملف OpenAPI، فسيتم وضع علامة على الطلب على أنه تم تجاوزه. خلاف ذلك، سيتم وضع علامة عليه على أنه محظور. من الممكن أن يستجيب التطبيق فقط برمز حالة، وهذه الحالة تتطابق مع الاستجابة من WAF. في هذه الحالة، سيتم وضع علامة على الطلب على أنه غير محدد.

بعض ميزات OpenAPI المدعومة:

* المعاملات الرقمية والنصية في الرؤوس، المسارات، معاملات الاستعلام وجسم الطلبات؛

* أنواع المحتوى التالية مدعومة لجسم الطلب: `application/json`, `application/xml`, `application/x-www-form-urlencoded`, `text/plain`؛

* المعدِّلات التالية مدعومة لـ XML: `name`, `wrapped`, `attribute`, `prefix`, `namespace`؛

* حدود الطول للسلاسل النصية مدعومة من خلال المعاملين `minLength` و `maxLength`؛

* قيود القيم للأرقام مدعومة من خلال `minimum`, `maximum`, `exclusiveMinimum` و `exclusiveMaximum`؛

* قيود طول المصفوفات من خلال `minItems` و `maxItems` مدعومة؛

* الجمع بين المخططات عبر `oneOf`, `anyOf`, `allOf` مدعوم.

بناءً على مبدأ التشغيل الموصوف، من المهم للغاية أن يمثل ملف OpenAPI API التطبيق المنفذ بشكل صحيح. لذلك، على سبيل المثال، لا يمكنك استخدام `default` لوصف الردود المحتملة على الاستعلامات.

ملاحظة: تحتاج إلى توجيه وحدة تخزين تحتوي على مواصفات openapi إلى حاوية GoTestWAF.```sh
-v ${PWD}/api.yaml:/app/api.yaml

مثال كامل لـ Docker:```sh docker run --rm --network="host" -it -v ${PWD}/reports:/app/reports -v ${PWD}/api.yaml:/app/api.yaml wallarm/gotestwaf --wafName your_waf_name --url=https://example.com/v1 --openapiFile api.yaml

root@kitploit:~
## التشغيل مع مجموعة اختبار الانحدار لـ OWASP Core Rule Set

يتيح GoTestWAF تكاملاً سهلاً لمجموعات اختبار إضافية.

في هذا المثال، سنوضح كيفية إضافة اختبارات من مجموعة اختبار الانحدار لـ OWASP Core Rule Set.

نظرًا لأن الاختبارات مكتوبة بتنسيق مختلف عن تنسيق GoTestWAF، يلزم إجراء تحويل. لهذا الغرض، يتم توفير البرنامج النصي **misc/modsec_regression_testset_converter.rb**.

لتحويل الاختبارات، قم بتشغيل `make modsec_crs_regression_tests_convert`.
ثم، قم ببناء حاوية بمجموعة الاختبارات المحدّثة.
`make gotestwaf`

لاحظ أنه افتراضيًا، يتم تحويل الاختبارات لمجموعة فرعية فقط من القواعد. تم اختيار الفئات التالية:

- REQUEST-932-APPLICATION-ATTACK-RCE
- REQUEST-933-APPLICATION-ATTACK-PHP
- REQUEST-941-APPLICATION-ATTACK-XSS
- REQUEST-930-APPLICATION-ATTACK-LFI
- REQUEST-931-APPLICATION-ATTACK-RFI
- REQUEST-942-APPLICATION-ATTACK-SQLI
- REQUEST-944-APPLICATION-ATTACK-JAVA
- REQUEST-934-APPLICATION-ATTACK-GENERIC
- REQUEST-913-SCANNER-DETECTION

إذا لزم الأمر، قم بتعديل المتغير "crs_testcases" في misc/modsec_regression_testset_converter.rb لإضافة أو إزالة فئات الاختبار.
تنزيل الأداة