如何使我的测试网站易受 SQL 注入攻击?
Posted
技术标签:
【中文标题】如何使我的测试网站易受 SQL 注入攻击?【英文标题】:How do I make my test website vulnerable to SQL injection? 【发布时间】:2019-02-16 05:35:35 【问题描述】:这是我的 login.php 代码的 sn-p:
if (isset($_POST['login']))
$username = $_POST['user'];
$password = $_POST['pass'];
$query = mysqli_query($con, "SELECT * FROM users WHERE password='$password' and username='$username'");
$row = mysqli_fetch_array($query);
if ($row > 0)
$_SESSION['user_id']=$row['user_id'];
header('location:home.php');
else
echo 'Invalid Username and Password Combination';
?>
登录有效,但是当我尝试绕过身份验证/登录时 通过输入 ' 或 ''=' 会返回此错误
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\x\x\x\x.php on line 32
当我输入数据库中的有效用户时,登录有效: 样本
Username: admin
Password: admin
我想做的是通过输入(sql注入)绕过登录
Username: admin
Password: **' ANYTHING ''='**
但随后输入' ANYTHING ''='
返回上述错误。
【问题讨论】:
两者,我如何修复这个错误,以便 sql 注入绕过将起作用。当我输入有效的用户名/密码时,登录有效,但当我输入 ' 或 ''=' 绕过登录时,它会返回该错误。 您能否编辑问题以准确显示您为$username
和$password
使用的值?
生成的字符串必须是语法上有效的 SQL 代码。您可以configure mysqli 显示/记录确切的解析错误。
【参考方案1】:
您收到该警告是因为您注入的值导致查询失败,可能是因为 MySQL 语法错误。
试试这些值:
$password = "' OR 'a'='a";
$username = "admin";
这将给出 SQL 字符串:
SELECT * FROM users WHERE password='' OR 'a'='a' and username='admin'
应该是有效的并返回管理员用户记录。
【讨论】:
不再显示警告,但显示用户名/密码无效。 @Enthel 我建议你将 SQL 代码存储到一个变量中以便显示它。以上是关于如何使我的测试网站易受 SQL 注入攻击?的主要内容,如果未能解决你的问题,请参考以下文章