对字符进行修改从而绕过

基于代码审计和部分sql相关的绕过:

  1. or
  2. ||
  3. %
  4. ^
  5. 0b
  6. ~~

题目类型如下:
在这里插入图片描述以下分为6个方式来讨论该类型:

第一题:无绕过

对代码进行分析:需要GET一个ID<999的参数,但是flag需要id=1000才能获取。这里我们还可以看到他执行的是SQL语句,因此大概率是SQL注入。
我们随便输入一些ID的值得到以下内容:
ID=1
在这里插入图片描述ID=2

在这里插入图片描述
为什么ID=2之后都没有结果呢?当然是因为数据库里面查询不到这个值,而学习过SQL注入的同学应该知道,order by 字段与 union select字段有几分相似,因此可以确定这是SQL注入 拼接语句,那么我们只需要拼接以下即可

id=2 or id=1000
执行的语句则是:select* from article where id=2 or id=1000 order by limit 1 因为id=2无内容,所以查询id=1000的值;

那么你是否有下面这个疑问:传入了 id=2 or id=1000 这么多数据是怎么通过IF判断的?

如下,原语句使用了intval函数,intval函数从数字开始读取,读取到字母或者说是非数字的时候截断。因此传入的id被读取为:2 就饶过了

第二题:正则字符:禁止使用OR字段(在这里不代码了)其余源代码不变;

OR的字符型是|| ,因此直接使用这个即可

第三题:正则字符:禁止使用OR 或者 ||

OR || 行不通,那么试试url字符的or不就好了

第四题:正则字符:禁止使用OR || %

那么这个时候可以考虑 位运算符 ^
但是这个地方的话呢,我们就不考虑前面的思路了,前面几道题的思路都是,通过OR拼接字符串的方式,那么这里我们就不采用拼接字符串的方式了,采用直接构造1000

第四题如下: 位运算符:位相同则为0 不同则为1;
如下 0 1 0 0 0 0 0 1 ^0 1 0 1 1 0 1 0二进制编码的10进制分别是:65和90 但是通过 运算之后呢得到的是27
因此 我们要得到一个1000 就可以这样去构造即可
答案:144^888 (这样也满足了 IF语句)

第五题:正则绕过过滤了 or 、||、%、^

这里还是考虑位运算符:~(取反)
playload: ~~1000 1000经过两次取反之后是小于999的,所以可以通过IF语句,而再执行的时候貌似没有被执行~

第六题:绕过了以上各种符号

那么我们可以使用hex编码或者0b即可
使用如下:
?id=hex(3e8) 1000的hex就是3e8
?id=0b1111101000 (IF里面只会读取id=0 而sql语句里面则执行整个命令)

结语: 以上绕过方式可相互利用,且不止一种,祝大家学习顺利,工作进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值