SQL注入的绕过技术

SQL注入的绕过技术

大小写绕过

SQL语句是不区分大小写的,如果过滤器通过关键字进行过滤并没有识别大小写,我们就可以使用大小写进行绕过,对特殊字符进行大小写混写
select * from users where id=1 AnD 1=1;
and与or

过滤注释

– # 注释不能用导致了什么问题?
会导致无法注释后面的’ 导致SQL语句报错,注入后无法正常的执行
$reg = "/#/"; 规则1
$reg1 = "/--/"; 规则 2
$replace = "";;“匹配到之后替换为什么内容?
$id = preg replace(/#/, "", $id);
$id = preg replace(/--/. "", $id);
and
preg_replace(mixed $pattern,mixed $replacement, mixed $subject):执行一个正则表达式的查找和替换``
正常闭合SQL语句让SQL语句可以成功执行

双写绕过

$id= preg_replace('/or/i',"", $id);
$id= preg_replace('/AND/i',"", $id);
return $id;
只过滤一遍,过滤了关键词and or
如果 or可以替换为 ‘’ ‘’,可以写为 oorr 中间的替换为’’ ‘’,外侧字母为or
and替换为anandd

等价替换绕过

and && 如果报错可以采用编码
or ||
异或
^ xor
思路:寻找能够替代的方法


空格被过滤怎么处理?

id=1’unionselect 空格被过滤后,输入的语句无法识别
空格 %20
用户输入空格 URL内是%20 服务器收到%20 还原成空格 代码处理
1.使用+替代
2.%09 %20 %0A %0B %0C %0D %A0,经测试后 %0B ,%A0成功纪律更大
3.注释可以等价空格 /注释内容/ 把20%替换为/**/


MySQL宽字符绕过

字符编码 默认GBK 一个字符用两个字节
UTF8 一个字符默认三个字节
PHP和MySQL大部分情况默认GBK或UTF8

宽字节注入存在场景限制

1.PHP和MySQL编码为GBK
2.addslashes()转义的SQL注入
输入 1'union
addslashes(1'union)
经过转义后为1\'unionSQL注入报错
由于\是一个字节,在前面再添加一个编码两个字节组成一个汉字
\ %5C
df5c
id=‘運’ union select 1,2,3
区间是81-FE ascii码大于127
81’
81’ 815c’


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值