GroovyExec
LoadJsExec
ProcessImplExec
ProcessBuilderExec
RuntimeExecRuntime.exec() 命令执行
// 1.### . Runtime.exec() 命令执行
// 危险示例:直接拼接用户输入
public void runtimeExec(String userInput) throws IOException {
// 假设用户输入为 "id; rm -rf /*"
String command = "ping " + userInput;
Runtime.getRuntime().exec(command);
}
ProcessBuilder
//2.### ProcessBuilder命令执行
// 危险示例:让用户控制命令或参数
public void processBuilderExec(String userParam) throws IOException {
// userParam 可能是 "127.0.0.1; id"
new ProcessBuilder("ping", "-c", "1", userParam).start();
}ProcessImpl
//3.### ProcessImpl命令执行(反射调用)
// 通过反射调用 ProcessImpl.start() 执行命令
public void processImplReflect(String cmd) throws Exception {
Class<?> clazz = Class.forName("java.lang.ProcessImpl");
// 第一个参数是命令数组,第二个参数是环境变量(可为null),第三个参数是工作目录(可为null)
Method startMethod = clazz.getDeclaredMethod("start", String[].class, java.util.Map.class, String.class, ProcessBuilder.Redirect[].class, boolean.class);
startMethod.setAccessible(true);
// 执行 id 命令
startMethod.invoke(null, new String[]{"/bin/sh", "-c", cmd}, null, null, null, false);
}Groovy
//4。### Groovy 脚本引擎执行
import groovy.lang.GroovyShell;
// 危险示例:直接执行用户提供的 Groovy 代码
public void groovyExec(String userGroovyCode) {
GroovyShell shell = new GroovyShell();
// userGroovyCode 可以是 "Runtime.getRuntime().exec('calc')"
shell.evaluate(userGroovyCode);
}
LoadJsExec
//5.### LoadJsExec (使用 ScriptEngine 加载 JS)
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public void loadJsExec(String userJsCode) throws Exception {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
// userJsCode 可以是: var a = java.lang.Runtime.getRuntime().exec("calc");
engine.eval(userJsCode);
}