# Kiterunner: content discovery feito para APIs

> Como instalar e executar o Kiterunner, por que ele supera brute-forcers de diretório genéricos em APIs modernas, e como o Tandera o usa para descoberta de shadow-endpoints.

O `Kiterunner` é content discovery projetado para APIs em vez de sites. Brute-forcers genéricos enviam `GET /path`; APIs reais usam métodos, headers, parâmetros de path e content types específicos. O Kiterunner reproduz templates de requisição derivados de dezenas de milhares de especificações reais de API, então acha rotas que só respondem a, digamos, `POST` com corpo JSON.

## Instalação

```bash
# release binário
wget https://github.com/assetnote/kiterunner/releases/latest/download/kiterunner_linux_amd64.tar.gz
tar xf kiterunner_linux_amd64.tar.gz && sudo mv kr /usr/local/bin/

# wordlists (arquivos kite routes-* da Assetnote)
wget https://wordlists-cdn.assetnote.io/data/kiterunner/routes-large.kite
```

## Comandos principais

```bash
# scan com uma wordlist kite
kr scan https://api.example.com -w routes-large.kite

# uma lista de hosts
kr scan hosts.txt -w routes-large.kite -o json -O results.json

# carrega um header de auth
kr scan https://api.example.com -w routes-large.kite \
  -H "Authorization: Bearer TOKEN"

# ajusta concorrência e taxa
kr scan https://api.example.com -w routes-large.kite \
  --max-connection-per-host 5 -x 10
```

## Saída

```json
{"method":"POST","path":"/api/v2/users/import","status":401,"content_length":52,
 "host":"https://api.example.com"}
```

Um `401` aqui é um sinal, não uma falha: a rota existe e exige auth.

## Onde ele entra no Tandera

O Kiterunner roda na fase de **analyze** do `recon_api`. Seus resultados alimentam a síntese de shadow-endpoints do fluxo — rotas que ele descobre são comparadas contra a especificação documentada da API, e qualquer coisa presente mas não documentada é revelada como superfície oculta.

## Usando em um pentest

**401 e 403 são os resultados interessantes, não 200.** Eles significam que o endpoint existe e está protegido. Um endpoint não documentado que exige auth é exatamente onde a autorização quebrada no nível de objeto tende a viver — teste com e sem credenciais.

**Combine o método, ou você não acha nada.** A razão de brute-forcers genéricos perderem rotas de API é que só enviam GET. A consciência de método do Kiterunner é o ponto; não recorra a uma wordlist só de GET contra uma API.

**Faça diff contra a spec.** Se o cliente forneceu um documento OpenAPI, a lacuna entre o que ele documenta e o que o Kiterunner acha é a shadow API — não documentada, e geralmente menos testada.

**Limite a taxa contra produção.** As listas de rotas são grandes. Limite as conexões e coordene a janela com o cliente.

---

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