1.注释符绕过
--注释内容
#注释内容
/*注释内容*/
;
2.大小写绕过
常用与waf的正则对大小写不敏感的情况下
例:waf过滤了关键字select,可以用Select绕过过滤
3.内联注释绕过
内联注释就是把一些特有的仅在MySQL上的语句放在/*!...*/中,这些语句如果在其它数据库中不会被执行,但在MySQL中会执行
4.双写关键字绕过
在某一些简单的waf,将关键字select等只使用replace()函数置换为空,这个时候可以使用双写关键字绕过
例:select --> seleselectct 在经过waf的处理之后变成select,达到绕过的目的
5.特殊编码绕过
把需要注入的语句换成其他编码形式,如:十六进制、ASCII编码
6.空格过滤绕过
一般用下面的方法取代空格,绕过空格过滤:
/**/
()
回车(url编码中的%0a)
`(tab键上面的按钮)
tab
两个空格
7.过滤or and xor not绕过
and = &&
or = ||
xor = | 异或关系
not = !
8.过滤等号=绕过
1.不加通配符的like、rlike执行的效果和 = 一致
2.regexp操作符用于配匹正则表达式, id regexp 1 与 id = 1 效果一样
3.使用大小于号来绕过,id > 1 and id < 3 与 id = 1 效果一样
4.<>等价于!= 所以在前面加一个!结果就是等号 !(id<>1) 与 id = 1 效果一样
9.过滤大小于号绕过
1.greates(n1,n2,n3,...): 返回n中的最大值
2.least(n1,n2,n3,...): 返回n中的最小值
3.strcmp(str1,str2): 若所有的字符串均相同,则返回STRCMP(),若根据当前分类次序,第一个参数小于第二个参数,则返回-1,其他情况返回1
4.in 关键字,str1 in str2 字符串1是否在字符串2中
5.between a and b :范围在a-b之间 (也可用于 = 绕过:id between 1 and 1 与 id = 1 效果相同)
10.过滤引号绕过
1.使用十六进制
2.宽字节
过滤单引号时 %bf%27 %df%27 %aa%27
%df\' = %df%5c%27 = 縗'
11.过滤逗号绕过
SQL盲注时常用到的函数 substr(),mid(),limit()等,如果waf过滤了逗号,并且只能盲注,那我们就要采取一些其他的函数代替了:
substr("string",pos,len) 等价于 substr("string" from pos for len)
union select 1,2,3 等价于 union select * from (select 1)a join (select 2)b join(select 3)c
select ascii(substr(user(),1,1))=114 等价于 select user() like"%r"
limit 2,1 等价于 limit 1 offset 2
12.过滤函数绕过
sleep() --> benchmark(x,y) 第一个参数是执行次数,第二个参数是执行的表达式
ascii() --> hex()、bin() 替换之后再使用对应的进制转string即可
group_concat("str1", "," ,"str2") --> concat_ws("," , "str1" , "str2")