feat: support script engine probe

This commit is contained in:
ReaJason
2025-11-20 00:36:25 +08:00
parent fb5b39a4c6
commit cdb90b6cb1
16 changed files with 146 additions and 13 deletions
@@ -10,5 +10,6 @@ public enum ProbeContent {
JDK,
Bytecode,
Command,
BasicInfo
BasicInfo,
ScriptEngine
}
@@ -9,6 +9,7 @@ import com.reajason.javaweb.probe.config.ResponseBodyConfig;
import com.reajason.javaweb.probe.generator.ByteBuddyShellGenerator;
import com.reajason.javaweb.probe.payload.ByteCodeProbe;
import com.reajason.javaweb.probe.payload.CommandProbe;
import com.reajason.javaweb.probe.payload.ScriptEngineProbe;
import com.reajason.javaweb.probe.payload.response.*;
import com.reajason.javaweb.utils.ShellCommonUtil;
import net.bytebuddy.ByteBuddy;
@@ -51,6 +52,8 @@ public class ResponseBodyGenerator extends ByteBuddyShellGenerator<ResponseBodyC
return CommandProbe.class;
case Bytecode:
return ByteCodeProbe.class;
case ScriptEngine:
return ScriptEngineProbe.class;
default:
throw new GenerationException("responseBody not supported for probe content: " + probeConfig.getProbeContent());
}
@@ -0,0 +1,34 @@
package com.reajason.javaweb.probe.payload;
import lombok.SneakyThrows;
import net.bytebuddy.asm.Advice;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/**
* @author ReaJason
* @since 2025/11/18
*/
public class ScriptEngineProbe {
private final String script;
public ScriptEngineProbe(String script) {
this.script = script;
}
@Advice.OnMethodExit
public static String exit(@Advice.Argument(0) String data, @Advice.Return(readOnly = false) String ret) throws Exception {
ScriptEngine js = new ScriptEngineManager().getEngineByName("js");
if (js == null) {
return ret = "js engine is null";
}
return ret = js.eval(data).toString();
}
@Override
@SneakyThrows
public String toString() {
return ScriptEngineProbe.exit(script, super.toString());
}
}
@@ -0,0 +1,18 @@
package com.reajason.javaweb.probe.payload;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author ReaJason
* @since 2025/11/18
*/
class ScriptEngineProbeTest {
@Test
void test(){
String hello = new ScriptEngineProbe("1 + 1").toString();
assertEquals("2", hello);
}
}