前言
某天在项目中遇到了一个奇怪的人才管理系统,通过FOFA(会员可在社区获取)进行了一番搜索,发现了该系统在互联网上的使用情况相当广泛。于是,我开始了后续的审计过程。
在搜索过程中,我偶然间找到了一份过期的源码,并在本地搭建起来,开始了审计工作。
审计过程
在检查一系列常见的RCE(远程代码执行)漏洞后(漏洞可在社区中获取,已更新至8000+),我发现了系统中大量的代码都使用了名为beetl的库。这个库是国内一个知名开发者开发的模板引擎,类似于freemarker。
在进一步分析中,我发现潜在的漏洞触发点在GroupTemplate#getTemplate方法中。我进行了全局搜索,发现在ComputationRuleUtil#getValue方法中有一个调用点,并且并未写死模板内容。相比之下,其他地方多次调用时都写死了模板内容。
这个发现意味着在ComputationRuleUtil#getValue方法中,可能存在潜在的漏洞触发点,可以被利用来执行远程代码。这是一个值得关注和优化的问题。
我们可以观察到对s2的拼接操作,而s2的最终值来自于String src参数。在这个过程中,src经过了rule方法的处理。通过观察rule方法,我们可以发现,当我们传入的第一个字符串参数不包含@sum和@avg时,rule方法会直接返回我们传入的参数。
全局搜索ComputationRuleUtil#getValue方法的调用位置。
在PerformanceIndicatorServiceImpl#checkRule方法中,发现了对ComputationRuleUtil#getValue方法的调用,而且这个方法的参数是从外部接收的。
在继续查找调用位置时,定位到了入口点/checkRule。在这里,观察到请求参数rule,并未发现任何过滤操作。
后来我查看了一下Shiro的鉴权配置,发现这个接口并不是前端直接暴露的。
在后续的调查中,我发现项目中使用的Spring版本比较低,存在一个登录绕过漏洞。攻击者可以通过构造URL形式为/druid/../xxxx直接访问到我们发现的后台路由。下面是一个构造回显效果的示例:
鉴于beetl的高版本已经具有对常见命令执行payload的黑名单过滤,我们可以采用反射加载JavaScript来构造攻击。
「圈子的最近主题和圈子内部工具一些展示」
纷传100%官方认证授权,可在发现-圈子页面查看
poc漏洞库 8000+src陆续更新中 -紧跟时代发展争做先进网安人
一起愉快刷分-榜上有名
免杀-护网必备
新手学习、老手巩固-温故而知新
**学习报告-三人行必有我师
**
各类会员-尊贵的SVIP
「你即将失去如下所有学习变强机会」
学习效率低,学不到实战内容
一顿自助钱,我承诺一定让用户满意,也希望用户能给予我一份信任
【详情下方图片了解】,【扫下方二维码加入】:只做高质量优质精品内容」
圈子目前价格为¥99元(交个朋友啦!),现在星球有近150+位师傅相信并选择加入我们,圈子每天都会更新内容,老用户可永久享受初始加入价格,圈子内容持续更新中
一张图总结
免责声明
由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
渗透测试15