首页 元宇宙

PHP 漏洞深度剖析:CVE-2019-11043 与 CVE-2012-1823 实战复现与防御

分类:元宇宙
字数: (9510)
阅读: (1279)
内容摘要:PHP 漏洞深度剖析:CVE-2019-11043 与 CVE-2012-1823 实战复现与防御,

在 PHP 应用的安全性方面,历史漏洞是不可忽视的威胁。本文将深入探讨两个经典漏洞:CVE-2019-11043(SAPI 整数溢出)和 CVE-2012-1823(CGI 参数注入),并提供详细的复现步骤、原理分析以及防御策略。这些漏洞虽然年代久远,但仍有部分老旧系统存在风险,同时理解它们的原理对于提升整体安全意识至关重要。

CVE-2019-11043:Nginx + PHP-FPM 的 RCE 风险

问题场景重现

CVE-2019-11043,也被称为 "破壳漏洞 2.0",影响的是 Nginx + PHP-FPM 的配置。漏洞允许攻击者通过精心构造的 URL,在服务器上执行任意代码。假设我们有以下 Nginx 配置:

location ~ \.php$ {
  fastcgi_split_path_info ^(.+\.php)(/.+)$; #高危配置
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  include        fastcgi_params;
  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  fastcgi_param  PATH_INFO $fastcgi_path_info;
  fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_path_info;
}

如果 fastcgi_split_path_info 配置不当,攻击者可以通过构造类似 index.php/%0a 这样的 URL,触发 SAPI 中的整数溢出,导致 PHP 尝试打开一个错误的文件,最终导致远程代码执行。

PHP 漏洞深度剖析:CVE-2019-11043 与 CVE-2012-1823 实战复现与防御

底层原理深度剖析

该漏洞的根源在于 PHP-FPM 的 fastcgi_split_path_info 指令的错误配置。攻击者通过在 URL 中注入换行符(%0a)可以绕过路径检查。当传入的 URL 中包含 %0a 时,PATH_INFO 变量会被错误地解析,导致 SCRIPT_FILENAME 指向了攻击者可控的文件名,从而执行恶意代码。

Nginx 作为反向代理服务器,将请求转发给 PHP-FPM。PHP-FPM 负责解析请求并执行 PHP 代码。如果 Nginx 配置中存在漏洞,攻击者就可以利用 Nginx 将恶意请求传递给 PHP-FPM,从而达到攻击的目的。

PHP 漏洞深度剖析:CVE-2019-11043 与 CVE-2012-1823 实战复现与防御

代码/配置解决方案

解决 CVE-2019-11043 的关键在于正确配置 Nginx。以下是一些推荐的配置方式:

  1. 升级 PHP 版本: 升级到 PHP 7.3.11 或更高版本,这些版本修复了该漏洞。
  2. 禁用 fastcgi_split_path_info 如果不需要使用 PATH_INFO,可以将其禁用。
  3. 使用 try_files 指令: 使用 try_files 指令来检查文件是否存在,可以防止攻击者访问不存在的文件。
location ~ \.php$ {
  try_files $uri =404;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  include        fastcgi_params;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

实战避坑经验总结

  • 定期安全扫描: 使用专业的安全扫描工具,定期扫描服务器,及时发现潜在的安全漏洞。
  • 最小权限原则: 确保 PHP-FPM 进程以最小权限运行,防止攻击者利用漏洞提升权限。
  • 加强输入验证: 对用户输入进行严格的验证,防止恶意输入。
  • 使用 Web 应用防火墙(WAF): 部署 WAF 可以有效地防御各种 Web 攻击,包括 CVE-2019-11043。

CVE-2012-1823:PHP CGI 参数注入漏洞

问题场景重现

CVE-2012-1823 影响的是以 CGI 模式运行的 PHP。当 PHP 作为 CGI 处理器时,允许攻击者通过 URL 查询字符串传递 -s-d 等参数,从而修改 PHP 的配置或执行任意代码。比如,构造如下 URL:

PHP 漏洞深度剖析:CVE-2019-11043 与 CVE-2012-1823 实战复现与防御
http://example.com/index.php?-s

这将导致 PHP 显示源代码,暴露敏感信息。

底层原理深度剖析

CGI 模式下,Web 服务器将请求转发给 PHP CGI 解释器。PHP CGI 解释器会解析请求的 URL 查询字符串,并将查询字符串中的参数传递给 PHP 脚本。如果 PHP CGI 解释器没有对传入的参数进行充分的过滤,攻击者就可以通过构造恶意的 URL 查询字符串,将恶意的参数传递给 PHP 脚本,从而达到攻击的目的。

PHP 漏洞深度剖析:CVE-2019-11043 与 CVE-2012-1823 实战复现与防御

代码/配置解决方案

  1. 禁用 CGI 模式: 尽可能避免使用 CGI 模式运行 PHP,推荐使用 PHP-FPM。
  2. 配置 cgi.fix_pathinfo 确保 php.inicgi.fix_pathinfo 设置为 0,防止某些类型的路径信息注入攻击。
cgi.fix_pathinfo=0
  1. Web 服务器配置: 在 Web 服务器配置中限制传递给 PHP CGI 的参数。

实战避坑经验总结

  • 避免使用 CGI 模式: 这是最有效的防御方法。
  • 定期更新 PHP 版本: 及时更新 PHP 版本,修复已知漏洞。
  • 加强配置管理: 定期检查 PHP 和 Web 服务器的配置,确保配置安全。

通过理解和防范这些 PHP 安全漏洞,我们可以有效地提高 Web 应用的安全性,保护用户数据和服务器资源不受侵害。同时,了解如宝塔面板等工具对 Web 服务器配置的影响,有助于更好地管理和维护服务器的安全。关注服务器的并发连接数和负载均衡,确保在高流量下服务器的稳定性和安全性。

PHP 漏洞深度剖析:CVE-2019-11043 与 CVE-2012-1823 实战复现与防御

转载请注明出处: 半杯凉茶

本文的链接地址: http://m.acea4.store/blog/163394.SHTML

本文最后 发布于2026-04-19 21:12:14,已经过了7天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 老实人 2 天前
    有没有更具体的 CVE-2019-11043 的 POC 啊?想自己复现一下。
  • 熬夜冠军 3 天前
    CVE-2012-1823 感觉现在很少见了,CGI 模式基本淘汰了吧?不过了解原理还是有用的。
  • 红豆沙 1 天前
    CVE-2012-1823 感觉现在很少见了,CGI 模式基本淘汰了吧?不过了解原理还是有用的。
  • 小明同学 1 天前
    写的很详细,尤其是 CVE-2019-11043 的 Nginx 配置部分,之前踩过坑,学到了!