CVE-2023-4450:jeecgboot积木报表系统 模板注入远程代码执行
简介
jeecgboot积木报表系统jimureport(jmreport)是一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖数据报表、打印设计、图表报表、大屏设计等!
漏洞描述
jimureport ≤ v1.6.0 具有 SSTI(服务器端模板注入),攻击者可利用该漏洞远程执行任意代码(RCE)。
FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
这种方式通常被称为 MVC (模型 视图 控制器) 模式,对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。
其实FreeMarker的原理就是:模板+数据模型=输出
Hessian 是一种基于二进制协议的网络传输协议,用于通过网络在不同的系统之间进行远程方法调用(RPC)。它以其高效、简单和易于使用而受到广泛关注。
Hessian 协议使用二进制编码来序列化对象,并通过网络传输这些二进制数据。相比于文本协议(如XML或JSON),二进制协议可以显著减少传输的数据量,提高传输效率。
Hessian 协议支持多种编程语言,使得不同语言的应用程序可以方便地进行跨语言的远程方法调用。通常,开发人员只需定义接口和方法,然后在客户端和服务器端分别实现这些接口,Hessian 协议会负责将方法调用请求和响应进行序列化和反序列化,从而实现远程过程调用。
Hessian 在一些 Java 后端框架中应用广泛,例如 Dubbo、Spring 等。它具有轻量级、高性能、跨语言等特点,适用于构建分布式系统或者跨语言的微服务架构。
Spring是IOC和AOP的容器框架,SpringMVC则是基于Spring功能的Web框架。
依赖注入:把有依赖关系的类放到容器中,解析出这些类的实例
spring对象间的依赖关系可以用配置文件的<bean>
定义。context的顶级父类ApplicationContext继承了BeanFactory。