Apprendimento dell'iniezione SQL etica con modulo di accesso php

2

Sto imparando l'hacking etico e ora sono in argomento SQL injection. Sono anche nuovo di SQL e PHP. Ok, quindi ho un dannato sito web dannatamente locale con Linux back-end, MySQL e Apache e ora sto cercando di usare SQL injection per accedere. Il modulo di accesso è script php, la pagina di accesso è composta da 2 caselle: nome utente e password. Ho provato ad aggiungere il segno "" alla fine della password e ottengo l'errore sql, quindi è probabilmente iniettabile. Poi ho provato ad aggiungere "'OR 1 = 1" e "' OR 'a' = a '" alla fine della password, ma con non molto successo. Quindi ora ho bisogno di aiuto! Qualsiasi idea o suggerimento sarà utile. Il codice di accesso parziale per PHP è il seguente:

// Sanitization is present

if (isset($_POST['user']))
{
$user = sanitizeString($_POST['user']);
$pass = sanitizeStringSQL1($_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)
    
posta Gazel 31.01.2015 - 03:15
fonte

1 risposta

1

La sintassi è un po 'spiacevole in entrambi i tuoi tentativi. Dato che hai menzionato che stai usando DVWA ti fornirò la fonte qui (in modo che possiamo escludere errori PHP / DB su il tuo lato)

<?php     

if(isset($_GET['Submit'])){ 

// Retrieve data 

$id = $_GET['id']; 

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; 
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); 

$num = mysql_numrows($result); 

$i = 0; 

while ($i < $num) { 

    $first = mysql_result($result,$i,"first_name"); 
    $last = mysql_result($result,$i,"last_name"); 

    echo '<pre>'; 
    echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; 
    echo '</pre>'; 

    $i++; 
} 
} 
?>

La seguente riga attiverà un'iniezione riuscita:

foo' or '1' = '1

Si noti che non vi è alcun segno di spunta all'inizio né alla fine del payload. Questo perché (come puoi vedere nell'origine) la query lo sta fornendo (su entrambe le estremità di $id ).

Nei tuoi esempi di

' OR 1=1 and ' OR 'a'=a'

Nel primo caso mancano le zecche tutte insieme e il secondo caso ha un segno di spunta finale. Entrambi produrranno probabilmente errori di sintassi SQL.

Se vuoi verificare la sintassi SQL, utilizza una risorsa online come questa .

    
risposta data 31.01.2015 - 05:40
fonte

Leggi altre domande sui tag