积木报表SSTI漏洞分析
项目介绍
JimuReport-积木报表是一款免费的web报表工具,在Github上面拥有4.7k的star。项目地址为:https://github.com/jeecgboot/JimuReport
使用zoomeye发现存活资产682。
zoomeye语法:app:”积木报表”
漏洞分析
漏洞介绍&复现
积木报表的/jmreport/queryFieldBySql接口存在SSTI。
该接口主要功能是方便用户自定义接口从数据库中读取数据,制作动态数据报表。同时为了防止被注入恶意SQL语句,后端采用了黑名单的形式过滤SQL语句。
该接口使用了FreeMarker模板解析用户的输入,同时缺少对输入参数的过滤,我们可以通过该接口执行任意命令。
POC如下:
1 | POST http://118.24.23.24:8085/jmreport/queryFieldBySql HTTP/1.1 |
漏洞分析
前端输入的sql语句会先经过黑名单检测,检查其是否存在SQL注入的可能。
在经过一系列检查后,会被FreeMarker引擎进行解析。
在这个解析的过程中,FreeMarker将定义一个名为ex的变量,它引用了freemarker.template.utility.Execute类,然后使用ex执行了命令id,然后返回执行结果。
修复建议
该漏洞已在1.6.1版本得到修复,请受影响用户及时升级到最新版本。或者设置其仅对可信地址开放。
一些杂谈
JimuRepost的这个漏洞其实在jeecg-boot中也存在,只是接口存在一定的不同。JimuRepost和jeecg-boot都是JEECG官方的产品,故其中存在相当大一部分的代码复用,所以同一种漏洞出现在不同的产品上也丝毫不奇怪。
jeecg官方设计这个功能给了用户极大的自由,但是他们在安全性的考量上有些太欠缺了,甚至没有给Jimurepost做一个登录限制。这导致了漏洞利用的难度极低。









