Closed Er1cccc closed 2 years ago
jpress后台存在模板安装功能,攻击者可以安装恶意模板造成rce。
在页面上点击安装模板
上传恶意模板之后,程序运行到io.jpress.web.admin._TemplateController#doInstall,这个函数的作用是将上传的zip文件解压,然后存到classes/webapp/templates目录下,这个目录是专门用来存储模板文件的
io.jpress.web.admin._TemplateController#doInstall
来看具体代码,io.jpress.web.admin._TemplateController#doInstall方法前面主要是一系列检查,检查是不是zip,文件是否已经存在等,最后来到156行,解压zip,然后这个方法就基本结束了。
然后就可以看到,我们写的恶意模板已经被解压到了这个目录下
不过模板注入存在些许过滤,我们使用fastjson来辅助获取ScriptEngineManager,然后执行任意js代码,就可以实现rce,payload如下
ScriptEngineManager
#set(x=com.alibaba.fastjson.parser.ParserConfig::getGlobalInstance()) #(x.setAutoTypeSupport(true)) #(x.addAccept("javax.script.ScriptEngineManager")) #set(x=com.alibaba.fastjson.JSON::parse('{"@type":"javax.script.ScriptEngineManager"}')) #set(e=x.getEngineByName("js")) #(e.eval('java.lang.Runtime.getRuntime().exec("calc")'))
接下来怎么进行利用呢?看到后台这个地方存在一个模板预览功能
开启之后可以通过get传入template参数来指定使用的模板,比如这里我们指定使用cn.jeanstudio.bonhumeur这个模板
cn.jeanstudio.bonhumeur
那么,接下来就很简单了,我们只需要指定使用我们刚刚上传的恶意模板就行了
弱密码进入后台,安装恶意模板evil.zip
开启模板预览功能
访问http://localhost/evil?template=evil,发现计算器弹出,漏洞验证成功
在 jpress 最新版本中已解决。
审计过程
jpress后台存在模板安装功能,攻击者可以安装恶意模板造成rce。
在页面上点击安装模板
上传恶意模板之后,程序运行到
io.jpress.web.admin._TemplateController#doInstall
,这个函数的作用是将上传的zip文件解压,然后存到classes/webapp/templates目录下,这个目录是专门用来存储模板文件的来看具体代码,
io.jpress.web.admin._TemplateController#doInstall
方法前面主要是一系列检查,检查是不是zip,文件是否已经存在等,最后来到156行,解压zip,然后这个方法就基本结束了。然后就可以看到,我们写的恶意模板已经被解压到了这个目录下
不过模板注入存在些许过滤,我们使用fastjson来辅助获取
ScriptEngineManager
,然后执行任意js代码,就可以实现rce,payload如下接下来怎么进行利用呢?看到后台这个地方存在一个模板预览功能
开启之后可以通过get传入template参数来指定使用的模板,比如这里我们指定使用
cn.jeanstudio.bonhumeur
这个模板那么,接下来就很简单了,我们只需要指定使用我们刚刚上传的恶意模板就行了
效果演示
弱密码进入后台,安装恶意模板evil.zip
开启模板预览功能
访问http://localhost/evil?template=evil,发现计算器弹出,漏洞验证成功