20

ログイン例で PHP/Mysql インジェクションを使用したいのですが、私のコードは以下のとおりです。

のユーザー名と空のパスワードで試しましたanything' --が、うまくいかず、ログインできませんでした。

誰でも私を助けることができますか?

<?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';
    }
}
?>
4

2 に答える 2

24

最も一般的な例の 1 つは、次のクエリです。

' or '1'='1

これをユーザー名とパスワードとしてサニタイズされていないログイン入力に入力すると、クエリは次のように変更されます。

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

これにより、1 は常に 1 になるため、探しているものがすべて真になります。この方法の問題は、特定のユーザーを選択できないことです。これを行うには、他の例で見られるように、コメント アウトして AND ステートメントを無視する必要があります。

于 2013-04-02T07:12:01.140 に答える
8

ユーザー名の値が次の場合:

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

次に、mysql クエリは次のようになります。

select * 
from zend_adminlist 
where user_name = '1' OR 1 LIMIT 1; --' and password = '$pass'
于 2013-04-02T07:13:26.753 に答える