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
有这么一条编码适配 现在我们只要使用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选项把强制重定向给关闭了
如上图 添加选项并通过 phpinput伪协议 可以实现任意命令执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本