SQL injection non funziona con mysqli

0

Sto creando un semplice sito Web di simulazione che dimostra l'iniezione SQL. Sembra così:

Ilback-endèscrittoinPHP.

<?php$query=$_GET['query'];$min_length=3;if(strlen($query)>=$min_length){$raw_results=mysqli_query($con,"SELECT * FROM tools
            WHERE ('name' LIKE '%$query%')");

        if($raw_results === FALSE) { 
            echo "query failed, no results available." . mysqli_error($con);
            die();
        }

        if(mysqli_num_rows($raw_results) > 0){ // if one or more rows are returned do following

            while($results = mysqli_fetch_array($raw_results)){
                echo "<p><h3>".$results['name']."</h3>".$results['price']."</p>";
            }

        }
        else{ // if there is no matching rows do following
            echo "No results";
        }

    }
    else{ // if query length is less than minimum
        echo "Minimum length is ".$min_length;
    }
?>

Per questa seguente riga di codice:

$raw_results = mysqli_query($con, "SELECT * FROM tools
                WHERE ('name' LIKE '%$query%')");

Se modifico il codice in:

    $raw_results = mysqli_query($con, "SELECT * FROM tools
        WHERE ('name' LIKE '%')");//$query%')");

Se fornisco una stringa che è più lunga o uguale a tre caratteri, verrà visualizzata l'intera base di dati, il che significa che ')");// è un attacco di iniezione SQL valido.

Ma quando fornisco ')");// come input malizioso nella casella di ricerca, ho ricevuto questo messaggio di avviso:

query failed, no results available.You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '");//%')' at line N

Non sono sicuro del motivo per cui la mia iniezione SQL non è riuscita a recuperare alcun dato.

    
posta Yu Zhang 06.04.2017 - 04:16
fonte

1 risposta

4

Stai cercando di uscire dalla funzione PHP che non è il modo in cui funzionano le iniezioni SQL. Un'iniezione SQL non è un'iniezione di codice PHP e le virgolette doppie non consentono l'escape dalla stringa PHP.

È possibile modificare solo la stringa PHP che contiene l'istruzione SQL:

"SELECT * FROM tools WHERE ('name' LIKE '%$query%')"

Quindi, invece, prova qualcosa come x%' or '%' = ' .

    
risposta data 06.04.2017 - 04:34
fonte

Leggi altre domande sui tag