SQL注入绕过

文章目录

  • 什么是绕过
    • 注释符号绕过
    • 双写绕过
    • 大小写绕过
    • 空格绕过
    • 等号绕过
    • 特殊符号绕过
    • 内联注释绕过
    • 参数污染绕过
    • 宽字节注入
  • 小结

什么是绕过

个人理解是系统或者安全软件为了避免攻击者篡改一些参数来获取数据,就会自动过滤一些篡改信息的关键词。但系统和软件终究是人编写出来的,攻击者们还是有各种各样的方法绕过安全点的检测来达到自己的目的。
 

注释符号绕过

MySQL中常见的注释符有这么几个:

#注释内容
– 注释内容
/* 注释内容 */

其中 - - 要注意跟后面的注释内容有一个空格

(接下来的展示都用mysql命令行展示)
实例:
SQL注入绕过_第1张图片
SQL注入绕过_第2张图片
 

双写绕过

经典的,例如联合查询中 union select可能都会被waf过滤掉,但是它只会过滤一次啊,那我们多输入一次就行了。
SQL注入绕过_第3张图片
这里是没有过滤的所以会显示语法错误,实际情况如果发生过滤可以这么写。或者ununionion seleselectct 这种的都行,因为它只会过滤一次关键字。
 

大小写绕过

有的waf对于大小写不敏感,可以利用
实例:
SQL注入绕过_第4张图片

 

空格绕过

空格可以由底下的符号替代:

/**/
%09、%0a、%0d、%0b等
括号绕过空格
+号、tab、两个空格、反引号等

实例:
SQL注入绕过_第5张图片
SQL注入绕过_第6张图片

 

等号绕过

可以使用like,rlike,regexp代替=号
也可以使用<>绕过,实际上<>等价于 ! = ,所以我们在前面再加一个 ! 就是双重否定了
实例:
SQL注入绕过_第7张图片
SQL注入绕过_第8张图片

 

特殊符号绕过

and 替换为 &&
not 替换为 !
or 替换为 ||
异或替换为 xor

实例:
SQL注入绕过_第9张图片
 

内联注释绕过

内联注释就是把一些特有的仅在MYSQL上的语句放在 /* !..*/ 中,这样这些语句如果在其它数据库中是不会被执行,但在MYSQL中会执行。前面一篇文章有提过一嘴
实例:
SQL注入绕过_第10张图片

 

参数污染绕过

提供多个parameter= value的值集来混淆绕过WAF。鉴于 http://example.com?id=1&?id=’ 或’1’=‘1’ - '在某些情况下(例如使用Apache / PHP),应用程序将仅解析最后一个(第二个) id =, waf只解析第一个id=。这似乎是一个合理的请求,但应用程序仍然接收并处理恶意输入。今天的大多数waf都不容易受到HTTP参数污染(HPP)的影响,但仍然值得一试。
实例:
SQL注入绕过_第11张图片

 

宽字节注入

我们都知道在字符型注入中要先用单引号闭合下再输入sql命令,详见SQL注入闭合方式。但是如果程序中在我们输入的单引号之前加上个反斜杠比如: ’ 。这样的话这个单引号就是个字符了,意思就是斜杠与单引号的结合使得单引号转义,没有单引号闭合的作用,就起到了防护的作用。
为了突破这个防护,我们可以使用宽字节注入的方式来进行突破,使用:

%df ’

当我们在单引号之前加上%df的时候,也就是输入%df ’ 这样传入到数据库中就会变成:

%df%5c ’

原理是在GBK编码中,%df与 \ 的转义符%5c结合会编码成一个汉字,这样就使得 ’ 逃逸了。此外 %DE%5C,%E0%5C也都是可以的。

 

小结

以上介绍的知识我目前掌握的一些绕过方式,其中编码(16进制编码,Unicode编码)绕过,过滤引号逗号等没有介绍。具体可以参考:
sql注入绕过方法总结
SQL注入9种绕过WAF方法

你可能感兴趣的:(网络安全,web安全,sql)