任意文件上传之绕过云waf+本地防火墙双重防护
字数 1133 2025-08-04 00:38:02
绕过云WAF+本地防火墙双重防护的文件上传技术详解
1. 初始发现与WAF拦截分析
- 发现一个可直接上传任意文件的漏洞点
- 直接上传PHP文件被云WAF拦截
- 初步绕过尝试:使用换行+chunk编码可过后缀检测
- 内容检测WAF特点:同时检测
<?和()的存在- 如
<?phpinfo();会被拦截 - 单独存在
<?或()可通过内容检测
- 如
2. Host碰撞绕过云WAF
2.1 原理分析
- 目标站点存在跳转到其他IP的超链接
- 推测服务器可能部署在同一C段的其他IP上
- 通过Host碰撞技术寻找真实IP
2.2 实施步骤
- 使用Host碰撞脚本扫描目标C段IP
- 验证返回的真实IP
- 直接访问真实IP绕过CDN和云WAF
- 此时只需换行(无需chunk编码)即可过后缀检测
3. 绕过本地防火墙内容检测
3.1 初始尝试
- 尝试
Accept-Encoding: deflate(已过时) - 尝试
Accept-Encoding: gzip(失败)
3.2 HTTP编码原理
- Accept-Encoding: 客户端声明支持的编码类型
- Content-Encoding: 服务器响应的内容编码类型
- 两者都会影响数据传输格式和压缩算法
3.3 成功绕过方法
- 使用
Content-Encoding: deflate头绕过本地防火墙 Content-Encoding: gzip同样有效- 注意:未找到真实IP时此方法无效
4. 完整绕过流程总结
-
Host碰撞找真实IP
- 绕过云WAF的防护
- 使后续请求不经过CDN
-
内容编码绕过
- 添加
Content-Encoding头 - 绕过本地防火墙的内容检测机制
- 添加
-
文件上传构造
- 使用换行符处理文件后缀
- 避免同时使用
<?和()的PHP代码
5. 技术要点补充
-
Host碰撞技术
- 适用于隐藏真实IP的站点
- 特别适合政府、企业等喜欢分散部署的C段服务器
-
内容编码绕过
- 利用了防火墙对编码内容检测的盲区
- 需要服务器支持相应的编码解码
-
后续问题
- 即使上传成功,可能面临
disable_function限制 - 需要进一步研究绕过PHP安全限制的方法
- 即使上传成功,可能面临
6. 防御建议
-
对管理员:
- 严格控制文件上传功能
- 实施多层防护机制
- 定期检查服务器真实IP暴露情况
-
对开发者:
- 实现文件内容严格检测
- 不依赖单一防护措施
- 对上传文件进行重命名和内容校验
-
对安全人员:
- 监控异常的内容编码请求
- 记录并分析所有文件上传尝试
- 实施IP访问频率限制
7. 相关资源
- HTTP编码详解:https://www.cnblogs.com/xuzhudong/p/8486761.html
- Host碰撞脚本示例(需自行开发或寻找开源工具)
- Chunk编码转换工具