SQL盲注(异或注入)

做题时偶然遇到一道sql注入很多关键字都过滤了看wp说是异或注入遂研究了一下

目录

什么是异或,异或是干什么的?

 基于这个基础做一下sql  labs  11关



什么是异或,异或是干什么的?

异或(XOR),在数学和逻辑运算中,是一种二元运算,表示为“⊕”或“^”。它的特点是:

  • 如果两个比较的位不同,则结果为1(真)。
  • 如果两个比较的位相同,则结果为0(假)。

在逻辑运算中,异或可以这样理解:

  • 真 XOR 真 = 假
  • 真 XOR 假 = 真
  • 假 XOR 真 = 真
  • 假 XOR 假 = 假

 而这个真假是sql注入里面可以利用的以随便一张表为例(这里为pikachu的user表为例)

我们先看一下表里都有什么内容

SQL盲注(异或注入)_第1张图片有几个column

我们接下来写一个sql查询语句

SELECT * from pikachu.users where username=1^1;

这一句不是查询username=0的应该什么都查不出来的因为没有匹配的但是他查询出来所有了

SQL盲注(异或注入)_第2张图片

 为什么后面异或后是0    而username column里面不都是字符串么比较不出来么

在 MySQL 中,如果 username 是字符串类型,而你尝试使用整数值进行比较,MySQL 会尝试将字符串转换为整数进行隐式转换。MySQL在进行隐式转换时遵循一定的规则。当字符串转换为整数时,转换的规则是从字符串的左侧开始向右转换,遇到非数字就停止;如果第一个字符就是非数字,最后的结果就是0。这意味着,如果password字段中存储的值是以数字开头的字符串,那么当比较操作中使用整数时,数据库会将这个整数转换为字符串,并与password字段中的字符串进行比较,比较时会查看字符串中相应位置的字符。

SQL盲注(异或注入)_第3张图片SQL盲注(异或注入)_第4张图片

 基于这个基础做一下SQL  labs  11关

SQL盲注(异或注入)_第5张图片

知道账号那密码用异或万能密码绕过

如果不知道账号     可以账号密码都用异或万能密码绕过

SQL盲注(异或注入)_第6张图片这样就过滤了or也能万能密码绕过了

 这里要讲一下原理

因为猜测这种语句是

select * from users where username='' and password=''
select * from users where username='admin' and password=' 1'^'1    '

 因为password应该是字符串类型的   而后面的进行异或之后是0    整型的   password会进行隐式转换只要密码开头不是数字的就会转换成0   所以可以万能密码绕过

基于这个原理写个payload

SQL盲注(异或注入)_第7张图片

  

passwd=1'^(if(ascii(   substr(database(),1,1 ) )=115,1,0     ))^'0&submit=Submit&uname=admin

这里我们用了3个异或   1'^(payload)^'0     因为异或默认从左到有   payload里面用布尔盲注的句子  可以放在中间来躲避引号

这是在过滤 or   时用的盲注 

如此就讲完了   

总结

  1. 当应用程序对输入进行了编码或过滤,使得直接的SQL注入变得困难时:攻击者可能会使用异或操作来绕过简单的输入过滤或编码措施。由于异或操作的对称性,攻击者可以构造一个注入语句,使其在经过异或操作后变为无害的语句,但在数据库执行时,由于异或操作的可逆性,能够恢复出攻击者想要执行的恶意SQL语句。

  2. 在布尔型盲注中:当攻击者无法直接看到SQL查询的结果,但是可以通过应用程序的行为(如延迟响应)来判断查询的真假时,异或注入可以用来创建一个条件,这个条件在特定情况下为真,在其他情况下为假。例如,攻击者可能会尝试通过异或操作来确定数据库中某个字段的值。

  3. 在时间盲注中:当攻击者无法直接看到查询结果,但是可以通过查询执行的时间来判断结果时,异或注入可以用来创建一个条件,这个条件在特定情况下导致查询执行时间变长,从而泄露信息。

  4. 在防御机制较弱的环境中:在一些环境中,如果应用程序没有正确地使用参数化查询或者ORM工具来防止SQL注入,攻击者可能会利用异或注入作为一种攻击手段。

异或注入是一种较为高级的技术,需要攻击者对SQL注入有深入的理解和一定的技术能力。它通常不是首选的攻击手段,而是在其他注入技术不可行时的替代方案。在过滤很多关键词的情况下可以试一试  过滤  union  select  or and   报错的关键字

当然高效的盲注少不了脚本的编写  两者结合才能高效。

你可能感兴趣的:(SQL盲注(异或注入))