长亭百川云 - 文章详情

关于PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)简要说明

中孚安全技术研究

35

2024-07-13

漏洞信息

2024年06月06日DEVCORE组织发布了漏洞通报,称其报送了PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)。并且PHP官方也在当天发布了修复版本。

漏洞的本质就是基于CVE-2012-1823的基础上结合Windows字符编码的Best Fit特性,对其已发布的补丁进行绕过,从而继续在PHP- CGI环境下进行参数拼接,达到远程代码执行的目的。

该漏洞要求Windows操作系统需为:繁体中文、简体中文、日文,这三个其中之一的语言版本。

漏洞影响版本如下(XAMPP默认安装的配置下可以直接利用):

        PHP 8.3 < 8.3.8                      PHP 8.2 < 8.2.20                      PHP 8.1 < 8.1.29

简要说明

CVE-2012-1823

早在2017年PHITHON师傅已经对CVE-2012-1823漏洞进行过分析和文章分享。

简要概括就是,当将PHP的环境设为CGI模式下运行时,请求参数部分就会带入作为php-cgi.exe的参数,因此可以通过-d来设定参数allow_url_include、auto_prepend_file(勾起N年前学文件包含的回忆),将完整的参数信息(需要URL编码)带入到请求参数中,发送请求达到代码执行的目的。    

CVE-2024-4577

补丁分析

根据PHP漏洞修复的Commit提交信息来看,在cgi_main.c文件中,原有的逻辑新增了对Windows环境的单独逻辑判断,并且其中对请求参数使用了WideCharToMultiByte函数,即宽字节的转换。

因此结合已知的漏洞信息,确认此处是编码问题导致的。也就表示我们需要绕过的逻辑是if(*p == '-'),即请求参数第一个字符不能为-。

结合补丁信息我们知道在带入参数拼接前,宽字节会被转换。所以,以简体中文的Windows版本(在Windows中使用Page 936表示GBK编码)为例,对应的编码表信息,我们可以在该链接中找到:https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit936.txt    

通过搜索我们得知0x00ad可以被解码为0x002d也就是上文中提到的-符号。

漏洞复现

下载安装XAMPP,配置好Apache的配置文件httpd-xampp.conf,使得其以CGI模式来运行.php文件。

基于CVE-2012-1823将请求参数中的-替换为%ad,带入尝试发现漏洞成功复现,也就验证了我们之前的分析。    

总结

漏洞场景实际有两种,这点在DEVCORE的漏洞通报中也提到了。由于漏洞影响面积较大,因此本文仅做第一点场景的说明。

抛开漏洞场景,这个漏洞启发了我,要熟悉了解各类机制、特性,组合起来就可能导致某些已修复的漏洞被再次利用。

最后引用猪猪侠的话:知识面决定攻击面。

参考链接

DEVCORE组织发布的漏洞通报:https://devco.re/blog/2024/06/06/security-alert-cve-2024-4577-php-cgi-argument-injection-vulnerability/

PHP漏洞修复的Commit提交信息:https://github.com/php/php-src/commit/4dd9a36c16#diff-680b80075cd2f8c1bbeb33b6ef6c41fb1f17ab98f28e5f87d12d82264ca99729R1798

PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析:https://www.leavesongs.com/PENETRATION/php-cgi-cve-2012-1823.html

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2