From cdb90b6cb15d64d3bae336a11b05332d6b372aa9 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Tue, 18 Nov 2025 20:24:21 +0800 Subject: [PATCH] feat: support script engine probe --- .../reajason/javaweb/probe/ProbeContent.java | 3 +- .../response/ResponseBodyGenerator.java | 3 ++ .../probe/payload/ScriptEngineProbe.java | 34 ++++++++++++++++++ .../probe/payload/ScriptEngineProbeTest.java | 18 ++++++++++ .../javaweb/integration/ProbeAssertion.java | 32 +++++++++++++++++ .../probe/tomcat/Tomcat10ContainerTest.java | 9 ++++- .../probe/tomcat/Tomcat5ContainerTest.java | 7 ++++ .../probe/tomcat/Tomcat6ContainerTest.java | 7 ++++ .../probe/tomcat/Tomcat7ContainerTest.java | 9 ++++- .../probe/tomcat/Tomcat8ContainerTest.java | 9 ++++- .../probe/tomcat/Tomcat9ContainerTest.java | 9 ++++- web/bun.lockb | Bin 212284 -> 216652 bytes web/package.json | 6 ++-- .../probeshell/main-config-card.tsx | 9 ++--- web/src/i18n/probeshell/en.json | 1 + web/src/i18n/probeshell/zh-CN.json | 3 +- 16 files changed, 146 insertions(+), 13 deletions(-) create mode 100644 generator/src/main/java/com/reajason/javaweb/probe/payload/ScriptEngineProbe.java create mode 100644 generator/src/test/java/com/reajason/javaweb/probe/payload/ScriptEngineProbeTest.java diff --git a/generator/src/main/java/com/reajason/javaweb/probe/ProbeContent.java b/generator/src/main/java/com/reajason/javaweb/probe/ProbeContent.java index 03dd6b72..b5f4a6ad 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/ProbeContent.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/ProbeContent.java @@ -10,5 +10,6 @@ public enum ProbeContent { JDK, Bytecode, Command, - BasicInfo + BasicInfo, + ScriptEngine } diff --git a/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java b/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java index a63a875f..0e94fa67 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java @@ -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 { const filterMap = { - ResponseBody: ["Command", "Bytecode"], + ResponseBody: ["Command", "Bytecode", "ScriptEngine"], DNSLog: ["JDK", "Server"], Sleep: ["Server"], } as const; @@ -207,12 +208,12 @@ export default function MainConfigCard({ form, servers }: MainConfigCardProps) { const renderDynamicFields = useCallback(() => { const isBodyMethod = watchedProbeMethod === "ResponseBody"; - const isCommandOrBytecode = - watchedProbeContent === "Command" || watchedProbeContent === "Bytecode"; + const needParam = + watchedProbeContent === "Command" || watchedProbeContent === "Bytecode" || watchedProbeContent === "ScriptEngine"; const isSleepMethod = watchedProbeMethod === "Sleep"; const isServerContent = watchedProbeContent === "Server"; - if (isBodyMethod && isCommandOrBytecode) { + if (isBodyMethod && needParam) { return RequestParamField; } diff --git a/web/src/i18n/probeshell/en.json b/web/src/i18n/probeshell/en.json index 9df96e4a..aeadd073 100644 --- a/web/src/i18n/probeshell/en.json +++ b/web/src/i18n/probeshell/en.json @@ -3,6 +3,7 @@ "dnslog.host": "DNSLog Host", "probeContent": "ProbeContent", "probeContent.bytecode": "Bytecode", + "probeContent.script": "ScriptEngine", "probeContent.command": "Command", "probeContent.jdk": "JDK", "probeContent.server": "Server", diff --git a/web/src/i18n/probeshell/zh-CN.json b/web/src/i18n/probeshell/zh-CN.json index 7379bb2c..4ecc3f47 100644 --- a/web/src/i18n/probeshell/zh-CN.json +++ b/web/src/i18n/probeshell/zh-CN.json @@ -2,7 +2,8 @@ "buttons.generate": "生成探测马", "dnslog.host": "DNSLog 地址", "probeContent": "探测内容", - "probeContent.bytecode": "自定义字节码执行", + "probeContent.bytecode": "字节码执行", + "probeContent.script": "脚本引擎执行", "probeContent.command": "命令执行", "probeContent.jdk": "JDK 信息", "probeContent.server": "服务类型",