SQL注入绕过
1. 大小写绕过
SQL语句对大小写不敏感、开发人员做的黑名单过滤过于简单。
2. 双写绕过
双学绕过的原理是后台利用正则匹配到敏感词将其替换为空。例如:selselectect -> select
3. 空格过滤
如果遇到空格被过滤了,主要的几个思路都是想办法找一个代替品。能替换空格的有以下几个:
注释绕过(/**/):正常情况下只要这个没有被过滤就一定能替换
括号过滤():将所有的关键字都用括号括起来就可以达到替换空格分隔的作用
url编码:用%20替换空格或者用其它的url编码,%09、%0a、%0b、%0c、%0d 、%a0、%00
回车换行、Tab替换:回车换行也可以用做覆盖功能替换空格。
4. 注释过滤
如果(--+)注释被过滤,可以使用#、;%00、--(两个减号一个空格)
用其他数据闭合:
select * from test where id='2'
===>
select * from test where id='2' or '2'='2'
5. 引号过滤
无法出现引号又必须要用引号,可以将参数的值和单引号或者双引号绑定在一起然后转换为16进制最后在输入时在前加0x。
6. 逗号过滤
如果在mid(database(),1,1)、substr(database(),1,1)、substring(database(),1,1)中的逗号过滤,可以使用substr(database() from 1 for 1)、mid(database() from 1 for 2)
limit 0,1
可以使用offset方法来替换逗号,例如:
select * from user limit 0,1
==>
select * from user limit 1 offset 0;
如果使用offset,原本逗号前后的数据要互相交换一下
union
使用了join替换了逗号。
7. 等号过滤
只过滤等号可以使用以下代替
<>:不等号的意思!=
regexp、like、rlike
8. 逻辑运算符过滤
过滤了"or、and、xor、not"可以使用相对应替换:"&&、||、|、!"