2013-04-02 14 views
9

Voglio usare PHP/Mysql injection con un esempio di login, il mio codice è sotto.Esempio di iniezione PHP MySQL?

Ho provato con un nome utente e una password di anything' -- vuoto ma non funziona e non ho potuto il login.

Qualcuno mi potrebbe aiutare?

<?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

Non duplicare. Vuole iniettare, non impedire. – itachi

+0

@itachi in entrambi i casi è troppo localizzato comunque. –

+3

@itachi se leggi l'articolo, la domanda mostra l'iniezione sql e le risposte sono di prevenzione. –

risposta

19

Uno degli esempi più comuni è questa query:

' or '1'='1 

Se si accede a questo come il nome utente e la password in un certo input login unsanitized i cambiamenti di query in questo modo:

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

Questo fa sì che ogni cosa cerchi di essere vera, poiché 1 sarà sempre uguale 1. Il problema con questo metodo è che non consente la selezione di un particolare utente. In questo modo è necessario fare in modo che ignori l'istruzione AND commentandola come mostrato in altri esempi.

8

Se il valore del nome utente è:

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

Poi la query mysql diventa:

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

mysql non consente solo 1 riga per query? – lemondrop

+0

1 riga, è vero ma una riga indica un delimitatore di query: ';' Il '-'- indica che il codice dopo è stato commentato. Quindi in realtà la query superiore è una query. Ho appena rotto le righe per essere il codice leggibile. – Kovge

+0

Ah non lo sapevo. – lemondrop