【问题标题】:SQL Injection Authentication Bypass Question [duplicate]SQL注入身份验证绕过问题[重复]
【发布时间】:2019-05-05 13:42:56
【问题描述】:

我会简短地说,直奔主题。

我正在测试我在下面编写的 PHP 代码的 SQLI 登录绕过。

if(isset($_POST["login"]) && isset($_POST["password"])){


$sql="select * from users where login='{$_POST["login"]}' and password='{$_POST["password"]}'";


$result=mysqli_query($conn, $sql);


if(mysqli_num_rows($result) != 0)
    echo "<h1>Login Success!</h1>";


else
    echo "<h1>Invalid Login!</h1>";


} 

我使用 admin' -- 作为登录字段,以便在不输入密码的情况下成功绕过登录。

但问题是它不起作用,但是当我尝试使用这个 admin' -- ' -- 时,它却起作用了。

所以问题是那个特定的备忘单如何以及为什么会起作用,而不是第一个?

这个 admin' -- ' -- 可以工作,但这个 admin' 不行 --

当我输入这 2 个备忘单时,这些是服务器端代码。

无效的旁路。

$sql="select * from users where login='admin' --' and password='{$_POST["password"]}'"; 

有效的旁路。

$sql="select * from users where login='admin' -- ' --' and password='{$_POST["password"]}'"; 

只需要澄清或解释第一个备忘单如何以及为什么不起作用,但第二个备忘单起作用。谢谢!

【问题讨论】:

  • 语法高亮显示有明显的语法错误
  • Topicstarter 检查重复链接,我已经非常详细(教程风格)解释了如何为 MySQL 和 MariaDB 进行 SQL 注入。
  • 我在输入 admin 时遇到了这个错误——在登录字段中 警告:mysqli_num_rows() 期望参数 1 是 mysqli_result,布尔值在
  • 该消息意味着您在 SQL 查询中输入了错误的内容,例如您尝试选择一个实际上不存在的列。
  • 为了便于阅读,请全部大写mysql关键字。另外,isset() 可以接收多个参数——你只需要在isset() 调用。

标签: php mysql sql code-injection


【解决方案1】:

您的代码中有一些真正的语法错误:

首先:不要这样做:$sql="select * from users where login='{$_POST["login"]}' and password='{$_POST["password"]}'";

正确的方法是创建一个等于登录名和密码值的变量。示例:

$login=$_POST['login'];
$password=$_POST['password'];

在此之后,您的查询应如下所示:

$sql="select * from users where login='$login' and password='$password'";

【讨论】:

  • 我尝试使用这种方式进行我的 SQL 查询,但它是一样的。 admin' -- 仍然无法绕过登录。
  • 直接包含post变量并没有错。这只是相同语义的另一种方式。无论如何,这两种语法形式都允许 SQL 注入和明文密码。
  • 大家好,显然我找到了解决方案。双破折号运算符注释后面需要一个空格。所以它将是 where login='admin' -- ' 而不是 where login='admin' --' –
  • 我能够在双破折号评论操作符后用空格绕过登录。但问题是为什么这个 SQL 查询可以代替 where login='admin' -- ' --' 对此有什么语法解释吗?
  • 我认为它确实有效,因为它与第一个 SQL 查询相同,而是在双破折号注释运算符之后有空格?这就是我所说的 where login='admin' -- ' ,所以这个 SQL 查询可以在 where login='admin' -- ' --' 如果你仔细观察它在评论操作符后面已经有一个空格.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多