渗透测试|sql注入绕WAF的N种姿势

渗透测试|sql注入绕WAF的N种姿势

d5c2bd38068b1282eddd1f8f21ce9f53-1

关于本文

简述

WAF,全称:Web Application Firewall,也称为网站应用级入侵防御系统。大白话的说,就是利用它内设的安全策略来为web应用程序提供保护的一款产品,那么对于我们来说,如果突破它的安全策略就显得尤为重要。作为渗透测试人员都知道,在渗透的过程当中,最核心的就是构造自己的输入,然后分析目标返回的结果,从而判断出是否存在相应的问题。那么WAF的基础检测机制也基于此——检测用户输入的内容,如果输入的内容中包含了一些危险字符,或者说有威胁性的字符,那么WAF就会对此进行拦截。所以说,改变我们输入的内容形式,就是突破WAF的关键点。

sql注入绕WAF的N种姿势

1.双写绕过

· 有些waf会对关键词进行过滤,若只过滤1次,则可以双写绕过。

986629e96dcaa919c165c23cf059bc81
2.等号like绕过

· 有的waf会对等于号进行拦截和过滤。

8349654776cc9a6806c9e5b5aaaf4ef1
3.order by 绕过

· 当 order by 被过滤时,可以使用 into 变量名进行代替。

af2080aa5f263d765288294f1b889f05
4.and/or绕过

· 主流的 waf 都会对and 、or、xor进行拦截。替代字符:and 等于&&、or 等于 ||、not 等于 !、xor 等于|

1233eccbb2aab1885462f63124a2bc1b
 

5.union select 绕过

· waf 会针对union select 进行拦截。

1. uNIoN sel<>ect  # 程序过滤<>为空 脚本处理

2. uNi/**/on sele/**/ct  # 程序过滤/**/为空

3. uNIoN /*!%53eLEct*/  # url 编码与内联注释

4. uNIoN se%0blect  # 使用空格绕过

5. uNIoN sele%ct  # 使用百分号绕过

6. uNIoN %53eLEct # 编码绕过

7. uNIoN sELecT 1,2 #大小写绕过

8. uNIoN all select 1,2 # ALL绕过

9. uNIoN DISTINCT select 1,2 # 去重复DISTINCT 绕过

10. null+UNION+SELECT+1,2    # 加号代替空格绕过

11. /*!union*//*!select*/1,2 # 内联注释绕过

12. /*!50000union*//*!50000select*/1,2     # 内联注释绕过

13. uNIoN/**/select/**/1,2  # 注释代替空格绕过

6.大小写绕过

· 对关键词设置为大小写即可。 ps:图中冒号起闭合作用,%00起截断作用,都和注释含义类似。

ff37b79fe247111ff3c8de5229a49fa7
 

7.逗号绕过

· 有些防注入脚本都会逗号进行拦截。变换函数的形式,比如 substr(database(),1,1)—> substr(database() from 1 for 1) ;limit 0,1 —> limit 1 offset 0

1cbb888e8d8c496fa71d84acd99cf013
8.等函数替换

· 当常用函数被waf拦截时,可以使用偏僻函数或者功能相同的其他函数,比如substr()函数被拦截,就可以使用mid函数;报错注入的updatexml()用polygon()函数替换。

e5a252e059aa5d56ded708de44da7579
9.浮点数绕过

· 通过浮点数的形式从而绕过。id=1 union select —> id=1.0union select —> id=1E0union select

d535d2a5a24ef80d8a7eec9421babf7a
 

10.添加库名绕过

· 有些 waf 的拦截规则 并不会拦截[库名].[表名]这种模式。

98032f747c712d6b4e97922ee2079728
 

11.ascii编码绕过

· waf有的时候会对截取的字符拦截,可以使用ascii编码对比进行绕过。

b6e6792aecaaeee74ad8dc9dad12faba
12.base64编码绕过

· waf有的时候会对截取的字符拦截,可以将注入的语句进行base64编码进行绕过

11e50d69c19f90704fe2f0875f774001
 

13.空格字符绕过

· 空格字符可以混淆WAF的检测机制。%20=%a0=%09=%0a=0b=%0c=%0d=+

153a4805d86d8ca442be3532232832f8
14.引号字符绕过

· 若单引号被拦截,则使用双引号,若都被拦截,就尝试使用hex六进制编码,也可以考虑宽字节注入绕过

6b0472ed2963eb0a05af6d06a92222c8
 

15.参数污染

· 在 php 语言中 id=1&id=2 后面的值会自动覆盖前面的值,不同的语言有不同的特性。可以利用这点绕过一 些 waf 的拦截。以下是其他污染特性

026bf1a44dd76a5e637c5b763d3fc0d0
 

· 以下是其他污染特性:

f3a6afa587b5c9d15fbd21d93f993dd1
 

16.注释绕过

· 内联注释:是Mysql为了保持与其他数据的兼容,将Mysql中特有的语句放在/!/中这些语句在不兼容的数据库中不执行,而在Mysql自身却能识别执行。例如:/!50001/表示数据库版本>=5.00.01时,/!50001 中间的语句才能被执行 /eb1136117c63dec625b0997c2f9f47fc

17.脏数据溢出绕过

· 数据太多超过waf检测范围,然后造成绕过,前面填垃圾数据后面填要注入的SQL语句,如果是GET传参,参数值超过GET所能运行的长度可能无法利用,所以最好是POST传参(前提是对方支持POST传参)

becec039490374e814bf6cf9344774b5
 

18.pipline绕过

· http协议是由tcp 协议封装而来,当浏览器发起一个 http 请求时,浏览器先和服务器建立起连接tcp连接,然后发http 数据包,其中包含了一个Connection字段,一般值为close,apache等容器根据这个字段决定是保持该tcp连接或断开。当发送的内容太大,超过一个http包容量,需要分多次发送时,值会变成keep-alive,即本次发起的http请求所建立的tcp连接不断开,直到所发送内容结束Connection为close为止。用burpsuite抓包提交复制整个包信息放在第一个包最后,有些waf会匹配第二个包的正属于正常参,不会对第一个包的参数进行检测,这样就可以绕过一些waf拦截。

d30c683f672edf7d188882eef32dc960
 

19.分块传输绕过

· 分块传输编码是只在HTTP协议1.1版本中提供的一种数据传送机制。以往HTTP的应答中数据是整个一起发送的,并在应答头里Content-Length字段标识了数据的长度,以便客户端知道应答消息的结束。分块传输编码允许服务器在最后发送消息头字段。例如在头中添加散列签名。对于压缩传输传输而言,可以一边压缩一边传输,将本该一次性传输的完整数据分块传输,从而绕过waf的检测。

99302e6c2ba5ee42ed1406fee6b50bb4
20.参数拆分绕过

· 配合多个参数的传参,将注入的内容拼接到同一条 SQL 语句中,可以将注入语句分割插入绕过waf拦截。

ffbc90ffb40ea951f8437b20b03494fe
 

21.GET/POST转换绕过

· waf 在对危险字符进行检测的时候,分别为 post 请求和 get 请求设定了不同的匹配规则,请求被拦截,变 换请求方式有几率能绕过检测。

e48b8575a95574251df5c16d40233613
22.白名单绕过

· 有些 WAF 会自带一些文件白名单,对于白名单 waf 不会拦截任何操作,比如白名单目录,白名单文件等等,所以可以利用这个特点,可以进行突破。

55509aca61e21207f6c199ad3211901d
 

23.花括号绕过

· 花括号,左边是注释的内容,这样的话可以过一些waf的拦截。

0859213f96619985d50b4f69b38c98bb
 

24.反引号绕过

– 特殊符号反引号也能绕过waf

101fc13357040ecb4bd2e51bda90b44a2022010403480188

本文来自投稿,不代表安强科技社区立场,如若转载,请注明出处:https://community.anqiangkj.com/archives/2572

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年1月5日 下午12:09
下一篇 2022年1月5日 下午12:09

相关推荐

发表回复

您的电子邮箱地址不会被公开。