Ejercicio Inyección SQL

Iniciado por Zedmix, 7 Mayo 2017, 16:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Zedmix

Buenas tardes, estoy tratando de realizar un ejercicio y le he echo varias pruebas, con herramientas y también con pruebas manuales y no termino de conseguir el resultado. Si alguien me podría dar una guía lo agradecería, os pongo en situación.

Tengo un login

El cual tiene la siguiente función:

Código (php) [Seleccionar]

function areUserAndPasswordValid($user, $password) {
global $db, $userId;

$query = SQLite3::escapeString('SELECT userId, password FROM users WHERE username = "' . $user . '"');

$result = $db->query($query) or die ("Invalid query: " . $query . ". Field user introduced is: " . $user);
$row = $result->fetchArray();

if ($row === FALSE)
return FALSE;

if ($password == $row['password'])
{
$userId = $row['userId'];
$_COOKIE['userId'] = $userId;
return TRUE;
}
else
{
return FALSE;
}
}


Y se me facilita una lista de posibles password, pero nunca se me facilita ningún usuario.
Conciencia, Compromiso, Rebeldia y Solidaridad



SirSocket

Hola

No lo he probado pero partiendo de la sentencia que tienes debes conseguir asignar a la variable user un valor que devuelva un true

SELECT userId, password
FROM users
WHERE username = "' . $user . '"'


Si en la variable user asignas algo así:

' or '1' = '1' --


el resultado de la sentencia seria como sigue:

SELECT userId, password
FROM users
WHERE username = ' ' or '1' = '1' -- '"'


lo que significa que te devuelva usuario y password cuyo nombre este vacio o 1=1

lo que significa que si una de las dos expresiones es válida devolverá registros


username = ' ' <-- No sabemos si es cierto
'1' = '1'          <--Pero esto siempre se cumple