gpt4 book ai didi

php - SQL注入(inject)测试-mysql_query

转载 作者:行者123 更新时间:2023-11-29 13:31:53 24 4
gpt4 key购买 nike

我正在为我的同学创建一个测试项目,以展示带有未经检查的变量的 php 代码是如何危险的。我正在使用已弃用的 mysql_* 函数和一个包含 2 个表的简单数据库:

users  
data

在用户中我只有管理员用户。

我创建了一个简单的 html 表单:

    <form action="login" method="POST">
username: <input type="text" name="username">
password: <input type="text" name="password">
<input type="submit" value="login">
</form>

login.php 页面只需获取发布数据并构建查询,如下所示:

$uname = strtolower(trim($_POST['username']));
$passw = strtolower(trim($_POST['password']));

$result = mysql_query("
SELECT *
FROM users
WHERE username='".$uname."' and password=MD5('".$passw."')"
);
if(mysql_num_rows($result) != 1){
echo "Non valid";
}else{
echo "Logged in";
}

这是我在用户名字段中的输入:

&#39; or 1=1 --&#32;

应该生成如下查询:

SELECT * FROM users WHERE username='' or 1=1 -- ' and password=MD5('') 

如果我在 SequelPro 或 PhpMyAdmin 上运行此查询,查询会给出表的第一行,因此它可以工作。但如果我提交表单,结果将是无效

我还尝试将密码字段与此输入一起使用:

&#39;) or 1=1 --&#32;

这是生成的查询:

SELECT * FROM users WHERE username='' and password=MD5('') or 1=1 -- ') 

但结果是一样的,它在 SequelPro 上有效,但在表单中无效。

我认为 mysql_query 函数无法识别 -- 注释。我说得对吗?
我做错了什么?

最佳答案

在用户名字段中尝试此操作:

' or 1=1 or '

然后输入您想要的密码。不要忘记 ' 后面的空格。它会将你的代码变成这样:

mysql_query("select * from users where username='' or 1=1 or '' and 
password=".md5('$pass'))

并且它总是返回 true。

它必须有效,如果无效,这样做:

echo "
SELECT *
FROM users
WHERE username='".$uname."' and password=MD5('".$passw."')";

并将结果作为评论发布给我,也许我可以帮助你

关于php - SQL注入(inject)测试-mysql_query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19332925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com