AND 1=1 的 SQL 注入

信息安全 sql注入
2021-08-09 15:35:57

请解释AND 1 = 1SQL注入攻击中“”的含义。这是我大学时的一次练习。例如

select * from user where id = 'smith'' AND 1=1;--  and birthdate = 1970;

或者

select * from user where id = 'smith' and birthdate = 1970 AND 1=1;--;
3个回答

具体问题是 SQL 注入AND 1=1而不是OR 1=1OP所询问的内容很大不同。如果我是你的老师,而你向我提供了 JonathanMueller 的答案,那么你的成绩会很差,因为你不理解这个问题。

AND 1=1通常用于盲 SQL 注入这是当您必须从应用程序的结果中确定是真还是假状态才能确定实际结果是什么时。您不会在结果中列出数据,唯一返回的是变化状态。

如果您尝试使用OR 1=1来利用盲 SQL 注入,您将失败,因为OR 1=1的主要用途是创建一个始终为真的语句,以便从数据库中获取最多的数据或强制一个真语句在登录脚本被利用的情况下。

一个实用的盲 SQL 漏洞利用示例:

我们使用我们的示例:http ://www.site.com/news.php?id=7 让我们测试一下: http ://www.site.com/news.php?id =7 and 1=1 <-- - 这总是正确的,页面加载正常,没关系。

http://www.site.com/news.php?id=7 and 1=2 <--- 这是错误的,所以如果返回页面上缺少某些文本、图片或某些内容,则该站点很容易失明sql注入。

您尝试找出 MySQL 版本的另一个示例:

http://www.site.com/news.php?id=7 and substring(@@version,1,1)=4 如果 MySQL 的版本是 4,这应该返回 TRUE。用 5 替换 4,如果查询返回 TRUE 则版本为 5。

示例取自:http ://www.exploit-db.com/download_pdf/14475

通常,您会看到短语“OR 1=1'”。原因是,如果程序员没有正确处理参数(如用户 id),那么攻击者可以使用 anOR 1=1返回表中的所有数据。

例如,假设我们想要获取名为 smith 的用户的详细信息。查询可能是select * from user where id = '?',其中问号被用户输入的参数替换。如果攻击者通过smith' OR 1=1--,生成的 SQL 将是select * from user where id = 'smith' OR 1=1--'在这种情况下,原始查询中的第二个单引号被跳过,因为它是注释的一部分,并且查询将返回用户表中的所有数据。

举一个 sql 注入的(有点微不足道的,离题的)例子,想象一下这个查询在你的应用程序代码中的某个地方......

select 1 from user where name='[NAME]' and password='[PASS]'

在 Malicious Guy 将上面的命名参数设置为他的选择后,你会得到:

select 1 from user where name='admin' --' and password='[PASS]'
使用以下选择的、未经处理的值:
[NAME]='--' 和密码='[PASS]'
[PASS] 变量的值不重要

因此,假设查询返回 1 表示成功,而返回空集表示无效用户或通过,则将错误地返回 1,从而允许该恶意用户以“admin”帐户登录。