Come utilizzare l'operatore mySQL UNION in SQL injection, con parametore di password iniettabile?

1

Qualcuno può darmi un esempio di iniezione sql con l'operatore UNION, che restituisce utenti e password, per quanto riguarda l'esempio di php muggito. Sono riuscito a iniettare semplice 1 o 1 = 1 ... nel parametro pass, ma finora non è riuscito a iniettare usando l'operatore UNION.

function sanitizeStr($var)
{
global $connection;
$var = strip_tags($var);
$var = htmlentities($var);
$var = stripslashes($var);
return $connection->real_escape_string($var);
}

function sanitizeStrSQ51($var)
{
return ($var);
}

$error = $user = $pass = "";

if (isset($_POST['user']))
{
$user = sanitizeStr($_POST['user']);
$pass = sanitizeStrSQ51($_POST['pass']);

if ($user == "" || $pass == "")
$error = "Not all fields were entered<br>";

else
{
$result = queryMySQL("SELECT user,pass FROM members WHERE user='$user' AND pass='$pass'");
if ($result->num_rows == 0)
{
$error = "<span class='error'>Username/Password invalid</span><br><br>";
}

else
{
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
die("You are now logged in. Please <a href='members.php?view=$user'>" . "click here</a> to continue.<br><br>");
}
}
}
    
posta Gazel 02.02.2015 - 03:02
fonte

1 risposta

1

La query prende due parametri, $user e $pass . Come puoi vedere, la variabile $user è quotata correttamente, mentre la variabile $pass viene utilizzata così com'è, che la rende vulnerabile a Sql Injection. Dal codice è evidente che tutto ciò che dobbiamo fare è restituire qualsiasi valore dalla query per ottenere l'accesso:

    if ($result->num_rows == 0) {
      $error = "<span class='error'>Username/Password invalid</span><br><br>";
    } else {

Imposta il parametro $user sul nome di un utente esistente, diciamo 'admin', perché verrà utilizzato in seguito da questo codice:

      $_SESSION['user'] = $user;

Imposta il parametro $pass su:

whatever' UNION SELECT 0,1 -- 

Quindi la query diventa

SELECT user,pass FROM members WHERE user='admin' AND pass='whatever' UNION SELECT 0,1 -- '

Notare il "-" alla fine della query. Questo è un commento, che ci aiuta a sbarazzarci dell'ultima citazione singola. Lo spazio bianco dopo il doppio trattino è richiesto, altrimenti MySQL non riconoscerà il commento. In alternativa puoi usare il simbolo # . Maggiori informazioni qui: Sintassi dei commenti MySQL

    
risposta data 02.02.2015 - 06:51
fonte

Leggi altre domande sui tag