Dopo aver provato con successo l'iniezione SQL, perché il risultato non viene visualizzato sulla pagina web?

2
  1. Di seguito è riportato il codice PHP che ho scritto che consente l'iniezione SQL con un parametro, ad esempio "id" in questo caso.

  2. Nel tentativo di eseguire l'SQL injection inserendo questo 2 'ORDER BY 1; -' nel parametro (campo id), ottengo solo errori SQL sulla pagina.

  3. Eseguendo la query direttamente sul server mysql vale a dire SELECT * FROM users WHERE id = '2' ORDER BY 1; - ''; Ottengo il risultato seguente che è impostato su 1 riga insieme all'errore.

mysql> SELECT * FROM users WHERE id = '2' ORDER BY 1;--'';
+----+----------+-----------+------------------+
| id | username | password  | creditcard       |
+----+----------+-----------+------------------+
|  2 | John     | password! | 3123456769384659 |
+----+----------+-----------+------------------+
1 row in set (0.00 sec)

ERROR 1064 (42000): 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 1

Codice PHP

<?php

require_once 'login.php';
if (!isset($_GET['id']))
{
    echo <<<_END
    <pre>            <h1>WELCOME to the KINGDOM</h1>
    <form action = 'si2.php' method = 'GET'>
    id <input type = 'text' name = 'id'>

        <input type = 'submit' value = 'cl1ck M3'></pre></form>
 _END;

}

if(!get_magic_quotes_gpc())
{
    $id = stripslashes($_GET['id']);

}
$connection = mysql_connect($db_hostname,$db_username,$db_password);
if(!$connection) die ("Unable to connect with MySql " . mysql_error());

 mysql_select_db($db_database,$connection) or die('Could not connect with the database');

$query = "SELECT * FROM users WHERE id = '$id'";

$result = mysql_query($query);
if($result)
{
    $rows = mysql_num_rows($result);
}
else { echo "Could not execute the Query:  <br>" . mysql_error();}


if($rows >= 1)
    {

        for ($j=0 ; $j < $rows; ++$j)
            {
                $row = mysql_fetch_row($result);
                echo "Hello $row[1]"."<br>";
                echo "Your Credit Card Number is  $row[3]"."<br><br>";
                echo $query."<br>";
                //echo $row[3];

            }
    }           
else
{
    echo "<br><br><br>Sorry no rows/results could be fetched on query execution <br><br><br>";
    //echo $query;
}
?>

La mia domanda è: perché il mio codice non è in grado di recuperare il set di righe e visualizzare le voci della tabella? E nel caso in cui voglio poi quali cambiamenti dovrei provare.

    
posta harveyD 25.03.2015 - 18:33
fonte

2 risposte

2

Errore e problemi nell'iniezione

Il problema è che non puoi eseguire più query con mysql_query e mentre stai iniettando un ; hai più query. Il primo è SELECT * FROM users WHERE id = '2' ORDER BY 1 e il secondo è --'' .

Il primo è quello che ti dà il risultato effettivo nella riga di comando, e il secondo ti dà il tuo errore (perché non è una query valida).

Nota anche che la tua iniezione: 2' ORDER BY 1;--' non ha molto senso. Perché hai ; ? Non vuoi davvero eseguire due query, solo una. E che cosa dovrebbe fare l'ultimo ' ? Ti sei già occupato del% co_de rimanente commentandolo con ' (almeno in teoria).

Soluzione

Quello che vuoi iniettare è -- , o, se non funziona, prova a usare 2' ORDER BY 1-- (url codificato come # se usi un browser) invece di %23 come carattere di commento da tagliare del resto della query ( -- ), perché non richiede uno spazio bianco aggiuntivo. In alcuni casi è anche possibile creare la query in modo che venga utilizzata la sinistra sopra ' , ad esempio ' (probabilmente non funziona per ordine).

    
risposta data 25.03.2015 - 19:38
fonte
1

Ci sono probabilmente due problemi con il tuo tentativo che causano il fallimento:

  • La sintassi per i commenti MySQL alla fine della riga --  richiede un carattere di spaziatura o di controllo che segue il doppio trattino:

    From a “-- ” sequence to the end of the line. In MySQL, the “-- ” (double-dash) comment style requires the second dash to be followed by at least one whitespace or control character (such as a space, tab, newline, and so on). This syntax differs slightly from standard SQL comment syntax, as discussed in Section 1.8.2.4, “'--' as the Start of a Comment”.

  • La funzione mysql_query di PHP consente solo una singola istruzione:

    mysql_query() sends a unique query (multiple queries are not supported) […]

risposta data 25.03.2015 - 19:05
fonte

Leggi altre domande sui tag