【问题标题】:How do I make my test website vulnerable to SQL injection?如何使我的测试网站易受 SQL 注入攻击?
【发布时间】: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 显示/记录确切的解析错误。

标签: php sql security sql-injection


【解决方案1】:

您收到该警告是因为您注入的值导致查询失败,可能是因为 MySQL 语法错误。

试试这些值:

$password = "' OR 'a'='a";
$username = "admin";

这将给出 SQL 字符串:

SELECT * FROM users WHERE password='' OR 'a'='a' and username='admin'

应该是有效的并返回管理员用户记录。

【讨论】:

  • 不再显示警告,但显示用户名/密码无效。
  • @Enthel 我建议你将 SQL 代码存储到一个变量中以便显示它。
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 2019-08-10
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
相关资源
最近更新 更多