sql注入waf绕过方式小结

绕过waf过滤的字符以突破waf,也可以通过waf缺陷,解析机制等方式突破waf。

1、脏数据绕过

即传入一段长数据使waf失效,某些waf处理POST的数据时,只会检测开头的8K,后面选择全部放过。

2、HTTP参数污染

由于waf与后端对相同HTTP参数处理方式不同,导致waf被绕过

如图,在php中会处理最后一个数据,也就是这里的id=2,通过在最后一个参数中传入注入语句绕过waf的过滤

3、并发请求绕过

对请求进行并发,攻击请求会被负载均衡调度到不同节点,导致某些请求绕过了waf的拦截

4、数据格式解析绕过

除了图中提到的方式外,一些其他方式也可能绕过waf,例如将传入json数据,将其修改为HTTP请求,或者修改content-type等方式(当然是在应用能够正常解析的前提下)。

5、分块传输绕过

这个应该是最近听的比较多而且比较有效的一种绕过方式
在HTTP请求头加入 Transfer-Encoding: chunked,同时对数据进行分块传输
例如注入语句为id=1 and 1=1,将请求修改为分块传输的方式

注意:0代表编码结束,在0后面需要加两个空行代表分块传入的结束
为此有师傅编写了专门的插件:https://github.com/c0ny1/chunked-coding-converter

6、利用容器特性绕过

在IIS+ASP的环境中,会忽略%,以此特性来绕过waf

在waf看来传入的数据为http://www.test.com/test.asp?id=1 union all se%lect 1,2,3,4 fro%m adm%in
由于检测的关键词被隔断导致不会被拦截,而且传入后端服务器的数据为http://www.test.com/test.asp?id=1 union all select 1,2,3,4 from admin,从而绕过了waf。

7、编码绕过

对请求数据进行编码,例如url编码,Unicode编码,base64编码 等,如果waf对数据不能有效的解码,而应用后端能够正常解码,就可以绕过waf

例如最常见的url编码,对数据进行二次url编码,waf进行一次解码并不能解析到有效的数据,而后端在进行解码时传入的为有效的恶意数据。

8、ip伪造

由于白名单机制,waf可能会对某些ip发的请求不进行拦截,通过ip伪造绕过waf的限制

常见的伪造IP请求头
X-Forwarded-For:127.0.0.1
X-Forwarded-Host:127.0.0.1
X-Client-IP:127.0.0.1
X-remote-IP:127.0.0.1
X-remote-addr:127.0.0.1
True-Client-IP:127.0.0.1
X-Client-IP:127.0.0.1
Client-IP:127.0.0.1
X-Real-IP:127.0.0.1

9、HTTP请求方式绕过(cookie注入)

POST GET传数据都会被waf拦截,将请求方式修改为OPTIONS,HEAD等成功绕过了waf(当然是在应用允许使用这些请求方式的前提下)

10、emoji绕过waf
11、大小写、双写、内联注释绕过waf
12、空格、换行、%00、取余函数mod 绕过waf
13、中间件特性绕过waf
14、关键字替换、等价函数 绕过waf
15、全局替换绕过

16、宽字节注入 

需要数据库是gbk编码。

posted @ 2023-04-11 20:48  hello_bao  阅读(760)  评论(0)    收藏  举报