文章总结: 这篇文章分析了一个系统的前台远程代码执行漏洞,利用Shiro鉴权绕过与Velocity模板注入的组合攻击。漏洞源于VelocityUtils.RenderData方法对可控的message参数进行模板渲染,攻击者可通过构造特定payload实现代码执行。文章提供了完整的调用链分析、漏洞复现过程以及利用Shiro低版本../绕过机制访问后台路由的方法,最终可通过注入内存马获取系统控制权。
综合评分: 91
文章分类: 漏洞分析,渗透测试,WEB安全,代码审计,实战经验
学院投稿-某系统组合拳前台RCE-模板注入
原创
知名小朋友
进击安全
2025年12月5日 10:30
北京
免责申明
本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。
一、前言
这里为组合拳,使用Shiro鉴权,并且进行Shiro的权限绕过+后台SSTI模板注入组合拳,进行注入内存马。
二、漏洞分析
首先漏洞成因是因为下面这段代码:
evaluate方法source字符串进行模版渲染,且source可控,造成模版注入;
首先需要重点关注message是否可控,实际上这个方法只有两个参数,taskId和vars,也就是说这个方法并不接受message参数,但是不着急,看看message是怎么生成的。
实际上是因为这个循环取出了一个activiti,然后获取activiti的message,那么实际上也是可控的,无非就是触发的时候需要多调用一个方法。
这段代码的大致意思是:
- 获取当前任务;
- 记录当前流程定义下任务完成前的任务列表;
- 完成该任务;
- 进行任务完成后的自定义逻辑;
- 更新任务指派;
- 获取完成任务后的任务列表;
- 找出新出现的任务;
- 对每个新任务发送待办提醒,通过
VelocityUtils.RenderData渲染消息模板。
看起来有点复杂,但是和业务流程挂钩,首先要理解什么是流程和任务,以及几个循环的条件,理解后总结一下触发条件:
也没那么复杂,一句话就可以总结了:该流程定义下任务完成后出现了新的任务;
那么我们知道了触发条件,先不着急控制message,先一步一步跟进到controller了层,因为这一分支只需要触发complete方法,所以不必看的很仔细,直接给出方法调用链。
可以看到有两条,为了方便分析,我选取一条跟进LeaveServiceImpl#update
继续往上直接跟进到了controller层:
那么整个目前为止,可以触发危险方法的整个调用链是:
LeaveController#update >>LeaveServiceImpl#update >>ActTaskService#complete >>VelocityUtils#RenderData >>VelocityEngine#evaluate
调用链是走完了,但是还有一个message的控制问题,哪里可以控制它呢?看下面的代码:
这个方法实际上会接受一个activities,那么自然也就可控了,message只是这个对象的一个属性罢了,表示待办消息。
至此所有条件满足,可以复现漏洞了。
三、漏洞复现
ssti注入
直接在界面中操作,看数据包和刚才分析的代码就行,不赘述。
payload如下:
#set($a='')$a.getClass().forName('java.lang.Runtime').getRuntime().exec('calc')
和预期一致,edit方法指定id和message就行。
请个假,三天以上,至于为什么需要看业务代码,不重要,看看数据包
这个方法没有分析,但是就很简单嘛,在请假流程下创建一个审批任务而已,现在为止就有了update方法的触发条件了,看看效果:
数据包是update方法,和预期完全一致:
四、鉴权绕过
这里是存在shiro的低版本,使用/../可以直接绕过。
小朋友这块教的不错,正常我就会结束了
鉴权信息如下:
这里随便找一个后台路由,不带Cookie进行访问。
可以看到会进行跳转到登录页面,低版本Shiro可以使用../进行绕过。
这里也成功能够访问到,成功拿下,剩下的使用jmg直接生成内存马注入即可。
广告区域
目前第四期进阶课程已经开始,课表如下:
同时报名第四期基础课程同样可看,课表如下:
同时具备内部资料以及靶场相关福利,想要了解的师傅可以冲了。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:进击安全 知名小朋友《学院投稿-某系统组合拳前台RCE-模板注入》