common-collections中Java反序列化漏洞导致的RCE原理分析

华盟原创文章投稿奖励计划

  0x00

  这几天在zone看到了有人提及了有关于common-collections包的RCE漏洞,并且http://zone.wooyun.org/content/23849给出了具体的原理。作为一个业余的安全研究人员,除了会利用之外,还可以探究一下背后的原理。

  0x01

  Java反序列化导致的漏洞原理上和PHP反序列一样,也是由于用户的输入可以控制我们传入的对象。如果服务端程序没有对用户可控的序列化代码进行校验而是直接进行反序列化使用,并且程序中运行一些比较危险的逻辑(如eval,登录验证等),就会触发一些意想不到的漏洞。实际上,这并不是什么新的问题了,有关于Java中的反序列化导致的漏洞可以看:

  https://speakerdeck.com/player/2630612322be4a2696a31775f2ed005d

  的slide了解一下。 而这次,主要探讨一下在特殊环境下,反序列化能否达到远程代码执行(RCE)。 参考文章3中给出了exp,并且在zone上有了很多的讨论,配合github上的jar文件生成一个序列化字符串,然后发送给漏洞站点就能触发。关于利用,并不是本文的重点。 问题从common-collections工具的各个transformer说起,这些transform主要用于对Map的键值进行转化。

  

common-collections中Java反序列化漏洞导致的RCE原理分析

  其中,国外研究人员发现类InvokerTransformer中的transform方法允许通过反射执行参数对象的某个方法,并返回执行结果。

  

common-collections中Java反序列化漏洞导致的RCE原理分析

  我们来写个代码测试一下:

  

以下是代码片段:

本文原创,作者:华盟君,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/22259.html

发表评论