如何使我的测试网站易受 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 注入攻击?的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入易受攻击?

易受 SQL 注入攻击

ruby on rails sql 注入 LIKE '%#argument% 易受攻击?

防止 SQL 注入 - PDO,mysqli [重复]

SQL注入初尝

手抄:测试网站登录页面是否存在SQL注入攻击