Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/wallarm/gotestwaf
SchwachstellenscannerWeb-SchwachstellenscannerAPI-SicherheitstestsWAF-UmgehungWebsicherheitPenetrationstestsAPI-Sicherheit
GitHubwallarm/gotestwaf

gotestwaf

Ein Open-Source-Projekt in Golang zur Bewertung verschiedener API-Sicherheitstools und WAFs hinsichtlich Erkennungslogik und Umgehungen

Repository anzeigen
1.8k260vor 1 JahrVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Webseite

GoTestWAF Black Hat Arsenal USA 2022

GoTestWAF ist ein Werkzeug für API- und OWASP-Angriffssimulation, das eine breite Palette von API-Protokollen unterstützt, darunter REST, GraphQL, gRPC, SOAP, XMLRPC und andere.

Es wurde entwickelt, um Webanwendungssicherheitslösungen zu bewerten, wie API-Sicherheitsproxys, Web Application Firewalls, IPS, API-Gateways und andere.


  • Funktionsweise
  • Anforderungen
  • Schnellstart mit Docker
  • Überprüfen der Auswertungsergebnisse
  • Demonstrationen
  • Weitere Optionen zum Ausführen von GoTestWAF
  • Konfigurationsoptionen
  • Ausführen mit der Regressionstestsuite des OWASP Core Rule Set

Funktionsweise

GoTestWAF generiert bösartige Anfragen mithilfe von kodierten Payloads, die in verschiedenen Teilen von HTTP-Anfragen platziert werden: im Body, in Headern, URL-Parametern usw. Die generierten Anfragen werden an die URL der Anwendungssicherheitslösung gesendet, die beim Start von GoTestWAF angegeben wurde. Die Ergebnisse der Bewertung der Sicherheitslösung werden in der auf Ihrem Rechner erstellten Berichtsdatei festgehalten.

Standardbedingungen für die Anfragengenerierung sind im Ordner testcases in YAML-Dateien des folgenden Formats definiert:```yaml payload:

  • '"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` ist eine böswillige Angriffsprobe (z. B. XSS-Payload wie ```<script>alert(111)</script>``` oder etwas Komplexeres).
Da das Format des YAML-Strings für Payloads erforderlich ist, müssen diese [als Binärdaten kodiert](https://yaml.org/type/binary.html) werden.

* `encoder` ist ein Encoder, der auf die Payload angewendet wird, bevor sie in die HTTP-Anfrage eingefügt wird. Mögliche Encoder sind:

    * Base64
    * Base64Flat
    * JSUnicode
    * URL
    * Plain (um den Payload-String unverändert zu lassen)
    * XML Entity

* `placeholder` ist eine Stelle innerhalb der HTTP-Anfrage, an der die kodierte Payload platziert werden soll. Mögliche Platzhalter sind:

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

    Der `RawRequest`-Platzhalter ermöglicht es, eine beliebige HTTP-Anfrage durchzuführen. Die Payload wird durch Ersetzen des Strings `{{payload}}` im URL-Pfad, in den Headern oder im Body eingesetzt. Felder des `RawRequest`-Platzhalters:

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

    Erforderliche Felder für den `RawRequest`-Platzhalter:
    
    * `method`-Feld

    Beispiel:
    
    ```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` ist ein Name für die gesamte Gruppe der Payloads in der Datei. Er kann beliebig sein, sollte aber die Art der Angriffe in der Datei widerspiegeln.

Die Anfragenerstellung ist ein dreistufiger Prozess, bei dem die Anzahl der Payloads mit der Anzahl der Encoder und Platzhalter multipliziert wird.
Angenommen, Sie definieren 2 **Payloads**, 3 **Encoder** (Base64, JSUnicode und URL) und 1 **Platzhalter** (URLParameter – HTTP GET-Parameter).
In diesem Fall sendet GoTestWAF 2x3x1 = 6 Anfragen in einem Testfall.

Beim Start von GoTestWAF können Sie außerdem zwischen zwei integrierten Testfällen auswählen: OWASP Top-10, OWASP-API,
oder Ihren eigenen (durch Verwendung der [Konfigurationsoption](#configuration-options) `testCasePath`).

## Voraussetzungen

* GoTestwaf unterstützt alle gängigen Betriebssysteme (Linux, Windows, macOS) und kann nativ gebaut werden,
wenn [Go](https://golang.org/doc/install) im System installiert ist. Wenn Sie GoTestWaf nativ ausführen möchten,
stellen Sie sicher, dass Sie den Chrome-Webbrowser zur Erstellung von PDF-Berichten haben. Falls Sie kein Chrome haben,
können Sie einen Bericht im HTML-Format erstellen.
* Wenn GoTestWAF als Docker-Container ausgeführt wird, stellen Sie bitte sicher, dass Sie [Docker installiert und konfiguriert haben](https://docs.docker.com/get-docker/),
und dass GoTestWAF und die bewertete Anwendungssicherheitslösung mit demselben [Docker-Netzwerk](https://docs.docker.com/network/) verbunden sind.
* Damit GoTestWAF erfolgreich gestartet werden kann, stellen Sie bitte sicher, dass die IP-Adresse des Rechners, auf dem GoTestWAF ausgeführt wird, auf dem Rechner whitelistiert ist,
der die Anwendungssicherheitslösung ausführt.

## Schnellstart mit Docker

Die folgenden Schritte führen Sie durch das Herunterladen und Starten von GoTestWAF mit minimaler Konfiguration auf Docker.

1.  Ziehen Sie das [GoTestWAF-Image](https://hub.docker.com/r/wallarm/gotestwaf) von Docker Hub:

    ```
    docker pull wallarm/gotestwaf
    ```

2.  Starten Sie das GoTestWAF-Image:

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

    Falls erforderlich, können Sie `${PWD}/reports` durch den Pfad zu einem anderen Ordner ersetzen, der für den Evaluierungsbericht verwendet wird.

    Wenn Sie den Bericht nicht optional per E-Mail senden möchten, drücken Sie einfach die Eingabetaste, wenn die E-Mail-Anforderungsnachricht erscheint, oder verwenden Sie --noEmailReport, um die Nachricht zu überspringen:

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

    Wenn das bewertete Sicherheitstool extern verfügbar ist, können Sie die Option `--network="host"` weglassen. Diese Option ermöglicht die Interaktion von Docker-Containern, die auf 127.0.0.1 laufen.

    Um die gRPC-Tests durchzuführen, benötigen Sie einen funktionierenden Endpunkt und verwenden die CLI-Option --grpcPort <port>.

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

3.  Überprüfen Sie Ihre E-Mail auf den Bericht.

Sie haben Ihre Anwendungssicherheitslösung mit GoTestWAF mit minimaler Konfiguration erfolgreich evaluiert.
Um erweiterte Konfigurationsoptionen zu erfahren, verwenden Sie bitte diesen [Link](#configuration-options).

## Überprüfen der Evaluierungsergebnisse

Überprüfen Sie die Evaluierungsergebnisse, die mit den Diensten `STDOUT` und `STDERR` protokolliert wurden. Zum Beispiel:```
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% │
└──────────────────────┴───────────────────────────────┴──────────────────────────────┴─────────┘

Der Bericht waf-evaluation-report-<date>.pdf befindet sich im Ordner reports des Benutzerverzeichnisses. Sie können auch das Verzeichnis zum Speichern der Berichte mit dem Parameter reportPath und den Namen der Berichtsdatei mit dem Parameter reportName angeben. Für erweiterte Konfigurationsoptionen verwenden Sie bitte diesen Link.

Ein Beispiel für einen PDF-Bericht finden Sie hier.

Beispiel für einen GoTestWaf-Bericht

Demos

Sie können GoTestWAF testen, indem Sie die Demo-Umgebung ausführen, die NGINX-basiertes ModSecurity mit OWASP Core Rule Set bereitstellt, und GoTestWAF evaluiert ModSecurity unter Docker.

Um die Demo-Umgebung auszuführen:

  1. Klonen Sie dieses Repository und navigieren Sie in das geklonte Verzeichnis:

    root@kitploit:~
    git clone https://github.com/wallarm/gotestwaf.git
    cd gotestwaf
    
  2. Starten Sie ModSecurity aus dem Docker-Image mit folgendem make-Befehl:

    root@kitploit:~
    make modsec
    

    Die Einstellungen zum Ausführen des ModSecurity Docker-Containers sind in der Regel modsec des geklonten Makefiles definiert. Es startet den ModSecurity Docker-Container auf Port 8080 mit minimaler Konfiguration, die in der geklonten Datei ./resources/default.conf.template definiert ist, und dem auf 1 gesetzten PARANOIA-Wert.

    Falls erforderlich, können Sie diese Einstellungen ändern, indem Sie die Regel modsec im geklonten Makefile bearbeiten. Verfügbare Optionen für die ModSecurity-Konfiguration sind auf Docker Hub beschrieben.

    Um die ModSecurity-Container zu stoppen, verwenden Sie den folgenden Befehl:

    root@kitploit:~
    make modsec_down
    
  3. Starten Sie GoTestWAF mit minimaler Konfiguration mit einer der folgenden Methoden:

    Starten Sie das Docker-Image mit den folgenden - und -Befehlen:

Andere Optionen zum Ausführen von GoTestWAF

Zusätzlich zum Ausführen des von Docker Hub heruntergeladenen GoTestWAF-Docker-Images können Sie GoTestWAF mit den folgenden Optionen ausführen:

  • Klonen Sie dieses Repository und erstellen Sie das GoTestWAF-Docker-Image aus dem Dockerfile, zum Beispiel:

    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>
    

    Falls das bewertete Sicherheitstool extern verfügbar ist, können Sie die Option --network="host" weglassen. Diese Option ermöglicht die Interaktion von Docker-Containern, die auf 127.0.0.1 laufen.

  • Klonen Sie dieses Repository und führen Sie GoTestWAF mit go aus, zum Beispiel:

    root@kitploit:~
    git clone https://github.com/wallarm/gotestwaf.git
    cd gotestwaf
    go run ./cmd --url=<EVALUATED_SECURITY_SOLUTION_URL>
    
  • Klonen Sie dieses Repository und bauen Sie GoTestWAF als Go-Modul:

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

Unterstützte Konfigurationsoptionen für GoTestWAF werden unten beschrieben.

Konfigurationsoptionen```

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 unterstützt zwei HTTP-Clients für die Durchführung von Anfragen, auswählbar über die Option `--httpClient`. Der Standard-Client ist der standardmäßige Golang-HTTP-Client. Die zweite Option ist Chrome, das mit dem CLI-Argument `--httpClient=chrome` verwendet werden kann. Beachten Sie, dass auf Linux-Systemen das Argument `--cap-add=SYS_ADMIN` zu den Docker-Argumenten hinzugefügt werden muss, um GoTestWAF mit Chrome als Anfrageausführer auszuführen.

### Scan basierend auf OpenAPI-Datei

Für besseres Scannen unterstützt GTW das Senden von bösartigen Vektoren durch gültige Anwendungsanfragen. Anstatt Anfragen zu konstruieren, die einfach in der Struktur sind und sie an die beim Start angegebene URL zu senden, erstellt GoTestWAF gültige Anfragen basierend auf der API-Beschreibung der Anwendung im OpenAPI-3.0-Format.

So funktioniert es:

1. GoTestWAF lädt eine OpenAPI-Datei und erstellt Anforderungsvorlagen. Alle Vorlagen werden dann basierend auf den von ihnen unterstützten Platzhaltern in Gruppen eingeteilt (z. B. wenn ein String-Parameter im Anforderungspfad vorhanden ist, wird eine solche Anforderung einer Gruppe von Anforderungen zugewiesen, die den URLPath-Platzhalter unterstützen).

2. Der nächste bösartige Vektor wird aus der Warteschlange zum Senden ausgewählt. Basierend auf dem dafür angegebenen Platzhalter werden alle Anfragevorlagen ausgewählt, in die dieser Vektor eingesetzt werden kann. Als nächstes wird der Vektor in die Vorlage eingesetzt und die Anfrage gesendet.

3. Basierend auf den in der OpenAPI-Datei angegebenen möglichen Antworten wird bestimmt, ob die Anfrage von der WAF blockiert oder an die Anwendung weitergeleitet wurde. Wenn der Status des Antwortcodes und sein Schema mit den in der OpenAPI-Datei beschriebenen übereinstimmen, wird die Anfrage als umgangen markiert. Andernfalls wird sie als blockiert markiert. Es ist möglich, dass die Anwendung nur mit einem Statuscode antwortet und dieser Statuscode mit der Antwort der WAF übereinstimmt. In diesem Fall wird die Anfrage als ungelöst markiert.

Einige unterstützte OpenAPI-Funktionen:

* numerische und String-Parameter in Headern, Pfaden, Abfrageparametern und im Anforderungskörper;

* die folgenden Content-Types werden für den Anforderungskörper unterstützt: `application/json`, `application/xml`, `application/x-www-form-urlencoded`, `text/plain`;

* die folgenden Modifikatoren werden für XML unterstützt: `name`, `wrapped`, `attribute`, `prefix`, `namespace`;

* Längenbeschränkungen für Strings werden durch die Parameter `minLength` und `maxLength` unterstützt;

* Wertebeschränkungen für Zahlen werden durch `minimum`, `maximum`, `exclusiveMinimum` und `exclusiveMaximum` unterstützt;

* Beschränkungen der Länge von Arrays durch `minItems` und `maxItems` werden unterstützt;

* Kombination von Schemata über `oneOf`, `anyOf`, `allOf` wird unterstützt.

Basierend auf dem beschriebenen Funktionsprinzip ist es äußerst wichtig, dass die OpenAPI-Datei die implementierte Anwendungs-API korrekt abbildet. Daher können Sie beispielsweise nicht `default` verwenden, um mögliche Antworten auf Anfragen zu beschreiben.

Hinweis: Sie müssen ein Volume mit der OpenAPI-Spezifikation an den GoTestWAF-Container weiterleiten.```sh
-v ${PWD}/api.yaml:/app/api.yaml

Vollständiges Docker-Beispiel:```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:~
## Ausführung mit der OWASP Core Rule Set Regressionstestsuite

GoTestWAF ermöglicht die einfache Integration zusätzlicher Testsuiten.

In diesem Beispiel zeigen wir, wie Tests aus der OWASP Core Rule Set Regressionstestsuite hinzugefügt werden können.

Da die Tests in einem anderen Format als dem GoTestWAF-Format geschrieben sind, ist eine Konvertierung erforderlich. Zu diesem Zweck wird das Skript **misc/modsec_regression_testset_converter.rb** bereitgestellt.

Um die Tests zu konvertieren, führen Sie `make modsec_crs_regression_tests_convert` aus.
Erstellen Sie dann einen Container mit dem aktualisierten Testsatz.
`make gotestwaf`

Beachten Sie, dass standardmäßig Tests nur für eine Teilmenge der Regeln konvertiert werden. Die folgenden Kategorien wurden ausgewählt:

- 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

Falls erforderlich, ändern Sie die Variable "crs_testcases" in misc/modsec_regression_testset_converter.rb, um Testkategorien hinzuzufügen oder zu entfernen.
Tool herunterladen
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

Erstellen Sie das GoTestWAF-Docker-Image aus dem Dockerfile und führen Sie das Image mit den folgenden make-Befehlen aus (stellen Sie sicher, dass ModSec auf Port 8080 läuft; falls nicht, aktualisieren Sie den Portwert im Makefile):

root@kitploit:~
make gotestwaf
make scan_local_from_docker

Starten Sie GoTestWAF nativ mit go mit dem folgenden make-Befehl: (stellen Sie sicher, dass ModSec auf Port 8080 läuft; falls nicht, aktualisieren Sie den Portwert im Makefile):

root@kitploit:~
make scan_local
  • Finden Sie die Bericht-Datei waf-evaluation-report-<date>.pdf im Ordner reports, den Sie auf /app/reports im Container gemappt haben.