【java安全】某cms漏洞分析(详细就完事了)

admin 2022年8月1日00:55:23评论466 views字数 2362阅读7分52秒阅读模式

本文首发于FreeBuf,作者Me,文末阅读原文可直达Freebuf链接


一、cms简介:

因酷开源在线网校系统是由北京因酷时代科技有限公司研发并推出的国内首家Java版开源网校源代码建站系统。

本文是inxedu cms 漏洞分析学习的第一篇,将围绕存储型xss漏洞、文件上传漏洞进行分析学习,大纲:

1、环境搭建
2、存储型xss漏洞分析
3、文件上传漏洞分析


二、环境搭建:

1、下载源码(v2.0.6),使用idea导入

【java安全】某cms漏洞分析(详细就完事了)

然后更改配置文件:

【java安全】某cms漏洞分析(详细就完事了)


配置tomcat:

【java安全】某cms漏洞分析(详细就完事了)

【java安全】某cms漏洞分析(详细就完事了)


然后run运行

【java安全】某cms漏洞分析(详细就完事了)


三、漏洞分析

①存储型xss:

先黑盒测试可能存在漏洞的功能点,这里以提问列表为例(有可能管理员在后台能看到提问的内容,可尝试打管理员的cookie)

1、首先来看插入数据库的过程,是否有什么过滤

【java安全】某cms漏洞分析(详细就完事了)

抓包查看请求的路由:/questions/ajax/add

【java安全】某cms漏洞分析(详细就完事了)


利用idea快捷键,直接全局搜索路由关键字:

【java安全】某cms漏洞分析(详细就完事了)


定位到控制器QuestionsController.java:

看到addQuestions()方法,接收的传参的为Questions类,然后判断用户是否登录,所以需要一个普通用户的权限,然后就调用了sevice层中的addQuestions()方法

【java安全】某cms漏洞分析(详细就完事了)


查看Questions类的属性中有哪些是String类型的,可以尝试在这些属性中插入xss payload

【java安全】某cms漏洞分析(详细就完事了)


跟进addQuestions()方法:QuestionsService.java

【java安全】某cms漏洞分析(详细就完事了)


查看QuestionsService的实现类:

这个过程也没有对传参进行过滤,所以我们继续跟进dao层,看具体插入数据库的语句操作

【java安全】某cms漏洞分析(详细就完事了)


dao层实现类:

这里根据insert中的关键字,找到对应mapper进行查看createQuestions

【java安全】某cms漏洞分析(详细就完事了)


QuestionsMapper.xml:

这里对edu_questions表插入数据

【java安全】某cms漏洞分析(详细就完事了)


具体字段如下:

【java安全】某cms漏洞分析(详细就完事了)


演示:

添加问答:

【java安全】某cms漏洞分析(详细就完事了)


查看数据库的内容,xss payload已经被成功插入了:

【java安全】某cms漏洞分析(详细就完事了)

到此为止,添加问答的过程就分析完成了,对用户的提交的传参是没有进行任何的过滤然后直接调用对应的方法将内容直接插入到数据库中edu_questions表进行存储,那么接下来我们来看一下哪些地方对edu_questions表的内容进行查询且输出展示,如果输出展示的过程也没有进行任何限制,那么一枚存储型xss就产生了


2、然后来看输出展示的过程

在访问前台问答展示列表时,刚刚插入的xss payload被触发了

【java安全】某cms漏洞分析(详细就完事了)


全局搜索路由/questions/list:

这里找到了两个路由,分别来自两个不用的控制器,根据名称来看,AdminQuestionsController更能吸引人,应该属于后台控制器,所以直接来看它

【java安全】某cms漏洞分析(详细就完事了)


跟进AdminQuestionsController:

getQuestionsList()方法中,首先设置了ModelAndView,待会再看具体的模板路径,然后调用了service层的getQuestionsList()方法进行数据的查询:

【java安全】某cms漏洞分析(详细就完事了)


跟进getQuestionsList()方法和其实现类:

【java安全】某cms漏洞分析(详细就完事了)


跟进dao层实现类:

这里根据关键字,找到对应mapper进行查看

【java安全】某cms漏洞分析(详细就完事了)


QuestionsMapper.xml:

这里对edu_questions表的数据进行查询,具体的sql语句定义如下

【java安全】某cms漏洞分析(详细就完事了)


那么我们回到controller中查询模板的赋值展示过程:

然后添加questionsList(就是从数据库中查询到的内容)到共享域中,在模板中用于输出

【java安全】某cms漏洞分析(详细就完事了)


questionslist的值:

【java安全】某cms漏洞分析(详细就完事了)


定位到具体的jsp文件:viewinxeduadminquestionsquestions_list.jsp

这里使用foreach对questionslist进行遍历,看到一个<td>标签中对title字段进行了输出,最终成功触发了xss payload

【java安全】某cms漏洞分析(详细就完事了)


到后台功能中进行查看验证:

后台查看问答列表的功能中成功触发了xss弹窗,所以这个存储型xss不仅能打前台普通用户,还可以打后台管理员

【java安全】某cms漏洞分析(详细就完事了)



②文件上传漏洞分析

漏洞点:common/controller/VideoUploadController.java

在gok4()方法中,这里使用的是springmvc的方式进行文件上传,方法中接收了几个传参,fileType参数(允许的文件后缀)、param参数(文件路径),然后以逗号分割为数组赋值为type,然后传入setFileTypeList()方法,这里其实不重要,先略过

接着往后看,这里获取上传文件的后缀名,然后对和传入的fileType参数使用contains()进行比较(判断传入的fileType中是否包含指定的后缀名字符ext),如果包含则返回true,然后使用!取反,所以传入的fileType要包含ext,否则就会return错误

【java安全】某cms漏洞分析(详细就完事了)


然后会进行文件路径的获取,跟进一下getPath()方法,首先定义了filePath参数,然后判断param如果不为null,且去除空格后长度大于0的话就拼接上param作为路径,否则就是项目绝对路径加上filePath,最后使用年月日的命名拼接完整的文件路径,又因为param参数是可控的,所以文件的上传路径可以使用../跨目录进行上传

【java安全】某cms漏洞分析(详细就完事了)


分析完文件路径的命名方式,然后回到上传点,获取完文件路径后,如果不存在会进行目录创建,然后直接使用transferTo()进行上传,所以整个上传过程只是对fileTpye参数进行判断而已,但是fileType是我们可控的,只需要传入的fileType中包含上传文件的后缀名即可,最后还会对文件路径进行回显

【java安全】某cms漏洞分析(详细就完事了)


上传数据包:

【java安全】某cms漏洞分析(详细就完事了)


连接webshell:

【java安全】某cms漏洞分析(详细就完事了)


本文对漏洞的成因和触发的过程进行详细的分析和跟进,文笔浅显,如有错误欢迎指出。


原文始发于微信公众号(哈拉少安全小队):【java安全】某cms漏洞分析(详细就完事了)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月1日00:55:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【java安全】某cms漏洞分析(详细就完事了)http://cn-sec.com/archives/1212951.html

发表评论

匿名网友 填写信息