# Kiterunner: content discovery hecho para APIs

> Cómo instalar y ejecutar Kiterunner, por qué supera a los brute-forcers de directorios genéricos en APIs modernas, y cómo Tandera lo usa para el descubrimiento de shadow-endpoints.

`Kiterunner` es content discovery diseñado para APIs en lugar de sitios web. Los brute-forcers genéricos envían `GET /path`; las APIs reales usan métodos, headers, parámetros de path y content types específicos. Kiterunner reproduce plantillas de solicitud derivadas de decenas de miles de especificaciones reales de API, así que encuentra rutas que solo responden a, por ejemplo, `POST` con cuerpo JSON.

## Instalación

```bash
# release binario
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 (archivos kite routes-* de Assetnote)
wget https://wordlists-cdn.assetnote.io/data/kiterunner/routes-large.kite
```

## Comandos principales

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

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

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

# ajusta concurrencia y tasa
kr scan https://api.example.com -w routes-large.kite \
  --max-connection-per-host 5 -x 10
```

## Salida

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

Un `401` aquí es una señal, no un fallo: la ruta existe y exige auth.

## Dónde encaja en Tandera

Kiterunner se ejecuta en la fase de **analyze** de `recon_api`. Sus resultados alimentan la síntesis de shadow-endpoints del flujo — las rutas que descubre se comparan contra la especificación documentada de la API, y cualquier cosa presente pero no documentada se saca a la luz como superficie oculta.

## Uso en un pentest

**401 y 403 son los resultados interesantes, no 200.** Significan que el endpoint existe y está protegido. Un endpoint no documentado que exige auth es exactamente donde la autorización rota a nivel de objeto tiende a vivir — pruébalo con y sin credenciales.

**Coincide el método, o no encuentras nada.** La razón por la que los brute-forcers genéricos se pierden rutas de API es que solo envían GET. La consciencia de método de Kiterunner es el punto; no recurras a una wordlist solo de GET contra una API.

**Haz diff contra la spec.** Si el cliente proporcionó un documento OpenAPI, la brecha entre lo que documenta y lo que Kiterunner encuentra es la shadow API — no documentada, y normalmente menos probada.

**Limita la tasa contra producción.** Las listas de rutas son grandes. Limita las conexiones y coordina la ventana con el cliente.

---

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