JAVA反序列化

利用java反序列化实现RCE。

转自:https://security.tencent.com/index.php/blog/msg/97

若java应用没有对传入的序列化数据进行安全性检查,可以将恶意的TransformedMap序列化后,远程提交给Java应用,如果Java应用可以触发变换,即可成功远程命令执行。

如何让Java应用触发Transformer的变换?

在进行反序列化时,会调用ObjectInputStream类的readObject()方法。如果被反序列化的类重写了readObject(),那么该类在进行反序列化时,Java会优先调用重写的readObject()方法。

结合前述Commons Collections的特性,如果某个可序列化的类重写了readObject()方法,并且在readObject()中对Map类型的变量进行了键值修改操作,并且这个Map变量是可控的,就可以实现我们的攻击目标了。

于是找到了这个类:AnnotationInvocationHandler。该类的代码如下:

简直完美。它的成员变量memberValue为Map 类型,并且在重写的readObject()方法中有memberValue.setValue()的操作。

我们可以实例化一个AnnotationInvocationHandler类,将其成员变量memberValues赋值为精心构造的恶意TransformedMap对象。然后将其序列化,提交给未做安全检测的Java应用。Java应用在进行反序列化操作时,则会触发TransformedMap的变换函数,执行预设的命令。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、背景 2015年11月6日FoxGlove Security安全团队的@breenmachine 发布了一篇长...
    Jewel591阅读 17,086评论 0 4
  • Java 反序列化攻击漏洞由 FoxGlove 的最近的一篇博文爆出,该漏洞可以被黑客利用向服务器上传恶意脚本,或...
    OneAPM阅读 3,490评论 0 0
  • 转自:paper.tuisec.win/detail.jsp 序列化就是把对象转换成字节流,便于保存在内存、文件、...
    sum3mer阅读 5,399评论 0 2
  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 13,743评论 0 24
  • 你送给我的第七朵玫瑰花已经枯萎了 它占据了一整个漫长而又炎热的夏天 我以为它死于饥渴或者隐匿的寂寞 也许是短暂的爱...
    爱酱lll阅读 3,798评论 69 35