由于传播、利用本公众号菜狗安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号菜狗安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。
项目介绍
环境搭建
漏洞挖掘
任意文件读取
多处任意文件上传
第一处
第二处
模板注入
多处XSS
第一处
第二处
任意代码执行
总结
项目介绍
JPress CMS,一个完整的 Java CMS 网站管理系统,目前已经有 10w+ 网站使用 JPress CMS 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等
环境搭建
项目地址:https://gitee.com/JPressProjects/jpress/archive/refs/tags/v4.2.0.zip
源码下载好后解压,IDEA打开项目,等待maven加载
加载完成后,在项目的根目录,执行 mvn clean package
命令进行编译
编译好后配置tomcat
创建一个空数据库,然后tomcat启动进行安装
安装完成后登入
项目搭建完成后,因为项目部分的功能代码被打包进了官方写的jar包中,所以在审计开始前,我们要先使用maven把源码拉取到本地
漏洞挖掘
任意文件读取
在网站后他有一处模板文件修改功能
然后根据信息收集发现jpress模板技术使用的是JFinal-Template 模板引擎,而在JFinal模板引擎中可以使用#include 指令用于引入其他模板文件,并且没有限制文件
多处任意文件上传
第一处
在翻看后端功能点的时候,发现写文章功能处可以上传缩略图
这里我们尝试上传并抓包
从这里我们可以得到对应后端的触发路由,并且我们上传jsp后缀的文件没上传成功
如果是白盒的话,这里我们直接去看路由对应的后端代码就可以了,这里提供一点黑盒测试的思路,先判断是什么校验,如果是文件后缀校验的话,可以尝试上传一个未知后缀的文件判断是黑名单还是白名单,如果是黑就可以尝试绕过,白名单的话黑盒情况下基本GG
这里我随便上传一个后缀,发现可以上传成功,那么这里就可以判断是黑名单校验,就可以尝试绕过了,我们定位到代码段看下实现代码
我们重点关注类型检测的代码段
这里其实已经很清楚了,黑名单校验,过滤了static里面的后缀
那么这里的绕过思路就很清楚了,在文件操作类挖掘的课中我讲过了,我这里就不细说了
我这里尝试使用截断符
可以看到文件上传成功,看一下上传到哪了
上传到了attachment目录下,我们尝试访问
返回500,那么文件是存在的,不然就是404,其实这里返回页面已经提示了,doFilter,学过java的应该知道是什么情况了,被Filter拦截了,我们去找下它的Filter
在Filer中定义了不允许请求jsp和jspx文件,那么我们只能尝试上传其它后缀的jsp尝试绕过了
第二处
这一处是前台的文件上传功能点
先注册一个普通用户
注册完成后,在个人中心处有一个头像上传功能点
尝试上传文件,抓包
可以看到对应的路由和第一处是一样的,后门的步骤也和第一处一样了,这里就不浪费时间演示了
除了中两处文件上传还有其它上传图片的地方用的也是同一处接口处理,都可以用第一处的方法上传后门
模板注入
这个有两处不同的模板注入,一处是任意文件读取那里,使用的是JFinal-Template 模板引擎,但是这个网上的资料太少了,我也没学过,网上找了半天就一篇文章,给的poc会报错,最后是在github找到了一个可以用的poc
set(x=com.alibaba.fastjson.parser.ParserConfig::getGlobalInstance())
true)) #(x.addAccept("javax.script.ScriptEngineManager")) (x.setAutoTypeSupport(
set(x=com.alibaba.fastjson.JSON::parse('{"@type":"javax.script.ScriptEngineManager"}'))
set(e=x.getEngineByName("js"))
'java.lang.Runtime.getRuntime().exec("calc")')) (e.eval(
保存后访问首页
还有一处,我自己审的时候没发现,找资料的时候发现还有一处模板注入,使用到的模板引擎是Velocity,这个跟起来有点复杂,我这里就复现一下,具体的分析可以参考下面这篇文章
https://github.com/JPressProjects/jpress/issues/172
触发点我看了下有几处,我这里演示一处
在商品的设置中,可以设置通知邮件模板
然后配置管理员邮箱
配置完成后启用邮箱
然后插入恶意邮件模板
配置完成后,创建一个商品上架
然后访问刚刚添加的商品
在商品评论处添加下面内容
javax.script.ScriptEngineManager|{"@type":"javax.script.ScriptEngineManager"}|js|java.lang.Runtime.getRuntime().exec("calc")
按文章这里应该会执行计算器了,但是我这边测没执行,不清楚是上面原因,可能是我环境问题,感兴趣的可以自己下去试
多处XSS
第一处
在网站后台的模板文件修改处可以编辑html文件,我们自己插入xss语句
第二处
上一处说白了,普通用户登入后台,都是管理员了还插啥xss,比较鸡肋,第二种可以利用普通用户的文件上传功能,上传带有xss语句的html文件,构造访问地址给管理员
除了这两个后台还有一些可以执行xss的地方,但是也就和上面说的一样,你都是管理员了还插啥xss,第二种思路还有点危害
任意代码执行
在网站后台存在插件功能,可以导入java maven项目从而照成任意代码执行
先在一个正常的插件中添加我们的恶意代码
然后把插件项目编译成jar包
我这里直接使用maven打包,如果打包不成功的话,提示缺少依赖包就运行下面命令
mvn clean install -U
然后再打包
打包完成后会生成两个jar包,我这里用第二个
来到后台的插件管理处,安装我们打包好的jar包,等待插件安装,安装完成后访问对应路由
计算器弹出
总结
这套系统还是蛮复杂的,也可以算是很接近商业产品的开源项目了,源码中部分功能代码被打包了,需要下载它的jpress几个jar包,不然部分功能点的代码在项目中搜索不到和mcms一样,然后上面漏洞最难理解的应该是第二处模板注入,那个确实比较复杂,其它几个漏洞其实还好。
原文始发于微信公众号(菜狗安全):JAVA代审-JPress_V4.2
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论