Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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.8k26024hace 1 añoRevisado 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 API y OWASP que admite una amplia gama de protocolos API, incluyendo REST, GraphQL, gRPC, SOAP, XMLRPC y otros.

Fue diseñada para evaluar soluciones de seguridad de aplicaciones web, como proxies de seguridad API, cortafuegos de aplicaciones web (WAF), IPS, pasarelas API y otras.


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

Cómo funciona

GoTestWAF genera solicitudes maliciosas utilizando cargas útiles codificadas colocadas en diferentes partes de las solicitudes HTTP: el cuerpo, las cabeceras, los parámetros 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 su máquina.

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

* `encoder` es un codificador que se aplica 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` le permitirá realizar una solicitud HTTP arbitraria. El payload se sustituye reemplazando la cadena `{{payload}}` en la ruta URL, encabezados o cuerpo. Campos del placeholder `RawRequest`:

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

    Campos requeridos para el placeholder `RawRequest`:
    
    * el 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 para 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 la cantidad de codificadores y placeholders.
Supongamos que define 2 **payloads**, 3 **codificadores** (Base64, JSUnicode y URL) y 1 **placeholder** (URLParameter - parámetro GET HTTP).
En este caso, GoTestWAF enviará 2x3x1 = 6 solicitudes en un caso de prueba.

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

## Requisitos

* GoTestWAF es compatible con todos los sistemas operativos populares (Linux, Windows, macOS) y se puede compilar de forma nativa
si [Go](https://golang.org/doc/install) está instalado en el sistema. Si desea ejecutar GoTestWAF de forma nativa,
asegúrese de tener el navegador Chrome para poder generar informes PDF. En caso de que no tenga Chrome,
puede crear un informe en formato HTML.
* Si ejecuta GoTestWAF como contenedor Docker, asegúrese 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, asegúrese 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 explican cómo descargar e iniciar GoTestWAF con una configuración mínima en Docker.

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

    ```
    docker pull wallarm/gotestwaf
    ```

2.  Inicie 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, puede reemplazar `${PWD}/reports` con la ruta a otra carpeta utilizada para colocar el informe de evaluación.

    Si no desea enviar opcionalmente el informe por correo electrónico, simplemente presione Enter después de que aparezca el mensaje de solicitud de correo electrónico, o use `--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, 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.

    Para realizar las pruebas gRPC, debe tener un endpoint funcional y usar la opción de línea de comandos `--grpcPort <port>`.

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

3.  Revise su correo electrónico para obtener el informe.

Ha evaluado exitosamente su solución de seguridad de aplicaciones utilizando GoTestWAF con una configuración mínima.
Para conocer opciones de configuración avanzadas, utilice este [enlace](#configuration-options).

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

Revise los resultados de la evaluación registrados mediante 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, use 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 implementa 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 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 una 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, use el siguiente comando:

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

    Inicie la imagen 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 a partir del 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 de Docker Hub, puede ejecutar GoTestWAF usando las siguientes opciones:

  • Clone este repositorio y construya la imagen Docker de GoTestWAF a partir del 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 compile 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 de GoTestWAF se describen a continuación.

Configuration options```

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 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 de CLI `--httpClient=chrome`. Tenga en cuenta que en sistemas Linux, debe 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 el formato OpenAPI 3.0.

Cómo funciona:

1. GoTestWAF carga un archivo OpenAPI y construye plantillas de solicitudes. 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. En función del 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. Basándose en 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 ese caso, la solicitud se marcará como no resuelta.

Algunas características compatibles de OpenAPI:

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

* los siguientes tipos de contenido son compatibles para el cuerpo de la solicitud: `application/json`, `application/xml`, `application/x-www-form-urlencoded`, `text/plain`;

* los siguientes modificadores son compatibles para XML: `name`, `wrapped`, `attribute`, `prefix`, `namespace`;

* los límites de longitud para cadenas son compatibles mediante los parámetros `minLength` y `maxLength`;

* las restricciones de valor para números son compatibles mediante `minimum`, `maximum`, `exclusiveMinimum` y `exclusiveMaximum`;

* las restricciones en la longitud de arreglos mediante `minItems` y `maxItems` son compatibles;

* la combinación de esquemas mediante `oneOf`, `anyOf`, `allOf` es compatible.

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 se puede usar `default` para describir posibles respuestas a consultas.

Nota: Debe reenviar el volumen con la especificación openapi al contenedor 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:~
## Ejecutando con el conjunto de pruebas de regresión de OWASP Core Rule Set

GoTestWAF permite una fácil integración de conjuntos de pruebas adicionales.

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

Dado que las pruebas están escritas en un formato diferente al formato GoTestWAF, se requiere una conversión. Para ello, 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 actualizado de pruebas.
`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 prueba.
Descargar herramienta