哪些SQL注入可以绕过此身份验证页面



我正在构建一个登录页面来演示SQL注入。我尽了最大的努力;简单的";登录。我一直在使用诸如1' or '1' = '1之类的凭据作为username&密码,并获得";不";消息,这意味着它只是将其识别为不正确的用户&通过。我还尝试过用1' or '1' = '1'))/*作为用户名,foo作为密码登录,但登录时出现500 Server错误。

  • 我是否错误地实现了SQL注入
  • 我需要";伪";关闭登录实现

在哪里进行SQL注入测试:https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/07-Input_Validation_Testing/05-Testing_for_SQL_Injection

这是我的身份验证页面:

<?php
include('config.php');
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM Users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, sql);
$row = mysqli_fetch_array($result);
$count = mysqli_num_rows($result);
if($count == 1) {
echo "yay";
} else {
echo "nay";
}
?> 

我的问题可能是,我试图采取输入的用户名&密码并与存储在我的数据库中的数据进行比较,这就是为什么它只是将注入识别为不正确的用户名&密码。

您的代码正在检查if($count == 1)。这意味着只有当SQL查询正好返回1条记录时,身份验证才会成功。在这种情况下,简单1' OR '1'='1'的问题是它匹配表中的每一条记录,因此它返回所有记录。使用该有效负载,如果并且仅当表中正好包含一条记录时,注入才会成功。请尝试使用1' OR 1=1 LIMIT 1; --将返回的行数限制为一行。

最新更新