问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
Java代码审计-mcms
漏洞分析
本文主要记录了对mcms各个历史漏洞的复现与分析,含中间件漏洞和web漏洞。
环境搭建: ----- 首先配置数据库用户名和密码  然后进行环境搭建,访问首页。  使用默认密码,成功登录。  代码审计: ----- 1.xss漏洞 ------- 根据漏洞点,我们定位到 net.mingsoft.basic.filter.XssHttpServletRequestWrapper这部分源码中 然后直接去看源码。 net/mingsoft/basic/filter/XssHttpServletRequestWrapper.java  发现其直接使用throw抛出异常,并直接进行拼接。  然后直接输出。  ### 漏洞复现: 进入前台地址。  构造xss的payload,成功实现弹框。  2.SQL注入 ------- 全局搜索关键字 ${  发现有几处存在关键字。 进入ICategoryDao.xml 跟进include中的sqlWhere函数。 在这里我们需要注意: - ${item.field}被直接拼接在SQL语句中 - ${item.field},item是collection="sqlWhereList"的别名,也就是${sqlWhereList.field} - 传递的参数sqlWhereList,需要构造的是其中的field  然后接着去找接口及其实现过程,然后回到ICategoryDao.xml,找"query"对应的接口。   然后发现query的类有三个,但只有一个接收传参  然后获得地址。  找到了query,然后去找它的参数sqlWhereList。  子类没有发现,就去看父类BaseEntity,在父类中找到sqlWhereList和SQLwhere。 ... public abstract class BaseEntity implements Serializable{ /\*\* \* 自定义SQL where条件,需要配合对应dao.xml使用 \*/ @JsonIgnore @XmlTransient @TableField(exist = false) protected String sqlWhere; ```php @JsonIgnore @XmlTransient public String getSqlWhere() { return sqlWhere; } public void setSqlWhere(String sqlWhere) { this.sqlWhere = sqlWhere; } @JsonIgnore @XmlTransient public List getSqlWhereList() { if(StringUtils.isNotBlank(sqlWhere)){ try { return JSONObject.parseArray(sqlWhere,Map.class); }catch (Exception e){ e.printStackTrace(); } } return Collections.EMPTY\_LIST; } ... ``` } ### 漏洞复现: 进入公司管理-文章管理处。  使用burpsuite抓包,然后输入SQL注入的paylaod去触发报错注入。  3.文件上传 ------ 定位到接口为,/ms/file/uploadTemplate.do  然后使用Burp进行抓包。  在正常上传压缩文件之后直接进行解压,没有对其进行检测,直接传入文件中。  成功上传1.jsp文件。  4、SSTI:Freemarker模板注入 --------------------- 源码位置net\\mingsoft\\base\\util\\FtlUtil.java 发现其访问指定路由后,会调用generate()生成主页  其中主要是对map进行一些初始化操作,并通过rendering()进行渲染  最后调用process()进行渲染,造成代码执行  ### 漏洞复现: ```php 进入首页文件,然后修改index.html ```  加入SSTI的payload  然后生生成主页,成功弹出计算器。  5.FastJson反序列化漏洞 ---------------- 发现其在代码中,存在fastjson组件。  ---------------------------------------------------------------------------------------------------------- 其版本为1.2.8,无法进行执行命令。  ### 漏洞复现: 使用burp进行抓包,然后设置dnslog  然后使用burp去触发,成功收到监听。  6.SQL注入2 -------- 全局搜索${},发现query方法中,categoryId参数存在SQL注入  根据namespace可知该语句的映射接口类ContentDao 在IContentDao中并没有发现query方法,但他继承了IBaseDao,而query就在其中,然后去看他父类文件。  它的业务层对应接口类为:IContentBiz ,而实现类是ContentBizImpl而其中子类没有调用该方法,所以向上找他的父类BaseBizImpl   找到了控制层ContentAction,该层的接口为/cms/content 在该类的list方法中,会调用contentBiz属性的query方法参数为content 未对用户输入的参数进行过滤,另外该CMS全局也没有针对SQL注入的过滤,所以只需要传入categoryId参数,将查询语句闭合即可导致SQL注入  ### 漏洞复现: 使用post方式进行传参。  可以使用hackbar或者bp进行漏洞利用。  7.任意文件删除 -------- 在TemplateAction接口中,发现其通过fileName可以指定目录删除。  并且未对文件上传对…/进行限制,我们可以通过…/进行任意目录删除  ### 漏洞复现: 我们使用hackbar,删除我们上传的1.jsp,成功删除。  8.shiro反序列化 ----------- 在登录框发现存在记住密码的功能。  然后对其进行测试,发现其存在shio的特征。  全局搜索shiro,发现其存在shiro组件。  发现源码中写入了key。  然后我们使用工具进行测试。  发现我们可以通过源码中的key和爆破出的利用链,成功命令执行。  然后写入内存马,成功可以getshell。  9、文件上传2 ------- 定位到源码为:net.mingsoft.basic.action.TemplateAction#writeFileContent  发现其使用filename来获取为文件。  然后接着进入模板管理、然后点击编辑。  发现存在一个上传点,  然后上传测试文件,发现可以成功进行上传。  10、文件上传3 -------- 这个漏洞和上面的那个漏洞一样,只不过是另一个方法upload。  发现其存在非法路径过滤函数 checkUploadPath, 然后查看checkUploadPath函数,其只对 ../进行了校验,通过绝对路径仍然可以绕过。  对文件的上传是利用了upload方法  在测试过程中出现了文件,响应码为400.  **REF** [https://baijiahao.baidu.com/s?id=1745383988318751780&wfr=spider&for=pc](https://baijiahao.baidu.com/s?id=1745383988318751780&wfr=spider&for=pc) <https://www.freebuf.com/articles/web/360757.html>
发表于 2023-05-17 09:00:00
阅读 ( 7754 )
分类:
漏洞分析
4 推荐
收藏
0 条评论
请先
登录
后评论
Arthur
8 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!