Aprende a identificar y explotar de forma controlada SQL Injection en DVWA con técnicas manuales claras y efectivas. Verás cómo validar la vulnerabilidad con comilla simple, cómo usar UNION SELECT, ORDER BY, database() y @@version, y cómo listar tablas desde information_schema para extraer credenciales. Nota operativa: si la IP de “Metasploit Total 2” cambia o algo queda ejecutándose, revisa la IP y reinicia la máquina virtual.
¿Qué es SQL injection y cómo detectarlo?
SQL Injection permite inyectar sentencias SQL en entradas de usuario para extraer datos. En DVWA, el formulario de “user ID” usa el método GET, visible en la URL: cambiar el parámetro altera la respuesta. La primera verificación es ingresar comilla simple ' en el campo o en la URL para provocar un error de sintaxis. Si el error aparece, la aplicación es vulnerable. Si no aparece, podrían estar ocultándolo.
- Ingresa
' en el parámetro ID. Provoca error de sintaxis.
- El método GET evidencia cómo se construye la consulta.
- Confirmas que el valor se concatena sin sanitización.
¿Por qué la comilla simple produce error?
Porque el valor del formulario se inserta en la consulta SQL como cadena. Ejemplo del patrón en PHP:
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
Si id es ', rompes las comillas: quedan desbalanceadas y el motor SQL devuelve error. Esto confirma que el input llega al query sin validación.
¿Cómo enumerar columnas, tablas y versión con union select?
Primero valida que el campo se trata como cadena. Luego haz una prueba clásica para forzar que la consulta devuelva todos los registros con una condición siempre verdadera y comentando el resto del SQL.
- Devuelve todo con condición booleana verdadera.
- Comenta el remanente del query para evitar errores de sintaxis.
Ejemplo:
Alternativa usando numeral como comentario:
Para usar UNION SELECT, necesitas saber cuántas columnas devuelve la consulta original. Usa la técnica con ORDER BY probando números decrecientes hasta que desaparezca el error.
' ORDER BY 50 -- -
' ORDER BY 20 -- -
' ORDER BY 10 -- -
' ORDER BY 5 -- -
' ORDER BY 3 -- -
' ORDER BY 2 -- - -- sin error: son 2 columnas
Con 2 columnas identificadas, prueba la unión:
Reemplaza los marcadores por funciones útiles para enumeración:
' UNION SELECT database(), @@version -- -
database(): nombre de la base de datos activa.
@@version: versión del gestor de base de datos.
¿Cómo listar tablas y columnas con information_schema?
Usa information_schema.columns para enumerar todas las tablas y todas las columnas y filtra por el esquema actual con table_schema = database().
' UNION SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = database() -- -
table_name: nombres de las tablas disponibles.
column_name: nombres de columnas por cada tabla.
- Identifica la tabla de interés: suele incluir columnas como
user_id, first_name, last_name, user, password.
¿Cómo extraer usuarios y contraseñas en dvwa?
Con las columnas identificadas y sabiendo que son 2 columnas en juego, sustituye los marcadores del UNION SELECT por los nombres de columna objetivo.
' UNION SELECT user, password FROM users -- -
- Devuelve pares de usuario y contraseña.
- El siguiente paso es crackear las contraseñas para obtener acceso.
- Para automatizar estas técnicas, considera herramientas como SQLMap en una práctica posterior.
Habilidades que pones en práctica:
- Detección de SQL Injection con comilla simple.
- Enumeración con ORDER BY para contar columnas.
- Uso de UNION SELECT para volcar datos.
- Consultas a information_schema para descubrir estructura.
- Lectura de
database() y @@version para contexto del objetivo.
¿Tienes dudas o quieres compartir tus hallazgos en DVWA? Comenta tus payloads y resultados para aprender en conjunto.