某软报表|SpringKill对0day模板注入的代审分析(无POC)

admin 2024年7月31日16:11:59评论16 views字数 1232阅读4分6秒阅读模式

此文章由SpringKiller安全研究师傅产出,这位佬是一个能独立开发一款企业级IAST,伸手0day伸脚1day,能手搓操作系统用脚逆向的师傅,还是OWASP的代码贡献者之一。哦,差点忘了,这个师傅能书会画,上厅堂下厨房无所不能,现在是甲方大爹。呆哥建议爱学习的可以找他击剑一下。

SpringKill师傅的Github地址:https://github.com/springkill

sdfd

01

SpringKill的第一句话

某软报表|SpringKill对0day模板注入的代审分析(无POC)

某软报表|SpringKill对0day模板注入的代审分析(无POC)

 以下是SpringKill某报表模板注入的内容。

02

源码分析

这次公布的漏洞说是SQL注入,实际上是一个模板注入。

在产品中存在一个名为TemplateUtils的类,这个类用来处理表达式相关的内容。

传进来的表达式会进入render方法进行渲染:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

进去看模板参数渲染使用的方法renderParameter4Tpl,其中一直在调用同名方法render ,最开始传入了一个新的Calculator

某软报表|SpringKill对0day模板注入的代审分析(无POC)

中间有一个evalRenderAction 指定了RenderAction,其他的信息不太重要,往后看:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

进到最后一个renderTpl后看到了解析表达式的位置,通过ParameterProvider.PARAMETERPATTERN进行解析,然后就会获得表达式中的内容。

某软报表|SpringKill对0day模板注入的代审分析(无POC)

某软报表|SpringKill对0day模板注入的代审分析(无POC)

经过处理后这里就会取出${}中的内容,然后送到下面用前面传入的RenderAction进行渲染:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

某软报表|SpringKill对0day模板注入的代审分析(无POC)

调用var2.render自然也就是前面传进来的evalRenderAction了:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

继续往下,会走到evalString ,在这里,会将传入的内容转换为Expression

某软报表|SpringKill对0day模板注入的代审分析(无POC)

然后跟入这个eval,发现了下一个eval,这里就是前面的Calculator下的方法了:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

接下来会去调用下一个eval ,这里就是前面表达式的eval ,实际调用的是RelationExpression父类BinaryExpressioneval 

某软报表|SpringKill对0day模板注入的代审分析(无POC)

然后就是是调用下一个Node 的eval方法,这里的eval是使用索引进行检测的,实际是获取表达式=右边的内容,如果是函数的话就是FunctionCall

某软报表|SpringKill对0day模板注入的代审分析(无POC)

FunctionCall.eval方法会去调用resolveMethod,这也是这个漏洞的关键:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

resolveMethod 最终会获取一个命名空间然后调用getMethod 

某软报表|SpringKill对0day模板注入的代审分析(无POC)

某软报表|SpringKill对0day模板注入的代审分析(无POC)

某软报表|SpringKill对0day模板注入的代审分析(无POC)

到了函数调用,也就是漏洞发生的地方,存在getMethod 相关的实现类中DefaultNameSpace 类的getMethod 这里通过传入的内容去加载类:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

实际会去调用com.fr.function.xxx,这个包里面有很多函数可以调,返回后去调用evalExpression

某软报表|SpringKill对0day模板注入的代审分析(无POC)

某软报表|SpringKill对0day模板注入的代审分析(无POC)

网传为SQL,看下SQL 类,应该不用多说了吧:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

某软报表|SpringKill对0day模板注入的代审分析(无POC)

至于入口:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

其实可玩性还是挺高的,也不一定非要用SQL的形式去做POC来检测。

现已加入豪华检测套餐:

某软报表|SpringKill对0day模板注入的代审分析(无POC)

原文始发于微信公众号(阿呆攻防):某软报表|SpringKill对“0day”模板注入的代审分析(无POC)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月31日16:11:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某软报表|SpringKill对0day模板注入的代审分析(无POC)https://cn-sec.com/archives/2994436.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息