Java反序列化安全漏洞怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java反序列化安全漏洞怎么回事相关的知识,希望对你有一定的参考价值。

反序列化顾名思义就是用二进制的形式来生成文件,由于common-collections.jar几乎在所有项目里都会被用到,所以当这个漏洞被发现并在这个jar包内实现攻击时,几乎影响了一大批的项目,weblogic的中枪立刻提升了这个漏洞的等级(对weblogic不熟悉的可以百度)。

至于如何使用这个漏洞对系统发起攻击,举一个简单的例子,我通过本地java程序将一个带有后门漏洞的jsp(一般来说这个jsp里的代码会是文件上传和网页版的SHELL)序列化,将序列化后的二进制流发送给有这个漏洞的服务器,服务器会自动根据流反序列化的结果生成文件,然后就可以大摇大摆的直接访问这个生成的JSP文件把服务器当后花园了。
如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。

所以这个问题的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制;假若反序列化可以设置Java类型的白名单,那么问题的影响就小了很多。
参考技术A 第一步:要有加减乘除和退出,五个选项
第二步:要选择做几个题
第三步:要出相应数量和种类的题目
第四步:要判断正确率
第五步:返回主界面
第六步:选择退出后,出现“GoodBy”字样

JAVA反序列化漏洞解决办法

一、漏洞描述:

近期,反序列化任意代码执行漏洞持续发酵,越来越多的系统被爆出存在此漏洞。Apache Commons工具集广泛应用于JAVA技术平台,存在Apache Commons Components InvokerTransformer反序列化任意代码执行漏洞, WebLogic、IBM WebSphere、JBoss、Jenkins和OpenNMS等应用都大量调用了Commons工具集,通过远程代码执行可对上述应用发起远程攻击。

二、漏洞解决办法:

1 使用 SerialKiller 替换进行序列化操作的 ObjectInputStream 类;
2 在不影响业务的情况下,临时删除掉项目里的“org/apache/commons/collections/functors/InvokerTransformer.class” 文件;
在服务器上找org/apache/commons/collections/functors/InvokerTransformer.class类的jar,目前weblogic10以后都在Oracle/Middleware/modules下com.bea.core.apache.commons.collections_3.2.0.jar,创建临时目录tt,解压之后删除InvokerTransformer.class类后再打成com.bea.core.apache.commons.collections_3.2.0.jar覆盖Oracle/Middleware/modules下,重启所有服务。如下步骤是linux详细操作方法:
A)mkdir tt
B)cp -r Oracle/Middleware/modules/com.bea.core.apache.commons.collections_3.2.0.jar ./tt
C)jar xf Oracle/Middleware/modules/com.bea.core.apache.commons.collections_3.2.0.jar
D)cd org/apache/commons/collections/functors
E)rm -rf InvokerTransformer.class
F)jar cf com.bea.core.apache.commons.collections_3.2.0.jar org/* META-INF/*
G)mv com.bea.core.apache.commons.collections_3.2.0.jar Oracle/Middleware/modules/
H)重启服务


三、漏洞解决办法:
1、假如不是处理weblogic自带的com.bea.core.apache.commons.collections_3.2.0.jar,而是修改应用代码collections_*.jar,一定在发版本不能覆盖。应用覆盖、备份恢复的时候和发版本的时候也请切记不要覆盖掉修改后的JAR文件。
2、重启服务时候要删除server-name下的cache和tmp
例如rm -rf ~/user_projects/domains/base_domain/servers/AdminServer/cache
rm -rf  ~/user_projects/domains/base_domain/servers/AdminServer/tmp

以上是关于Java反序列化安全漏洞怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

Java反序列化漏洞——反射与反序列化基础

如何查出漏洞weblogic java反序列化漏洞补丁存在绕过风险

php unserialize()不能反序列化时怎么做才能不提示错误

Java反序列化漏洞(ysoserial工具使用shiro反序列化利用)

初探Java反序列化漏洞学习笔记

java反序列化漏洞原理研习