2017-03-12 7 views
0

Ich habe eine Frage zum Auskommentieren der SQL-Abfrage. Die SQL-Abfrage hat, die Form
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
Also ich versuche, dass 1' or 1=1; # und ich erhalten alle Benutzer und Passwörter wie ich erwartet hatte, aber wenn ich -- für einen Kommentar verwenden statt # i einen Syntaxfehler erhalten. Warum passiert das?
Kannst du erklären, wie ist der Sql in jedem Fall gebildet?
Auch ich merke 1' or 1=1 # funktioniert auch. Das # -Symbol sagt nichts aus; ?DVWA sql injection

Antwort

2

Wie können Sie in dem mysql manual lesen:

In MySQL, die - (Doppel-Bindestrich) Kommentar Stil erfordert den zweiten Strich durch mindestens ein Leerzeichen oder Steuerzeichen gefolgt werden (wie zum Beispiel eines Raum, Tabulator, neue Zeile, und so weiter)

Wenn nur -- auf Ihre Eingabe Hinzufügen ... gibt es keine Leerzeichen oder Steuerzeichen folgen. Ihre synthetisierten Abfrage würde so aussehen:

SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1--'; 

Wie Sie sehen können, der Doppelstrich sofort von einem ; folgt, die zu einem Syntaxfehler führt, da es keinen Kommentar betrachtet.

Versuchen in -- (mit einem nachfolgenden Leerzeichen) am Ende

Für die ; setzen: Es ist nicht notwendig in einer Abfrage an den Server ausgegeben. Dies ist nur, um verschiedene Anweisungen zu trennen, aber mit einer einzigen Anweisung überhaupt nicht erforderlich.

Der mysql-Befehlszeilenclient sendet dieses Zeichen nicht an den Server, sondern behandelt es als "Ausführungsanweisung".