# graphw00f: fingerprinting de endpoints GraphQL

> Como instalar e executar o graphw00f, o que a engine GraphQL te diz sobre fraquezas prováveis, e onde ele se encaixa no recon do Tandera.

O `graphw00f` faz fingerprinting de servidores GraphQL. Ele envia um punhado de queries específicas de engine e, pelo comportamento de erro e resposta, identifica qual implementação GraphQL está rodando — Apollo, Hasura, graphql-ruby, e dezenas mais. Saber a engine te diz quais fraquezas procurar, porque padrões de introspection, comportamento de batching e verbosidade de erro variam por implementação.

## Instalação

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

## Comandos principais

```bash
# detecta um endpoint GraphQL, depois faz fingerprint
python main.py -d -f -t https://example.com/graphql

# fornece o endpoint diretamente
python main.py -f -t https://example.com/api/graphql

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

# lista o que ele consegue identificar
python main.py -l
```

O `-d` roda detecção (achar o endpoint), o `-f` roda fingerprinting (identificar a engine).

## Saída

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

## Onde ele entra no Tandera

O graphw00f roda na fase de **analyze** do `recon_web_lite`. É seguro para o fluxo `NonIntrusive` porque o fingerprinting é um pequeno número de queries benignas. Quando identifica uma engine, estabelece o contexto que o resto da avaliação usa — um endpoint GraphQL é uma superfície de ataque diferente de REST, e a engine determina quais partes dela ficam expostas por padrão.

## Usando em um pentest

**A engine mapeia para um conjunto conhecido de fraquezas.** Uma vez que você sabe que é Apollo versus Hasura, a GraphQL Threat Matrix te diz os comportamentos padrão a verificar — introspection, field suggestions, batching, limite de profundidade. O fingerprinting transforma um genérico "teste o GraphQL" num checklist específico.

**Introspection é a primeira coisa a verificar.** Se estiver habilitada, você tem o schema completo — todo tipo, query e mutation, incluindo as administrativas que a UI nunca chama. Esse é seu mapa para tudo depois.

**Batching habilita ataques que o rate limiter não vê.** Algumas engines permitem enviar muitas operações numa requisição. Se o login é uma mutation, o batching de queries pode transformar uma requisição HTTP em centenas de tentativas de senha sob uma única contagem de rate-limit. Verifique se a engine identificada permite isso.

---

Canonical: https://tandera.io/pt-br/tools/graphw00f
This page as markdown: https://tandera.io/pt-br/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`.
