# graphw00f: fingerprinting de endpoints GraphQL

> Cómo instalar y ejecutar graphw00f, qué te dice el motor GraphQL sobre debilidades probables, y dónde encaja en el recon de Tandera.

`graphw00f` hace fingerprinting de servidores GraphQL. Envía un puñado de queries específicas del motor y, a partir del comportamiento de error y respuesta, identifica qué implementación GraphQL está corriendo — Apollo, Hasura, graphql-ruby, y decenas más. Saber el motor te dice qué debilidades buscar, porque los valores por defecto de introspection, el comportamiento de batching y la verbosidad de errores varían según la implementación.

## Instalación

```bash
git clone https://github.com/dolevf/graphw00f.git
cd graphw00f && pip install -r requirements.txt
python main.py -h
```

## Comandos principales

```bash
# detecta un endpoint GraphQL, luego haz fingerprint
python main.py -d -f -t https://example.com/graphql

# proporciona el endpoint directamente
python main.py -f -t https://example.com/api/graphql

# con headers
python main.py -f -t https://example.com/graphql \
  -H "Authorization: Bearer TOKEN"

# lista lo que puede identificar
python main.py -l
```

`-d` ejecuta detección (encontrar el endpoint), `-f` ejecuta fingerprinting (identificar el motor).

## Salida

```
[*] Found GraphQL at https://example.com/graphql
[*] Discovered GraphQL Engine: (Apollo)
[!] Attack Surface Matrix: https://github.com/nicholasaleks/graphql-threat-matrix
```

## Dónde encaja en Tandera

graphw00f se ejecuta en la fase de **analyze** de `recon_web_lite`. Es seguro para el flujo `NonIntrusive` porque el fingerprinting es un pequeño número de queries benignas. Cuando identifica un motor, establece el contexto que usa el resto de la evaluación — un endpoint GraphQL es una superficie de ataque distinta de REST, y el motor determina qué partes de ella quedan expuestas por defecto.

## Uso en un pentest

**El motor mapea a un conjunto conocido de debilidades.** Una vez que sabes si es Apollo o Hasura, la GraphQL Threat Matrix te dice los comportamientos por defecto a comprobar — introspection, field suggestions, batching, límite de profundidad. El fingerprinting convierte un genérico "prueba el GraphQL" en un checklist específico.

**Introspection es lo primero a comprobar.** Si está habilitada, tienes el schema completo — todo tipo, query y mutation, incluidas las administrativas que la UI nunca llama. Ese es tu mapa para todo lo que sigue.

**El batching habilita ataques que el rate limiter no ve.** Algunos motores permiten enviar muchas operaciones en una solicitud. Si el login es una mutation, el batching de queries puede convertir una solicitud HTTP en cientos de intentos de contraseña bajo un único conteo de rate-limit. Comprueba si el motor identificado lo permite.

---

Canonical: https://tandera.io/es/tools/graphw00f
This page as markdown: https://tandera.io/es/tools/graphw00f.md
Index for agents: https://tandera.io/llms.txt

Every page here is also available as markdown: append `.md` to the path (e.g. `/recon.md`, `/index.md` for this homepage, `/blog/<slug>.md`), or request the canonical path with `Accept: text/markdown`.
