SQL注入异或注入

异或注入

mySQL在做String类型与数字类型的比较时, 如果字符串前面是数字,转换时就是转换成前面的数字,然后再进行比较. 比如: '1aaa' ==> 1如果字符串前面不是数字, 转换时就将其变成0进行比较.比如: 'aaa' ==>0

在这里插入图片描述

结果是1, 表示true

在这里插入图片描述

结果是0, 表示false

如何进行异或?

异或操作(^)是一种逻辑运算符,用于比较两个二进制位。在异或操作中,如果两个二进制位相同,则结果为0;如果两个二进制位不同,则结果为1。

计算1 ^ 2
1 的二进制表示是 0001,
2 的二进制表示是 0010。

  0001  (1)
  0010  (2)
  -------
  0011  (3)
所以 1 ^ 2 = 3

什么是异或注入?

异或注入说简单一点就是在构造where后面的判断条件时使用 ^(异或符号)来达到sql注入攻击的目的

一、 正常的查询语句及效果

在这里插入图片描述

二、拼接异或条件的查询语句

在这里插入图片描述

在这里插入图片描述

为什么会有这个结果呢?

对于图1

首先: 'Keli'会与0做异或运算,结果为0. 然后查询语句相当于变成了select * from yuanshen where mengde=0, 而 不以数字开头的字符型数据 与 数值数据 进行比较时会转换成0再进行比较。故会将mengde字段中数据为Keli的这一行显示出来。

再向表中添加几条内容再次进行查询

在这里插入图片描述

会查询出mengde字段中数据为0的列,以及开头字母为0的字符串数据的列.

图二原理与图一一样

三、如何使用异或来进行注入?

在这里插入图片描述

查询后面拼接(length(database()) != [表示数据库长度的数] )查询, 若结果为true,则返回1此时会查出mengde字段中数据为1的数据(显示的数据与前面查询的不一样, 页面报错或显示其他内容), 若结果为false,则返回0,此时会查出mengde字段中数据为0的数据(显示的数据与前面查询的一样或者更多, 页面与前面查询的一样或显示更多内容)

四、后续测试

后续测试可以结合ascii函数进行


最后:欢迎大家关注我的公众号
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yliken

你的鼓励就像月亮,照亮了在黑暗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值