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 拼接问题。
- 入口追踪: 漏洞入口位于
SysUserController.java中的list方法。该接口用于处理用户列表的查询请求,并允许前端传入动态查询参数,包括sqlid等。 - 底层执行: 传入的参数会被封装后交由 MyBatis-Plus 处理。在底层的
Mapper.xml配置文件中,开发者为了追求动态拼装 SQL 的灵活性,错误地使用了${}进行变量插值,而不是使用安全的#{}占位符。 - 防御失效: 尽管 J2eeFAST 存在内置的防注入过滤器,但其防御逻辑较为薄弱(例如仅通过简单的
replace处理关键字),攻击者很容易通过组合查询、盲注逻辑或大小写混淆绕过过滤。
0x02 POC (Proof of Concept)
攻击者通常利用 时间盲注 (Time-Based Blind) 或 布尔盲注 (Boolean-Based Blind) 来确认并利用该漏洞。
验证请求示例
触发表现: 如果数据库执行了该 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 反射机制动态注册
Filter或Interceptor,将恶意代码驻留在 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或慢查询日志,搜索包含嵌套SELECT、SLEEP延迟函数、或大量尝试读取information_schema库的异常 SQL 语句。
3. 系统异常行为
- 检查 Web 服务器目录下是否有近期被创建或修改的
.jsp文件。 - 监控 Web 进程是否产生了非预期的 Shell 命令调用(如
cmd.exe或/bin/sh)。
0x05 修复建议与参考资料
修复建议:
- 安全升级: 将 J2eeFAST 升级到 v2.5.0 以上的最新安全版本。
- 规范代码: 全面排查项目中所有的 MyBatis XML 映射文件,杜绝在
WHERE条件、SELECT列名等位置使用${}拼接字符串。 - 权限控制: 限制应用连接数据库的账号权限,剥夺
FILE、SUPER等高危权限,避免被提权 GetShell。
参考资料: