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:
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.
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