CVE2024-4577 成因梳理

CVE-2012-1823

提到PHP-CGI有关的漏洞 就不得不提起CVE-2012-1823 该漏洞利用php-cgi将用户传入的cgi数据中的query_string部分的-后参数当做了 脚本的处理参数处理
攻击者可以利用-d参数修改配置项 实现远程命令执行的效果 也可以-i读出源码
当时这个漏洞被apache修复了 修复的方式也很简单 就是将-后的参数不作为脚本参数解析 那实际上php-cgi还是能识别参数并执行的

if((query_string = getenv("QUERY_STRING")) != NULL && strchr(query_string, '=') == NULL)
{
/* we've got query string that has no = - apache CGI will pass it to command line */ 
	unsigned char *p;
	decoded_query_string = strdup(query_string); 
	php_url_decode(decoded_query_string,strlen(decoded_query_string));
	
	for (p = decoded_query_string; *p && *p <= ' '; p++)
	{ 
		/* skip all leading spaces */ 
	} if(*p == '-') {
		skip_getopt = 1; // 就在这里 当检测到 - 后就会跳过解析
	} 
		free(decoded_query_string);
}

CVE2024-4577

作为一个新的漏洞 其被我们祖国的台湾的orange老师发现
简单的说 这个漏洞就是绕过了-符号
在中间件为Unicode但操作系统使用的为中文 日文 繁体 等中南亚国家文字编码时 需要编码适配
编码适配时 会匹配best-fit 匹配后会将超出限度的编码适配到可表示的编码
详见:
https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit936.txt
image
有这么一条编码适配 现在我们只要使用0xad替换-进行测试
这个漏洞常见于 xampp xampp是国外常用的中间件 其中间件编码默认为Unicode 当安装主机使用中文编码后会触发最佳适配
但是这个漏洞的前提是 apache使用php-cgi解析cgi数据 但是一般中间件不会再使用php-cgi 而是使用效率更好的 php-mod php-fpm来解析
但是xampp会把php-cgi放在默认的cgi目录下 我们可以直接通过目录访问php-cgi
但是默认配置中php-cgi是不允许直接访问的
cgi.force_redirect=1强制重定向选项 只接受重定向来的数据 对直接访问的数据不处理

但是 我们可以利用最新的漏洞 用-d选项把强制重定向给关闭了
image
如上图 添加选项并通过 phpinput伪协议 可以实现任意命令执行

posted @ 2024-08-30 17:59  f0r9  阅读(4)  评论(0编辑  收藏  举报