本帖最后由 ofei 于 2020-6-8 15:37 编辑
本文原创作者ofei,本文属i春秋原创奖励计划,未经许可禁止转载!
一、Mcms介绍
官网:http://www.mingsoft.net/
代码地址:https://gitee.com/mingSoft/MCMS
二、代码审计
上次我们分析了前台文件上传getshell漏洞,代码审查过程中发现低版本 后台静态页生成存在getshell问题,比较有意思,拿来分享一下,存在问题的版本为mcms<=4.6.5。
1、漏洞接口地址
F12发现生成静态页时,传入的参数有后缀,猜测后端处理是否有问题,搜索定位生成静态页的URL:ms/cms/generate/generateIndex.do,搜索定位到src\main\java\com\mingsoft\cms\action\GeneraterAction.java
2、问题分析
定位到代码154行,从前台获得url和position 两个参数,看注释为模版文件,参数包含路径+文件名,postion为生成后的路径+文件名
然后以templets/站点ID/模版风格/模版路径拼接到tmpFilePath,tmpFilePath包含文件名,程序假定后缀为html文件即模板文件,而我们可以控制
183行读取tmpFilePath路径的html模板的内容到htmlContent,如果传入恶意构造的jpg即读到的是jpg的内容
再看position,定位到170行,未经处理直接拼接到generatePath,这个参数的问题与tmpFilePath的问题一致
192行调用fileutil渲染html并输出,若为jpg文件,没有合法标签故不渲染
导致写入shell
[b]问题的根源[/b]是没有检查url和position参数的合法性问题,用户用合法上传接口上传包含恶意代码的图片构造为url,结合position构造恶意后缀即可写入webshell
三、漏洞确认
通过上传接口上传合法文件/upload/1//article/1590640638669.jpg(接口可见上一篇文章)burp修改url和position两个参数
得到shell http://192.168.106.180:8090/mcms_war/html/1/shell.jsp
四、总结
1、在进行web渗透时,注意前台传向后台的可控参数中是否包含后缀,如有可考虑审计后台代码是否存在拼接问题
2、代码整改防御时,并当避免使用前台传入的参数,必须使用时应注意检验合法性,避免拼接前端输入3、有文件写入操作时应当检查文件是否合法
|