用户
搜索

[代码审计] MCMS 后台GETSHELL

  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 29 天

    连续签到: 16 天

    [LV.4]经常看看II

    i春秋-脚本小子

    Rank: 2

    1

    主题

    16

    帖子

    548

    魔法币
    收听
    1
    粉丝
    2
    注册时间
    2016-11-8
    发表于 2020-6-6 16:54:56 11758
    本帖最后由 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为生成后的路径+文件名
    1.png
    然后以templets/站点ID/模版风格/模版路径拼接到tmpFilePath,tmpFilePath包含文件名,程序假定后缀为html文件即模板文件,而我们可以控制
    183行读取tmpFilePath路径的html模板的内容到htmlContent,如果传入恶意构造的jpg即读到的是jpg的内容
    再看position,定位到170行,未经处理直接拼接到generatePath,这个参数的问题与tmpFilePath的问题一致
    2.png
    192行调用fileutil渲染html并输出,若为jpg文件,没有合法标签故不渲染
    3.png
    导致写入shell
    [b]问题的根源[/b]是没有检查url和position参数的合法性问题,用户用合法上传接口上传包含恶意代码的图片构造为url,结合position构造恶意后缀即可写入webshell

    三、漏洞确认

    通过上传接口上传合法文件/upload/1//article/1590640638669.jpg(接口可见上一篇文章)burp修改url和position两个参数
    4.png
    得到shell http://192.168.106.180:8090/mcms_war/html/1/shell.jsp
    5.png

    四、总结

    1、在进行web渗透时,注意前台传向后台的可控参数中是否包含后缀,如有可考虑审计后台代码是否存在拼接问题
    2、代码整改防御时,并当避免使用前台传入的参数,必须使用时应注意检验合法性,避免拼接前端输入3、有文件写入操作时应当检查文件是否合法




    发表于 2020-6-9 14:46:52

    大佬谦虚了
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册