Git仓库:
https://github.com/crmeb/CRMEB
简介:
两天攻防中,某政局子公司官网后台采用的CRMEB开源商城CMS,挺奇葩,别问怎么总让我碰到这种东西,我也不知道,主打的就是一个魔幻、抽象。最后通过审代码,绕过历史漏洞修复的补丁(文章内容可能有点少,没办法,这个代审快到了我只用了5秒)
水就完事儿了……
0x01、历史nDay漏洞探测:
别问,问就是谷歌(小型国内CMS百度也行,大型CMS更建议谷歌,配合团队漏洞库):
注:优先看能getShell的nDay漏洞 最开始以为没有能直接GetShell的历史漏洞,后来才发现第一条搜索结果里这个任意文件下载指的是对服务端进行文件下载,以此getShell
尊重版权,不再复述该nDay漏洞作者代审流程,链接在此:
https://blog.csdn.net/heartself/article/details/127522470
实际环境中该CMS为最新版本,经粗略复测该漏洞已修复,php落地失败!!!
0x02、代码审计0Day
1、审原漏洞修复是否可绕过
1.1、寻找功能点(根据nDay作者代审文件函数)
工程代码中,唯一一处存在临时落地文件包裹在抛异常的位置
(try代码异常则运行不到unlink删除临时文件代码)
这个位置如原作者做说,通过设置appid为空,即可抛异常(数据库事务中直播间商品是要和小程序appid绑定,appid空则异常抛错跳过unlink继续执行)。
跟进downloadImage下载函数,寻找漏洞修补代码:
可以看到,直接判断后缀是否为小写的php\js\html,我们可以通过大小写直接绕过。
同样可以通过再上传解析文件处理也可以。
至于目录构造方式,同样可以继续向下跟踪至getImageExtname函数:
1.2、二营长,开炮
着实没想到修补方案这么der,完全可以黑盒绕过,费不着代审。
根据nDay作者流程走,服务端部署文件后缀改成Php就可以了!