feat: support FilterProbe generate

This commit is contained in:
ReaJason
2026-01-12 02:12:34 +08:00
parent 52437d67be
commit fa92930353
14 changed files with 137 additions and 137 deletions
@@ -3,6 +3,7 @@ package com.reajason.javaweb.probe.config;
import com.reajason.javaweb.utils.CommonUtil;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.StringUtils;
@@ -26,6 +27,7 @@ public class ResponseBodyConfig extends ProbeContentConfig {
/**
* 内置执行类加载的字节码
*/
@Setter
private String base64Bytes;
/**
@@ -10,6 +10,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.FilterProbeFactory;
import com.reajason.javaweb.probe.payload.ScriptEngineProbe;
import com.reajason.javaweb.probe.payload.response.*;
import com.reajason.javaweb.utils.ShellCommonUtil;
@@ -37,11 +38,14 @@ public class ResponseBodyGenerator extends ByteBuddyShellGenerator<ResponseBodyC
@Override
protected DynamicType.Builder<?> build(ByteBuddy buddy) {
String name = probeContentConfig.getReqParamName();
Class<?> getDataFromReqInterceptor = getDataFromReqInterceptor.class;
if (Server.Jetty.equals(probeContentConfig.getServer())) {
String server = probeContentConfig.getServer();
if (Server.Jetty.equals(server)) {
getDataFromReqInterceptor = getDataFromReqJettyInterceptor.class;
}
if (ProbeContent.Filter.equals(probeConfig.getProbeContent())) {
probeContentConfig.setBase64Bytes(FilterProbeFactory.getBase64ByServer(server));
}
Class<?> writerClass = getWriterClass();
Class<?> runnerClass = getRunnerClass();
DynamicType.Builder<?> builder = buddy.redefine(writerClass)
@@ -53,12 +57,12 @@ public class ResponseBodyGenerator extends ByteBuddyShellGenerator<ResponseBodyC
.on(named("run")));
String base64Bytes = probeContentConfig.getBase64Bytes();
if (ProbeContent.Bytecode.equals(probeConfig.getProbeContent())
&& StringUtils.isNotBlank(base64Bytes)) {
|| StringUtils.isNotBlank(base64Bytes)) {
builder = builder.method(named("getDataFromReq")).intercept(FixedValue.value(base64Bytes));
} else {
builder = builder.visit(MethodCallReplaceVisitorWrapper.newInstance("getDataFromReq",
probeConfig.getShellClassName(), ShellCommonUtil.class.getName()))
.visit(Advice.withCustomMapping().bind(ValueAnnotation.class, name)
.visit(Advice.withCustomMapping().bind(ValueAnnotation.class, probeContentConfig.getReqParamName())
.to(getDataFromReqInterceptor).on(named("getDataFromReq")));
}
return builder;
@@ -69,6 +73,7 @@ public class ResponseBodyGenerator extends ByteBuddyShellGenerator<ResponseBodyC
case Command:
return CommandProbe.class;
case Bytecode:
case Filter:
return ByteCodeProbe.class;
case ScriptEngine:
return ScriptEngineProbe.class;