Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
gotestwaf — Un proyecto de código abierto en Golang para evaluar diferentes herramientas de seguridad de API y WAF para la lógica de detección y evasiones | Kitploit
Herramientas/GitHubGitHub/wallarm/gotestwaf
Escáneres de VulnerabilidadesEscáneres de Vulnerabilidades WebPruebas de Seguridad de APIsEvasión de WAFSeguridad WebPruebas de PenetraciónSeguridad de APIsTop en Seguridad de APIs #11Top en Pruebas de Seguridad de APIs #11Top en Evasión de WAF #3
1.8k26035hace 3 díasRevisado por Kitploit
GitHubwallarm/gotestwaf

gotestwaf

Un proyecto de código abierto en Golang para evaluar diferentes herramientas de seguridad de API y WAF para la lógica de detección y evasiones

Ver RepositorioSitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

GoTestWAF Black Hat Arsenal USA 2022

GoTestWAF es una herramienta para la simulación de ataques a API y OWASP que soporta una amplia variedad de protocolos de API, incluyendo REST, GraphQL, gRPC, SOAP, XMLRPC, y otros.

Fue diseñada para evaluar soluciones de seguridad de aplicaciones web, como proxies de seguridad de API, Web Application Firewalls, IPS, gateways de API, y otros.


  • Cómo funciona
  • Requisitos
  • Inicio rápido con Docker
  • Verificación de los resultados de la evaluación
  • Demos
  • Otras opciones para ejecutar GoTestWAF
  • Opciones de configuración
  • Ejecución con la suite de pruebas de regresión OWASP Core Rule Set

Cómo funciona

GoTestWAF genera solicitudes maliciosas utilizando payloads codificados colocados en diferentes partes de las solicitudes HTTP: su cuerpo, cabeceras, parámetros de URL, etc. Las solicitudes generadas se envían a la URL de la solución de seguridad de aplicaciones especificada durante el lanzamiento de GoTestWAF. Los resultados de la evaluación de la solución de seguridad se registran en el archivo de informe creado en tu máquina.

Las condiciones predeterminadas para la generación de solicitudes se definen en la carpeta testcases en los archivos YAML con el siguiente formato:```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
  • JSUnicode placeholder:
  • URLPath
  • URLParam
  • Header type: SQL Injection
root@kitploit:~
* `payload` es una muestra de ataque maliciosa (por ejemplo, un payload XSS como ```<script>alert(111)</script>``` o algo más sofisticado).
Dado que el formato de la cadena YAML es requerido para los payloads, estos deben ser [codificados como datos binarios](https://yaml.org/type/binary.html).

* `encoder` es un codificador que se aplicará al payload antes de colocarlo en la solicitud HTTP. Los codificadores posibles son:

    * Base64
    * Base64Flat
    * JSUnicode
    * URL
    * Plain (para mantener la cadena del payload tal cual)
    * XML Entity

* `placeholder` es un lugar dentro de la solicitud HTTP donde debe ir el payload codificado. Los placeholders posibles son:

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

    El placeholder `RawRequest` te permitirá realizar una solicitud HTTP arbitraria. El payload se sustituye reemplazando la cadena `{{payload}}` en la ruta de la URL, los encabezados o el cuerpo. Campos del placeholder `RawRequest`:

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

    Campos requeridos para el placeholder `RawRequest`:
    
    * campo `method`

    Ejemplo:
    
    ```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` es un nombre de todo el grupo de payloads en el archivo. Puede ser arbitrario, pero debe reflejar el tipo de ataques en el archivo.

La generación de solicitudes es un proceso de tres pasos que implica la multiplicación de la cantidad de payloads por las cantidades de encoders y placeholders.
Supongamos que definiste 2 **payloads**, 3 **encoders** (Base64, JSUnicode y URL) y 1 **placeholder** (URLParameter - parámetro HTTP GET).
En este caso, GoTestWAF enviará 2x3x1 = 6 solicitudes en un caso de prueba.

Durante el lanzamiento de GoTestWAF, también puedes elegir casos de prueba entre dos integrados: OWASP Top-10, OWASP-API,
o los tuyos propios (usando la [opción de configuración](#configuration-options) `testCasePath`).

## Requisitos

* GoTestwaf soporta todos los sistemas operativos populares (Linux, Windows, macOS), y puede compilarse de forma nativa
si [Go](https://golang.org/doc/install) está instalado en el sistema. Si quieres ejecutar GoTestWaf de forma nativa,
asegúrate de tener el navegador web Chrome para poder generar informes PDF. En caso de que no tengas Chrome,
puedes crear un informe en formato HTML.
* Si ejecutas GoTestWAF como contenedor Docker, por favor asegúrate de tener [Docker instalado y configurado](https://docs.docker.com/get-docker/),
y que GoTestWAF y la solución de seguridad de aplicaciones evaluada estén conectados a la misma [red Docker](https://docs.docker.com/network/).
* Para que GoTestWAF se inicie correctamente, por favor asegúrate de que la dirección IP de la máquina que ejecuta GoTestWAF esté en la lista blanca
en la máquina que ejecuta la solución de seguridad de aplicaciones.

## Inicio rápido con Docker

Los pasos a continuación describen cómo descargar e iniciar GoTestWAF con una configuración mínima en Docker.

1.  Descarga la [imagen de GoTestWAF](https://hub.docker.com/r/wallarm/gotestwaf) desde Docker Hub:

    ```
    docker pull wallarm/gotestwaf
    ```

2.  Inicia la imagen de GoTestWAF:

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

    Si es necesario, puedes reemplazar `${PWD}/reports` con la ruta a otra carpeta utilizada para colocar el informe de evaluación.

    Si no quieres enviar opcionalmente el informe por correo electrónico, simplemente presiona Enter después de que aparezca el mensaje de solicitud de correo electrónico, o puedes usar --noEmailReport para omitir el mensaje:

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

    Si la herramienta de seguridad evaluada está disponible externamente, puedes omitir la opción `--network="host"`. Esta opción habilita la interacción de contenedores Docker que se ejecutan en 127.0.0.1.

    Para realizar las pruebas de gRPC debes tener un endpoint en funcionamiento y usar la opción cli --grpcPort <port>.

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

3.  Revisa tu correo electrónico para ver el informe.

Has evaluado con éxito tu solución de seguridad de aplicaciones usando GoTestWAF con una configuración mínima.
Para conocer opciones de configuración avanzadas, por favor usa este [enlace](#configuration-options).

## Comprobación de los resultados de la evaluación

Comprueba los resultados de la evaluación registrados usando los servicios `STDOUT` y `STDERR`. Por ejemplo:```
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% │
└──────────────────────┴───────────────────────────────┴──────────────────────────────┴─────────┘

El archivo de informe waf-evaluation-report-<date>.pdf está disponible en la carpeta reports del directorio del usuario. También puede especificar el directorio para guardar los informes con el parámetro reportPath y el nombre del archivo de informe con el parámetro reportName. Para conocer las opciones de configuración avanzadas, utilice este enlace.

Puede encontrar un ejemplo de informe PDF aquí.

Ejemplo de informe de GoTestWaf

Demos

Puede probar GoTestWAF ejecutando el entorno de demostración que despliega ModSecurity basado en NGINX usando OWASP Core Rule Set y GoTestWAF evaluando ModSecurity en Docker.

Para ejecutar el entorno de demostración:

  1. Clone este repositorio y vaya al directorio clonado:

    root@kitploit:~
    git clone https://github.com/wallarm/gotestwaf.git
    cd gotestwaf
    
  2. Inicie ModSecurity desde la imagen de Docker usando el siguiente comando make:

    root@kitploit:~
    make modsec
    

    Los ajustes para ejecutar el contenedor Docker de ModSecurity se definen en la regla modsec del Makefile clonado. Ejecuta el contenedor Docker de ModSecurity en el puerto 8080 con la configuración mínima definida en el archivo clonado ./resources/default.conf.template y el valor de PARANOIA establecido en 1.

    Si es necesario, puede cambiar estos ajustes editando la regla modsec en el Makefile clonado. Las opciones disponibles para la configuración de ModSecurity se describen en Docker Hub.

    Para detener los contenedores de ModSecurity utilice el siguiente comando:

    root@kitploit:~
    make modsec_down
    
  3. Inicie GoTestWAF con la configuración mínima usando uno de los siguientes métodos:

    Inicie la imagen de Docker usando los siguientes comandos docker pull y 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
    

    Construya la imagen Docker de GoTestWAF desde el Dockerfile y ejecute la imagen usando los siguientes comandos make (asegúrese de que ModSec se está ejecutando en el puerto 8080; si no, actualice el valor del puerto en el Makefile):

    root@kitploit:~
    make gotestwaf
    make scan_local_from_docker
    

    Inicie GoTestWAF de forma nativa con go usando el siguiente comando make: (asegúrese de que ModSec se está ejecutando en el puerto 8080; si no, actualice el valor del puerto en el Makefile):

    root@kitploit:~
    make scan_local
    
  4. Encuentre el archivo de informe waf-evaluation-report-<date>.pdf en la carpeta reports que asignó a /app/reports dentro del contenedor.

Otras opciones para ejecutar GoTestWAF

Además de ejecutar la imagen Docker de GoTestWAF descargada desde Docker Hub, puede ejecutar GoTestWAF usando las siguientes opciones:

  • Clone este repositorio y construya la imagen Docker de GoTestWAF desde el Dockerfile, por ejemplo:

    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>
    

    Si la herramienta de seguridad evaluada está disponible externamente, puede omitir la opción --network="host". Esta opción permite la interacción de contenedores Docker que se ejecutan en 127.0.0.1.

  • Clone este repositorio y ejecute GoTestWAF con go, por ejemplo:

    root@kitploit:~
    git clone https://github.com/wallarm/gotestwaf.git
    cd gotestwaf
    go run ./cmd --url=<EVALUATED_SECURITY_SOLUTION_URL>
    
  • Clone este repositorio y construya GoTestWAF como módulo Go:

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

Las opciones de configuración compatibles con GoTestWAF se describen a continuación.

Opciones de configuración```

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 --skipGraphQLCheck Skip the GraphQL availability pre-check and assume the GraphQL endpoint is available --skipGRPCCheck Skip the gRPC availability pre-check and assume the gRPC endpoint is available --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 admite dos clientes HTTP para realizar solicitudes, seleccionables mediante la opción `--httpClient`. El cliente predeterminado es el cliente HTTP estándar de Golang. La segunda opción es Chrome, que se puede usar con el argumento CLI `--httpClient=chrome`. Ten en cuenta que en sistemas Linux, debes agregar el argumento `--cap-add=SYS_ADMIN` a los argumentos de Docker para ejecutar GoTestWAF con Chrome como ejecutor de solicitudes.


### Escaneo basado en archivo OpenAPI

Para un mejor escaneo, GTW admite el envío de vectores maliciosos a través de solicitudes de aplicación válidas. En lugar de construir solicitudes de estructura simple y enviarlas a la URL especificada al inicio, GoTestWAF crea solicitudes válidas basadas en la descripción de la API de la aplicación en formato OpenAPI 3.0.

Cómo funciona:

1. GoTestWAF carga un archivo OpenAPI y construye plantillas de solicitud. Todas las plantillas se dividen luego en grupos según los marcadores de posición que admiten (por ejemplo, si hay un parámetro de cadena en la ruta de la solicitud, dicha solicitud se asignará a un grupo de solicitudes que admiten el marcador de posición URLPath)

2. El siguiente vector malicioso se selecciona de la cola para su envío. Según el marcador de posición especificado para él, se seleccionan todas las plantillas de consulta en las que se puede sustituir este vector. A continuación, el vector se sustituye en la plantilla y se envía la solicitud.

3. Según las posibles respuestas especificadas en el archivo OpenAPI, se determina si la solicitud fue bloqueada por el WAF o pasó a la aplicación. Si el estado del código de respuesta y su esquema coinciden con los descritos en el archivo OpenAPI, la solicitud se marca como omitida. De lo contrario, se marcará como bloqueada. Es posible que la aplicación solo responda con un código de estado, y este código de estado coincida con la respuesta del WAF. En este caso, la solicitud se marcará como no resuelta.

Algunas características de OpenAPI admitidas:

* parámetros numéricos y de cadena en encabezados, rutas, parámetros de consulta y cuerpo de las solicitudes;

* se admiten los siguientes content-types para el cuerpo de la solicitud: `application/json`, `application/xml`, `application/x-www-form-urlencoded`, `text/plain`;

* se admiten los siguientes modificadores para XML: `name`, `wrapped`, `attribute`, `prefix`, `namespace`;

* se admiten límites de longitud para cadenas a través de los parámetros `minLength` y `maxLength`;

* se admiten restricciones de valores para números a través de `minimum`, `maximum`, `exclusiveMinimum` y `exclusiveMaximum`;

* se admiten restricciones en la longitud de los arrays a través de `minItems` y `maxItems`;

* se admite la combinación de esquemas mediante `oneOf`, `anyOf`, `allOf`.

Según el principio de funcionamiento descrito, es extremadamente importante que el archivo OpenAPI represente correctamente la API de la aplicación implementada. Por lo tanto, por ejemplo, no puedes usar `default` para describir posibles respuestas a las consultas.

Nota: Necesitas reenviar el volumen con la especificación openapi al contenedor de GoTestWAF.```sh
-v ${PWD}/api.yaml:/app/api.yaml

Ejemplo completo de 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:~
## Ejecución con la suite de pruebas de regresión de OWASP Core Rule Set

GoTestWAF permite la fácil integración de suites de pruebas adicionales.

En este ejemplo, demostraremos cómo agregar pruebas de la suite de pruebas de regresión de OWASP Core Rule Set.

Dado que las pruebas están escritas en un formato diferente al de GoTestWAF, se requiere una conversión. Para este propósito, se proporciona el script **misc/modsec_regression_testset_converter.rb**.

Para convertir las pruebas, ejecute `make modsec_crs_regression_tests_convert`.
Luego, construya un contenedor con el conjunto de pruebas actualizado.
`make gotestwaf`

Tenga en cuenta que, por defecto, las pruebas se convierten solo para un subconjunto de reglas. Se han elegido las siguientes categorías:

- 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

Si es necesario, modifique la variable "crs_testcases" en misc/modsec_regression_testset_converter.rb para agregar o eliminar categorías de pruebas.
Descargar herramienta