关于JeecgBoot漏洞利用Tips
字数 2819 2025-11-07 08:41:54
JeecgBoot 常见漏洞利用技巧与进阶方法教学文档
文档说明
本文档目标: 深入解析JeecgBoot框架中常见的漏洞点、利用方法以及在不同实战环境下的绕过和深化技巧。旨在用于安全研究、授权测试及防御方案制定。
重要声明: 本文档所涉及的技术、思路和工具仅限用于以安全为目的的学习交流。严禁将其用于任何非法用途或盈利目的,否则后果自负。
一、 常见漏洞点概述
根据文章内容,JeecgBoot系统中存在多个可被利用的漏洞点,主要包括:
- 管理员密码重置漏洞
- 积木报表(JimuReport)组件漏洞
- AviatorScript 表达式注入 / Freemarker模板注入
- JDBC连接导致的数据库相关攻击
- Freemarker模板注入漏洞
- SQL注入漏洞
- 文件上传功能滥用
二、 漏洞利用详解与技巧
1. 管理员密码重置
- 漏洞描述: 在未授权或低权限的情况下,尝试恢复或重置管理员(默认用户
admin)的密码。 - 利用现状: 该漏洞利用成功率较低,因为多数经过二开或升级的系统已修复此问题。通常作为初步尝试手段。
- 利用方法: 文章未给出具体POC,但通常涉及找到密码重置或找回功能的安全缺陷,如逻辑漏洞、可预测的Token、未鉴权的重置接口等。
2. 积木报表(JimuReport)组件漏洞
积木报表是JeecgBoot集成的报表工具,是攻击的重点区域。
A. AviatorScript 表达式注入 / Freemarker模板注入
- 漏洞描述: 积木报表的某个接口存在表达式注入漏洞。关键在于,该接口在不同版本中可能表现为 AviatorScript注入 或 Freemarker模板注入,需要根据目标环境进行判断和测试。
- 利用技巧: 测试时需准备两种不同的Payload,以确定目标实际的模板引擎类型。
B. JDBC连接利用
- 漏洞描述: 通过积木报表的JDBC连接功能,可以实现数据库相关攻击,其利用方式高度依赖于目标使用的数据库驱动。
- 利用技巧:
- 目标出网情况: 如果目标服务器可以访问互联网(出网),最直接的方式是尝试利用 MySQL 驱动特性。例如,利用
LOAD DATA LOCAL等特性读取服务器文件,或者通过连接参数实现SSRF。高版本MySQL依赖可能会增加利用难度。 - 目标不出网情况(利用H2数据库):
- 优势: 如果目标环境中存在H2数据库,可以在不出网的情况下实现攻击。H2数据库支持通过
CREATE ALIAS创建JavaScript别名,从而执行Java代码,最终实现任意Java字节码加载,达到RCE(远程代码执行)的效果。 - 绕过技巧: 原始的JavaScript Payload特征非常明显,容易被安全设备拦截。可以尝试对Payload进行 Unicode编码 来规避检测。
- 优势: 如果目标环境中存在H2数据库,可以在不出网的情况下实现攻击。H2数据库支持通过
- 通用减少特征技巧: 对于出网的目标,可以组合使用JNDI注入(如
lookup方法)等方式,远程加载恶意类,这种方式比直接传输大段字节码的Payload特征更小。
- 目标出网情况: 如果目标服务器可以访问互联网(出网),最直接的方式是尝试利用 MySQL 驱动特性。例如,利用
3. Freemarker模板注入
- 漏洞描述: JeecgBoot自身或其他组件存在Freemarker模板注入点,可直接导致RCE。
- 利用挑战: 目标环境可能对Payload长度或数据库写入操作有严格限制(例如限制为几百个字符)。直接插入用于加载字节码的Java代码,即使经过GZIP压缩,其长度也可能达到上万字符,极易触发限制。
- 解决方案:
- 出网情况: 优先采用远程加载恶意类字节码的方式。即注入一个简短的Payload,让它去访问攻击者控制的远程服务器,加载并执行恶意的
.class文件。这能有效绕过长度限制。 - 不出网情况: 利用JeecgBoot自带的文件上传功能。
- 出网情况: 优先采用远程加载恶意类字节码的方式。即注入一个简短的Payload,让它去访问攻击者控制的远程服务器,加载并执行恶意的
4. 文件上传功能滥用
当目标不出网,且Freemarker模板注入受Payload长度限制时,文件上传功能成为关键跳板。
- 漏洞接口:
/jeecg-boot/sys/common/upload - 利用方法:
- 直接上传字节码文件: 首先,通过文件上传接口将包含恶意代码的JAR或CLASS文件上传到服务器。
- 本地加载执行: 然后,利用Freemarker模板注入点,执行一个简短的Payload,从服务器的本地文件系统(而非网络)加载并实例化刚刚上传的恶意字节码。
- 关键问题与技巧:
- 问题一:端口不确定。 如果恶意字节码需要反弹Shell或建立连接,服务器本地的服务端口可能与互联网端口不一致(例如,应用部署在Docker内)。
- 解决方案: 需要Fuzz(模糊测试)
127.0.0.1的本地端口,以确定正确的连接目标。
- 解决方案: 需要Fuzz(模糊测试)
- 问题二:不知道文件绝对路径。 如果不知道上传文件在服务器上的存储绝对路径,则无法进行本地加载。
- 解决方案A(已知上传接口): 通过SQL注入报错等信息泄露获取路径(见下文)。
- 解决方案B(追加写入): 如果没有直接的上传接口或无法获取路径,可以尝试通过漏洞追加写入一个文件(如Webshell)到已知的Web目录下。
- 问题三:如何获取绝对路径?
- 方法1:SQL注入报错。 利用JeecgBoot中存在的SQL注入漏洞,通过报错信息回显
Mapper的XML文件路径,从而推断出Web应用的根目录。 - 方法2:目录遍历接口。 文章中提及存在某个接口可以直接进行目录遍历,可用于探测路径。
- 方法3:其他蛛丝马迹。 通过修改请求中JS文件路径的大小写(如
js/vsJS/),观察响应差异,判断服务器对路径的敏感度,间接获取信息。
- 方法1:SQL注入报错。 利用JeecgBoot中存在的SQL注入漏洞,通过报错信息回显
- 问题一:端口不确定。 如果恶意字节码需要反弹Shell或建立连接,服务器本地的服务端口可能与互联网端口不一致(例如,应用部署在Docker内)。
5. SQL注入
- 漏洞描述: JeecgBoot中存在多处SQL注入点,网上已有大量公开POC。
- 利用价值: 除了直接窃取数据,在漏洞利用链中更重要的作用是信息收集,特别是通过报错信息获取网站绝对路径,为后续的文件上传RCE提供必要条件。
三、 总结与利用链梳理
一个成功的深度利用往往需要组合多个漏洞:
- 信息收集: 利用SQL注入或目录遍历,获取服务器绝对路径、数据库类型(判断是否存在H2)等信息。
- 初始攻击: 尝试利用积木报表的表达式注入或Freemarker模板注入。
- 绕过限制:
- 出网: 优先使用JNDI、H2的远程加载等方式,特征小,成功率高。
- 不出网/长度受限:
- 通过
/jeecg-boot/sys/common/upload接口上传恶意字节码文件。 - 利用获取到的绝对路径,通过模板注入点从本地加载该文件。
- 如需反弹Shell,Fuzz本地端口。
- 通过
- 权限维持: 通过上述方法获取RCE后,可进一步上传Webshell或创建后门账户,实现权限维持。
文档结束
希望这份详尽的教学文档能帮助您深入理解JeecgBoot的安全问题。请务必在合法合规的环境下使用这些知识。