Parte: 4 — Seguridad de aplicaciones web · Fuente: The Web Application Hacker's Handbook (Stuttard & Pinto) ⏱️ Duración estimada: 130 min · Nivel: Avanzado
Explotar SQLi cuando no hay salida directa de datos: inyección ciega booleana, basada en tiempo y out-of-band. Estas técnicas permiten extraer información incluso cuando la aplicación no muestra errores ni resultados, algo muy común en aplicaciones reales bien configuradas.
⚠️ Ética: exclusivamente en DVWA, Juice Shop, PortSwigger labs u objetivos con autorización expresa.
Al finalizar, el alumno podrá:
SLEEP, WAITFOR).| # | Tema | Por qué importa |
|---|---|---|
| 1 | Blind booleana | Extracción sin ver datos |
| 2 | Funciones SUBSTRING/ASCII | Leer carácter a carácter |
| 3 | Blind temporal | Cuando ni la lógica cambia |
| 4 | Out-of-band (DNS/HTTP) | Exfiltración por canal alterno |
| 5 | Segundo orden (second-order) | El payload se ejecuta después |
| 6 | Automatización con scripts | La extracción manual es lenta |
| 7 | Diferencias por motor | SLEEP vs. WAITFOR vs. pg_sleep |
⚠️ Solo en los labs autorizados.
' AND 1=1-- - (aparece) vs. ' AND 1=2-- - (no aparece).' AND SUBSTRING((SELECT password FROM users WHERE username='administrator'),1,1)='a'-- -
'; IF (condición) WAITFOR DELAY '0:0:5'-- - (MSSQL) o ' AND SLEEP(5)-- - (MySQL).> en vez de =).Extrae la contraseña completa del usuario administrator en un lab de blind SQLi de PortSwigger usando solo condiciones booleanas automatizadas.
Criterio de aceptación: entregas la contraseña recuperada, la configuración de Intruder (posiciones y payload set) y el número de peticiones necesarias, resolviendo el lab.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| El oráculo no es fiable | Elige una señal más estable (código o longitud) |
| Extracción lentísima | Usa búsqueda binaria y concurrencia |
| SLEEP no funciona | Motor distinto; usa la función correcta |
| OOB sin interacciones | El motor no permite conexiones salientes |
| Resultados intermitentes | Rate limiting; añade delays y reintentos |
❓ ¿Cuándo uso temporal en vez de booleana? Cuando no hay ninguna diferencia observable en la respuesta salvo el tiempo. Es más lenta, úsala como último recurso.
❓ ¿Qué es exactamente second-order? El input malicioso se guarda sin ejecutarse y detona en otra consulta posterior (por ejemplo, al mostrar el perfil).
❓ ¿Por qué la búsqueda binaria acelera tanto? Reduce las pruebas por carácter de ~128 a ~7 comparaciones (log2), un ahorro enorme.
Clase 091 — Inyección SQL: fundamentos