关于JeecgBoot漏洞利用Tips
字数 2819 2025-11-07 08:41:54

JeecgBoot 常见漏洞利用技巧与进阶方法教学文档

文档说明

本文档目标: 深入解析JeecgBoot框架中常见的漏洞点、利用方法以及在不同实战环境下的绕过和深化技巧。旨在用于安全研究、授权测试及防御方案制定。

重要声明: 本文档所涉及的技术、思路和工具仅限用于以安全为目的的学习交流。严禁将其用于任何非法用途或盈利目的,否则后果自负。

一、 常见漏洞点概述

根据文章内容,JeecgBoot系统中存在多个可被利用的漏洞点,主要包括:

  1. 管理员密码重置漏洞
  2. 积木报表(JimuReport)组件漏洞
    • AviatorScript 表达式注入 / Freemarker模板注入
    • JDBC连接导致的数据库相关攻击
  3. Freemarker模板注入漏洞
  4. SQL注入漏洞
  5. 文件上传功能滥用

二、 漏洞利用详解与技巧

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编码 来规避检测。
    • 通用减少特征技巧: 对于出网的目标,可以组合使用JNDI注入(如 lookup 方法)等方式,远程加载恶意类,这种方式比直接传输大段字节码的Payload特征更小。

3. Freemarker模板注入

  • 漏洞描述: JeecgBoot自身或其他组件存在Freemarker模板注入点,可直接导致RCE。
  • 利用挑战: 目标环境可能对Payload长度或数据库写入操作有严格限制(例如限制为几百个字符)。直接插入用于加载字节码的Java代码,即使经过GZIP压缩,其长度也可能达到上万字符,极易触发限制。
  • 解决方案:
    1. 出网情况: 优先采用远程加载恶意类字节码的方式。即注入一个简短的Payload,让它去访问攻击者控制的远程服务器,加载并执行恶意的.class文件。这能有效绕过长度限制。
    2. 不出网情况: 利用JeecgBoot自带的文件上传功能。

4. 文件上传功能滥用

当目标不出网,且Freemarker模板注入受Payload长度限制时,文件上传功能成为关键跳板。

  • 漏洞接口: /jeecg-boot/sys/common/upload
  • 利用方法:
    1. 直接上传字节码文件: 首先,通过文件上传接口将包含恶意代码的JAR或CLASS文件上传到服务器。
    2. 本地加载执行: 然后,利用Freemarker模板注入点,执行一个简短的Payload,从服务器的本地文件系统(而非网络)加载并实例化刚刚上传的恶意字节码。
  • 关键问题与技巧:
    • 问题一:端口不确定。 如果恶意字节码需要反弹Shell或建立连接,服务器本地的服务端口可能与互联网端口不一致(例如,应用部署在Docker内)。
      • 解决方案: 需要Fuzz(模糊测试) 127.0.0.1 的本地端口,以确定正确的连接目标。
    • 问题二:不知道文件绝对路径。 如果不知道上传文件在服务器上的存储绝对路径,则无法进行本地加载。
      • 解决方案A(已知上传接口): 通过SQL注入报错等信息泄露获取路径(见下文)。
      • 解决方案B(追加写入): 如果没有直接的上传接口或无法获取路径,可以尝试通过漏洞追加写入一个文件(如Webshell)到已知的Web目录下。
    • 问题三:如何获取绝对路径?
      • 方法1:SQL注入报错。 利用JeecgBoot中存在的SQL注入漏洞,通过报错信息回显Mapper的XML文件路径,从而推断出Web应用的根目录。
      • 方法2:目录遍历接口。 文章中提及存在某个接口可以直接进行目录遍历,可用于探测路径。
      • 方法3:其他蛛丝马迹。 通过修改请求中JS文件路径的大小写(如 js/ vs JS/),观察响应差异,判断服务器对路径的敏感度,间接获取信息。

5. SQL注入

  • 漏洞描述: JeecgBoot中存在多处SQL注入点,网上已有大量公开POC。
  • 利用价值: 除了直接窃取数据,在漏洞利用链中更重要的作用是信息收集,特别是通过报错信息获取网站绝对路径,为后续的文件上传RCE提供必要条件。

三、 总结与利用链梳理

一个成功的深度利用往往需要组合多个漏洞:

  1. 信息收集: 利用SQL注入或目录遍历,获取服务器绝对路径、数据库类型(判断是否存在H2)等信息。
  2. 初始攻击: 尝试利用积木报表的表达式注入或Freemarker模板注入。
  3. 绕过限制:
    • 出网: 优先使用JNDI、H2的远程加载等方式,特征小,成功率高。
    • 不出网/长度受限:
      1. 通过 /jeecg-boot/sys/common/upload 接口上传恶意字节码文件。
      2. 利用获取到的绝对路径,通过模板注入点从本地加载该文件。
      3. 如需反弹Shell,Fuzz本地端口。
  4. 权限维持: 通过上述方法获取RCE后,可进一步上传Webshell或创建后门账户,实现权限维持。

文档结束

希望这份详尽的教学文档能帮助您深入理解JeecgBoot的安全问题。请务必在合法合规的环境下使用这些知识。

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编码 来规避检测。 通用减少特征技巧: 对于出网的目标,可以组合使用JNDI注入(如 lookup 方法)等方式,远程加载恶意类,这种方式比直接传输大段字节码的Payload特征更小。 3. Freemarker模板注入 漏洞描述: JeecgBoot自身或其他组件存在Freemarker模板注入点,可直接导致RCE。 利用挑战: 目标环境可能对Payload长度或数据库写入操作有严格限制(例如限制为几百个字符)。直接插入用于加载字节码的Java代码,即使经过GZIP压缩,其长度也可能达到上万字符,极易触发限制。 解决方案: 出网情况: 优先采用 远程加载恶意类字节码 的方式。即注入一个简短的Payload,让它去访问攻击者控制的远程服务器,加载并执行恶意的 .class 文件。这能有效绕过长度限制。 不出网情况: 利用JeecgBoot自带的文件上传功能。 4. 文件上传功能滥用 当目标不出网,且Freemarker模板注入受Payload长度限制时,文件上传功能成为关键跳板。 漏洞接口: /jeecg-boot/sys/common/upload 利用方法: 直接上传字节码文件: 首先,通过文件上传接口将包含恶意代码的JAR或CLASS文件上传到服务器。 本地加载执行: 然后,利用Freemarker模板注入点,执行一个简短的Payload,从服务器的 本地文件系统 (而非网络)加载并实例化刚刚上传的恶意字节码。 关键问题与技巧: 问题一:端口不确定。 如果恶意字节码需要反弹Shell或建立连接,服务器本地的服务端口可能与互联网端口不一致(例如,应用部署在Docker内)。 解决方案: 需要 Fuzz(模糊测试) 127.0.0.1 的本地端口,以确定正确的连接目标。 问题二:不知道文件绝对路径。 如果不知道上传文件在服务器上的存储绝对路径,则无法进行本地加载。 解决方案A(已知上传接口): 通过SQL注入报错等信息泄露获取路径(见下文)。 解决方案B(追加写入): 如果没有直接的上传接口或无法获取路径,可以尝试通过漏洞 追加写入 一个文件(如Webshell)到已知的Web目录下。 问题三:如何获取绝对路径? 方法1:SQL注入报错。 利用JeecgBoot中存在的SQL注入漏洞,通过报错信息回显 Mapper 的XML文件路径,从而推断出Web应用的根目录。 方法2:目录遍历接口。 文章中提及存在某个接口可以直接进行目录遍历,可用于探测路径。 方法3:其他蛛丝马迹。 通过修改请求中JS文件路径的大小写(如 js/ vs JS/ ),观察响应差异,判断服务器对路径的敏感度,间接获取信息。 5. SQL注入 漏洞描述: JeecgBoot中存在多处SQL注入点,网上已有大量公开POC。 利用价值: 除了直接窃取数据,在漏洞利用链中更重要的作用是 信息收集 ,特别是通过报错信息 获取网站绝对路径 ,为后续的文件上传RCE提供必要条件。 三、 总结与利用链梳理 一个成功的深度利用往往需要组合多个漏洞: 信息收集: 利用SQL注入或目录遍历,获取服务器绝对路径、数据库类型(判断是否存在H2)等信息。 初始攻击: 尝试利用积木报表的表达式注入或Freemarker模板注入。 绕过限制: 出网: 优先使用JNDI、H2的远程加载等方式,特征小,成功率高。 不出网/长度受限: 通过 /jeecg-boot/sys/common/upload 接口上传恶意字节码文件。 利用获取到的绝对路径,通过模板注入点从本地加载该文件。 如需反弹Shell,Fuzz本地端口。 权限维持: 通过上述方法获取RCE后,可进一步上传Webshell或创建后门账户,实现权限维持。 文档结束 希望这份详尽的教学文档能帮助您深入理解JeecgBoot的安全问题。请务必在合法合规的环境下使用这些知识。