Puedo explicarte **cómo comprobar IDOR y BOLA con Burp Suite** *solo en entornos donde tengas autorización* (tu app, laboratorio, programa bug bounty con permiso, etc.). A nivel práctico, **IDOR** y **BOLA** son variantes de lo mismo: fallas de **autorización a nivel de objeto** (Broken Access Control). La diferencia típica es: * **IDOR**: suele verse en apps web “normales” (URLs/requests con IDs predecibles). * **BOLA**: el mismo problema, pero en **APIs** (REST/GraphQL), muy común con tokens (Bearer/JWT). Abajo te dejo un flujo seguro y útil con Burp en Kali. --- ## 1) Preparación en Burp (Kali) 1. Abre **Burp Suite** (Community sirve). 2. Configura el navegador para pasar por el **proxy** de Burp (127.0.0.1:8080). 3. Instala el **certificado** de Burp en el navegador para interceptar HTTPS (en Burp: *Proxy → Intercept → Open Browser* suele simplificar). 4. En *Proxy → HTTP history* confirma que ves tráfico. **Tip clave:** Para probar autorización necesitas **dos identidades**: * Usuario A (dueño de objetos) * Usuario B (no debería acceder a objetos de A) * (Opcional) un usuario “admin” o rol distinto si aplica --- ## 2) Cómo detectar posibles IDOR/BOLA (qué buscar) En el tráfico, busca requests donde haya “referencias a objetos”, por ejemplo: * IDs en la ruta: `/users/123`, `/orders/987`, `/invoices/555` * IDs en query: `?userId=123`, `?account=44` * IDs en JSON: `{"id":123,"ownerId":44}` * Identificadores “opacos” pero reutilizables: UUID, hashes, etc. También fíjate en operaciones típicas: * `GET /resource/{id}` (leer) * `PUT/PATCH /resource/{id}` (editar) * `DELETE /resource/{id}` (borrar) * Acciones: `/transfer`, `/refund`, `/changeEmail`, etc. --- ## 3) Prueba base para IDOR (web) con Burp **Objetivo:** confirmar si puedes acceder a un objeto que no te pertenece. ### Flujo recomendado 1. **Inicia sesión como Usuario A**. 2. Navega hasta un recurso que sea “de A” (por ejemplo su perfil, una orden, un archivo). 3. En Burp, toma el request correspondiente (de *HTTP history*) y envíalo a: * **Repeater** (clic derecho → *Send to Repeater*). 4. En Repeater, identifica el **ID** del objeto y cámbialo por otro valor (un ID distinto). 5. Repite el request y evalúa: ### Qué confirma una falla (señales) * Te devuelve **200** y datos de otro usuario. * Te permite **editar/borrar** un objeto que no es tuyo. * Respuestas “parciales” con datos sensibles (nombre, email, dirección, etc.). ### Qué sería lo correcto * **401/403** (no autorizado) o * **404** (ocultar existencia del objeto) o * Respuesta filtrada (solo datos permitidos). **Consejo práctico:** Haz la misma prueba con **Usuario B** logueado: copia el request de A y **reemplaza su cookie/token** por la sesión de B (o repite navegación como B y compara). --- ## 4) Prueba base para BOLA (API) con Burp BOLA suele aparecer cuando la API valida autenticación (token válido) pero **no valida que el objeto pertenezca** al usuario. ### Flujo recomendado 1. Captura un request API como Usuario A (por ejemplo `GET /api/accounts/1234`). 2. Mándalo a **Repeater**. 3. Cambia el **identificador de objeto** (accountId/orderId/etc.) a uno que NO sea de A. 4. Repite: * Con token de **A** * Con token de **B** 5. Observa si hay acceso indebido. ### Puntos donde suele esconderse BOLA * Endpoints “de listado” con filtros controlados por el cliente: `GET /api/orders?userId=...` * Endpoints “de acción” (transferencias, cambios de rol): `POST /api/users/{id}/role` * GraphQL: IDs en variables/queries (muy común). --- ## 5) Cómo usar Burp para hacerlo más ordenado (sin “ruido”) * **Target → Site map**: te ayuda a localizar endpoints repetidos con IDs. * **Logger/HTTP history**: filtra por `/api/` o por palabras como `id`, `user`, `account`. * **Comparer**: compara respuestas cuando cambias IDs (¿cambia el contenido?). * **Repeater**: tu herramienta principal para pruebas controladas. * **Intruder (con cuidado)**: útil para **pequeñas variaciones** de ID en laboratorio (evita fuerza bruta o grandes rangos). *(Si usas Burp Pro existen funciones más avanzadas, pero con Community alcanza para confirmar el fallo.)* --- ## 6) Evidencia mínima que deberías recolectar (para reportar bien) * Request original (Usuario A → objeto A) * Request modificado (Usuario B o ID cambiado → objeto ajeno) * Respuesta que demuestra acceso (código HTTP + fragmento relevante) * Impacto: lectura / modificación / borrado / ejecución de acción * Condiciones: roles, endpoint, parámetros exactos donde falla --- ## 7) Cómo se corrige (por si estás auditando tu propia app) * **Autorización server-side** en cada endpoint por objeto: “¿este usuario puede acceder a ESTE id?” * No confiar en `userId` recibido del cliente (tomarlo del token/sesión). * Políticas ABAC/RBAC consistentes (y tests). * Logging + rate limits para reducir enumeración. --- Si me pegas **un ejemplo de request (sin secretos)**: ruta + método + un JSON de ejemplo (redactando token/cookies), te digo **dónde suele estar el vector IDOR/BOLA** y qué variaciones probar de forma segura para confirmar si es bug real o falso positivo.