Saltar al contenido
Vulnerabilidades
Índice de contenidos

Enumeración de APIs

Antes de atacar una API necesitas descubrir sus endpoints y entender cómo se usan. A diferencia de una web clásica, los endpoints de una API no suelen estar enlazados en ninguna página: hay que descubrirlos.


Paso 1 — Encontrar la API

  • Intercepta el tráfico de la app web/móvil con Burp Suite. Cada llamada que haga la aplicación te revela un endpoint real.
  • Busca rutas típicas: /api, /api/v1, /api/v2, /rest, /graphql, /swagger, /openapi.json.
  • Revisa el JavaScript de la web: a menudo contiene la lista de endpoints codificada.
# Extraer posibles rutas de los ficheros JS
curl -s http://<IP>/main.js | grep -oE '"/api/[a-zA-Z0-9/_-]+"'

Paso 2 — Buscar documentación expuesta

Muchas APIs exponen su propia documentación, que es un mapa completo de todos los endpoints y parámetros. Pruébalos siempre:

/swagger-ui.html
/swagger/index.html
/api/swagger.json
/openapi.json
/api-docs
/graphql        (con introspección activada)
/redoc

Si encuentras un Swagger/OpenAPI, tienes el trabajo hecho a medias: ahí está cada ruta, método, parámetro y modelo de datos.


Paso 3 — Fuzzing de endpoints

Si no hay documentación, descubre rutas por fuerza bruta con diccionarios específicos de APIs:

ffuf -u http://<IP>/api/v1/FUZZ \
  -w /usr/share/seclists/Discovery/Web-Content/api/api-endpoints.txt \
  -mc 200,201,401,403,405

Truco clave: incluye 401 y 403 entre los códigos válidos (-mc). Un 403 Forbidden confirma que el endpoint existe aunque no tengas acceso todavía — es exactamente lo que buscas para probar fallos de autorización.

Fuzzing de versiones y de métodos:

# ¿Existe una versión antigua y más vulnerable?
ffuf -u http://<IP>/api/FUZZ/users -w versiones.txt   # v1, v2, v3, beta, internal...

# ¿Qué métodos acepta un endpoint?
curl -s -X OPTIONS http://<IP>/api/v1/users -i | grep -i allow

Paso 4 — GraphQL: introspección

Si la API es GraphQL, intenta la introspection query: devuelve el esquema completo (todos los tipos, consultas y mutaciones).

curl -s -X POST http://<IP>/graphql \
  -H "Content-Type: application/json" \
  -d '{"query":"{__schema{types{name fields{name}}}}"}'

Herramientas: InQL (extensión de Burp) y GraphQL Voyager para visualizar el esquema.


Paso 5 — Entender cada endpoint

Por cada endpoint descubierto, anota:

  • Método(s) HTTP que acepta.
  • Parámetros (en la URL, en el cuerpo JSON, en cabeceras).
  • Si requiere autenticación y de qué tipo.
  • Qué devuelve y con qué código de estado.

Esta “radiografía” es lo que luego atacarás endpoint por endpoint.


Herramientas relacionadas

HerramientaDescripción
Burp SuiteInterceptar y mapear todo el tráfico de la API.
ffuf / gobusterFuzzing de endpoints y versiones.
kiterunnerFuzzing específico de APIs (entiende rutas y métodos).
InQLIntrospección y ataque de GraphQL desde Burp.
arjunDescubrimiento de parámetros ocultos.

Consejo: no te limites a /api/v1. Las versiones antiguas (v1, beta, internal, legacy) suelen seguir activas y sin parchear mientras el frontend ya usa v2. Es el fallo API9 — Improper Inventory Management, y es una mina de oro.