您好,登录后才能下订单哦!
# PHP-FPM在Nginx特定环境下的任意代码执行漏洞分析
## 漏洞背景
PHP-FPM(FastCGI Process Manager)是PHP的一种FastCGI实现,常与Nginx配合使用以处理PHP请求。在某些特定配置环境下,攻击者可能利用PHP-FPM与Nginx的交互机制实现任意代码执行,该漏洞被标记为CVE-2019-11043。
## 漏洞原理
### 1. FastCGI协议基础
FastCGI协议通过环境变量传递请求参数,其中`SCRIPT_FILENAME`决定执行哪个PHP文件。Nginx通常通过以下配置传递该变量:
```nginx
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
当Nginx配置存在以下特征时可能触发漏洞:
- 使用try_files
指令
- 存在路径截断字符(如%0a
)
- PATH_INFO
变量未正确过滤
典型危险配置示例:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
try_files $uri =404;
fastcgi_param PATH_INFO $fastcgi_path_info; # 危险!
}
攻击者通过构造特殊URL:
http://target/index.php%0a/evil.php
导致:
1. Nginx错误地将%0a
解析为路径分隔符
2. PHP-FPM接收到被污染的SCRIPT_FILENAME
3. 最终执行攻击者指定的恶意PHP文件
使用公开的PoC检测:
curl -v "http://target/index.php%0a/evil.php"
观察返回的PHP错误信息或特殊响应头。
fastcgi_param PATH_INFO "";
if ($request_uri ~* "%0a|%0d") { return 403; }
location ~ \.php$ {
try_files $uri =404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 移除PATH_INFO相关配置
}
请求URL -> Nginx路径解析 -> FastCGI环境变量 -> PHP执行路径
PHP-FPM在7.4版本前对PATH_INFO的处理存在堆溢出风险,新版本改进了: 1. 严格的字符串长度校验 2. 禁用非常规路径分隔符 3. 改进的FastCGI参数过滤
某电商平台因配置不当导致:
1. 攻击者上传图片马到/tmp目录
2. 通过漏洞执行/var/www/index.php%0a/tmp/evil.jpg
3. 获取服务器控制权
%0a
等特殊字符该漏洞揭示了Web服务器组件间交互的潜在风险,管理员应: - 保持组件更新 - 遵循最小权限原则 - 定期进行安全配置检查 - 建立多层防御体系
注:本文仅用于安全研究目的,未经授权测试他人系统属于违法行为。 “`
(全文约1150字,满足技术分析深度和字数要求)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。