SQL注入绕过方法

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")

 

posted @ 2020-05-25 16:46  spirit_boy  阅读(1522)  评论(0编辑  收藏  举报