CVE-2023-24162: J2eeFAST 后台 SQL 注入漏洞深度分析

0x00 漏洞背景与详情

  • CVE ID: CVE-2023-24162
  • 漏洞类型: SQL 注入 (CWE-89)
  • 危险等级: 高危 (High)
  • 受影响产品: J2eeFAST (Java 快速开发平台)
  • 受影响版本: v2.5.0 及以下版本

J2eeFAST 是一款企业级快速开发框架。CVE-2023-24162 是存在于其管理后台的一个 SQL 注入漏洞。该漏洞位于 /sys/user/list 接口中,主要原因是后端在接收前端传递的 sqlid 参数时,未能进行充分的清洗与预编译处理,直接将参数拼接到 Mybatis 的执行语句中。攻击者利用该漏洞可以读取数据库敏感信息,甚至在满足一定条件下实现服务器的远程代码控制。

0x01 漏洞原理分析

此漏洞的核心机制依然是经典的 动态 SQL 拼接问题

  1. 入口追踪: 漏洞入口位于 SysUserController.java 中的 list 方法。该接口用于处理用户列表的查询请求,并允许前端传入动态查询参数,包括 sqlid 等。
  2. 底层执行: 传入的参数会被封装后交由 MyBatis-Plus 处理。在底层的 Mapper.xml 配置文件中,开发者为了追求动态拼装 SQL 的灵活性,错误地使用了 ${} 进行变量插值,而不是使用安全的 #{} 占位符。
  3. 防御失效: 尽管 J2eeFAST 存在内置的防注入过滤器,但其防御逻辑较为薄弱(例如仅通过简单的 replace 处理关键字),攻击者很容易通过组合查询、盲注逻辑或大小写混淆绕过过滤。

0x02 POC (Proof of Concept)

攻击者通常利用 时间盲注 (Time-Based Blind)布尔盲注 (Boolean-Based Blind) 来确认并利用该漏洞。

验证请求示例

POST /fast/sys/user/list HTTP/1.1
Host: target-system.com
Content-Type: application/x-www-form-urlencoded
Cookie: JSESSIONID=valid_session_id

sqlid=1' AND (SELECT 1 FROM (SELECT(SLEEP(5)))a) AND '1'='1

触发表现: 如果数据库执行了该 Payload,响应时间将强制延迟至少 5 秒,这证明了注入点存在。

0x03 高级利用姿势与实战场景

在获取了 SQL 注入权限后,实战中可采取以下高级利用链路:

1. 拖库与敏感数据窃取

  • 利用盲注脚本(如 SQLMap,需编写 Tamper 脚本绕过内置过滤)自动化提取 sys_user 表中的管理员哈希密码、后台配置数据。
  • 提取应用连接其它组件(如 Redis、RabbitMQ)的明文密码。

2. 提升至 OS 层权限 (GetShell)

  • UDF 提权 / 写马: 如果 MySQL 的 secure_file_priv 为空,且当前连接账户拥有 FILE 权限,攻击者可通过 INTO OUTFILE 指令,将恶意的 JSP 代码直接写入网站的根目录,获得 WebShell。
  • 配合后台模板注入: 一旦通过 SQL 注入获取到了管理员权限,登录后台后,可利用 J2eeFAST 自身的模板引擎(如 FreeMarker/Velocity),在模板编辑处注入恶意执行代码,实现真正意义上的 RCE。

3. 内存马植入

  • 在完成 RCE 或 JSP 写马后,为了隐藏行踪,可以利用 Java 反射机制动态注册 FilterInterceptor,将恶意代码驻留在 JVM 内存中,随后删除硬盘上的 JSP 文件,实现无文件持久化后门。

0x04 应急排查与日志痕迹分析

在怀疑遭受 CVE-2023-24162 攻击时,应当重点关注以下几点:

1. 流量与 Web 日志分析

  • 检查 Nginx 或 Tomcat 的 access.log,检索包含 /sys/user/list 且请求方式为 POST 的记录。
  • 查看 HTTP 请求 Body 中是否频繁出现 sqlid= 且带有异常的 SQL 关键字(如 %27, SLEEP, BENCHMARK, SELECT 等)。

2. 数据库日志分析

  • 如果 MySQL 启用了 general_log 或慢查询日志,搜索包含嵌套 SELECTSLEEP 延迟函数、或大量尝试读取 information_schema 库的异常 SQL 语句。

3. 系统异常行为

  • 检查 Web 服务器目录下是否有近期被创建或修改的 .jsp 文件。
  • 监控 Web 进程是否产生了非预期的 Shell 命令调用(如 cmd.exe/bin/sh)。

0x05 修复建议与参考资料

修复建议:

  1. 安全升级: 将 J2eeFAST 升级到 v2.5.0 以上的最新安全版本。
  2. 规范代码: 全面排查项目中所有的 MyBatis XML 映射文件,杜绝在 WHERE 条件、SELECT 列名等位置使用 ${} 拼接字符串。
  3. 权限控制: 限制应用连接数据库的账号权限,剥夺 FILESUPER 等高危权限,避免被提权 GetShell。

参考资料: