weblogic反序列化,如何控制开放HTTPS服务的weblogic服务器
weblogic反序列化,如何控制开放HTTPS服务的weblogic服务器详细介绍
本文目录一览: weblogic的反序列化漏洞必须开7001端口吗
out.println(path);
%>
使用浏览器访问上述jsp文件,可以看到对应的类所在的jar包的完整路径。
通过上述方法查找“org.apache.commons.collections.map.TransformedMap”所在的jar包,示例如下。
不同版本的weblogic对Apache Commons Collections组件的使用
“org.apache.commons.collections.map.TransformedMap”所在的weblogic的jar包信息如下。
weblogic版本
TransformedMap类所在jar包路径
9.2
无
10.2.1(weblogic 10g)、10.3.4(weblogic 11g)
weblogic安装目录的modules/com.bea.core.apache.commons.collections_3.2.0.jar
12.1.3(weblogic 12c)
weblogic安装目录的wlserver/modules/features/weblogic.server.merged.jar
由于weblogic 9.2未包含TransformedMap类,因此无法触发反序列化漏洞,weblogic 10g、weblogic 11g、weblogic 12c均包含TransformedMap类,因此会触发反序列化漏洞。
0x04 漏洞修复
漏洞修复思路
weblogic的默认服务端口为7001,该端口提供了对HTTP(S)、SNMP、T3等协议的服务。由于weblogic的不同协议均使用一个端口,因此无法通过防火墙限制端口访问的方式防护JAVA反序列化漏洞。
在绝大多数应用的使用场景中,用户只需要在公网能够使用HTTP(S)协议访问web应用服务器即可。对于weblogic服务器,在绝大多数情况下,只需要能够在公网访问weblogic提供的HTTP(S)协议的服务即可,并不需要访问T3协议。
少数情况下,运维人员需要使用weblogic的T3协议:
在weblogic服务器本机执行weblogic的停止脚本;
通过WLST对weblogic进行脚本化配置;
编写使用T3协议通信的程序对weblogic进行状态监控及其他管理功能。
T3协议与HTTP协议均基于TCP协议,T3协议以"t3"开头,HTTP协议以“GET”、“POST”等开头,两者有明显的区别。
因此可以限定只允许特定服务器访问weblogic服务器的T3协议,能够修复weblogic的JAVA反序列化漏洞。即使今后发现了weblogic的其他类存在JAVA反序列化漏洞,也能够防护。
若将weblogic修复为发送T3协议时要求发送weblogic的用户名与密码,也能够修复weblogic的反序列化问题,但会带来密码如何在weblogic客户端存储的问题。
无效的漏洞修复方法
首先尝试将应用部署到非管理Server中,判断其服务端口是否也提供T3协议的服务。
AdminServer是weblogic默认的管理Server,添加一个名为“Server-test”的非管理Server后,weblogic的服务器信息如下。管理Server与非管理Server使用不同的监听端口,可将j2ee应用部署在非管理Server中,这样可以使weblogic控制台与应用使用不同的端口提供服务。
经测试,新增的非管理Server的监听端口也提供了T3协议的服务,也存在JAVA反序列化漏洞。因此这种修复方式对于JAVA反序列化漏洞无效,但可将weblogic控制台端口与应用端口分离,可以使用防火墙禁止通过公网访问weblogic的控制台。
websphere的服务端口
我们来看另一款使用广泛的企业级JAVA中间件:websphere的服务端口情况。从下图可以看到,websphere的应用默认HTTP服务端口为9080,应用默认HTTPS服务端口为9443,控制台默认HTTP服务端口为9060,控制台默认HTTPS服务端口为9043,接收JAVA序列化数据的端口为8880。因此只要通过防火墙使公网无法访问websphere服务器的8880端口,就可以防止通过公网利用websphere的JAVA反序列化漏洞。
网络设备对数据包的影响
对安全有一定要求的公司,在部署需要向公网用户提供服务的weblogic服务器时,可能选择下图的部署架构(内网中不同网络区域间的防火墙已省略)。
上述网络设备对数据包的影响如下。
IPS
IPS可以更新防护规则,可能有厂家的IPS已经设置了对JAVA反序列化漏洞的防护规则,会阻断恶意的JAVA序列化数据包。
防火墙
这里的防火墙指传统防火墙,不是指下一代防火墙,仅关心IP与端口,不关心数据包内容,无法阻断恶意的JAVA序列化数据包。
WAF
与IPS一样,能否阻断恶意的JAVA序列化数据包决定于防护规则。
web代理
仅对HTTP协议进行代理转发,不会对T3协议进行代理转发。
负载均衡
可以指定需要进行负载均衡的协议类型,安全起见应选择HTTP协议而不是TCP协议,只对HTTP协议进行转发,不对T3协议进行转发。
根据以上分析可以看出,web代理和负载均衡能够稳定保证只转发HTTP协议的数据,不会转发T3协议的数据,因此能够防护JAVA反序列化漏洞。
如果在公网访问weblogic服务器的路径中原本就部署了web代理或负载均衡,就能够防护从公网发起的JAVA反序列化漏洞攻击。这也是为什么较少发现大型公司的weblogic反序列化漏洞的原因,其网络架构决定了weblogic的JAVA反序列化漏洞无法在公网利用。
可行的漏洞修复方法
部署负载均衡设备
在weblogic服务器外层部署负载均衡设备,可以修复JAVA反序列化漏洞。
优点
缺点
对系统影响小,不需测试对现有系统功能的影响
需要购买设备;无法防护从内网发起的JAVA反序列化漏洞攻击
部署单独的web代理
在weblogic服务器外层部署单独的web代理,可以修复JAVA反序列化漏洞。
优点
缺点
同上
同上
在weblogic服务器部署web代理
java反序列漏洞,涉及到哪些中间件
目前oracle还没有在公开途径发布weblogic的JAVA反序列化漏洞的官方补丁,目前看到的修复方法无非两条:
使用SerialKiller替换进行序列化操作的ObjectInputStream类;
在不影响业务的情况下,临时删除掉项目里的 "org/apache/commons/collections/functors/InvokerTransformer.class"文件。
ObjectInputStream类为JRE的原生类,InvokerTransformer.class为weblogic基础包中的类,对上述两个类进行修改或删除,实在无法保证对业务没有影响。如果使用上述的修复方式,需要大量的测试工作。且仅仅删除InvokerTransformer.class文件,无法保证以后不会发现其他的类存在反序列化漏洞。
weblogic 10.3.5 java 反序列化漏洞 影响吗
收到影响的,建议修补。
以下版本的weblogic收到此漏洞影响:
- 9.2.3.0
- 9.2.4.0
- 10.0.0.0
- 10.0.1.0
- 10.0.2.0
- 10.2.6.0
- 10.3.0.0
- 10.3.1.0
- 10.3.2.0
- 10.3.4.0
- 10.3.5.0
- 12.1.1.0
Java反序列化安全漏洞怎么回事
第一步:要有加减乘除和退出,五个选项
第二步:要选择做几个题
第三步:要出相应数量和种类的题目
第四步:要判断正确率
第五步:返回主界面
第六步:选择退出后,出现“GoodBy”字样
反序列化顾名思义就是用二进制的形式来生成文件,由于common-collections.jar几乎在所有项目里都会被用到,所以当这个漏洞被发现并在这个jar包内实现攻击时,几乎影响了一大批的项目,weblogic的中枪立刻提升了这个漏洞的等级(对weblogic不熟悉的可以百度)。
至于如何使用这个漏洞对系统发起攻击,举一个简单的例子,我通过本地java程序将一个带有后门漏洞的jsp(一般来说这个jsp里的代码会是文件上传和网页版的SHELL)序列化,将序列化后的二进制流发送给有这个漏洞的服务器,服务器会自动根据流反序列化的结果生成文件,然后就可以大摇大摆的直接访问这个生成的JSP文件把服务器当后花园了。
如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。
所以这个问题的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制;假若反序列化可以设置Java类型的白名单,那么问题的影响就小了很多。
如何控制开放HTTPS服务的weblogic服务器
使用SSL网关提供HTTPS服务
当使用SSL网关提供HTTPS服务时,网络架构如下图所示(无关的设备已省略,下同)。
SSL网关只会向后转发HTTP协议的数据,不会将T3协议数据转发至weblogic服务器,因此在该场景中,无法通过公网利用weblogic的JAVA反序列化漏洞。
使用负载均衡提供HTTPS服务
当使用负载均衡提供HTTPS服务时,网络架构如下图所示。
安全起见,负载均衡应选择转发HTTP协议而不是TCP协议,因此在该场景中,也无法通过公网利用weblogic的JAVA反序列化漏洞。
使用web代理提供HTTPS服务
当使用web代理(如apache、nginx等)提供HTTPS服务时,网络架构如下图所示。
web代理只会向后转发HTTP协议的数据,因此在该场景中,也无法通过公网利用weblogic的JAVA反序列化漏洞。
使用weblogic提供HTTPS服务
当使用weblogic提供HTTPS服务时,网络架构如下图所示。
weblogic能够接收到利用SSL加密后的T3协议数据,因此在该场景中,通过公网能够利用weblogic的JAVA反序列化漏洞。
根据上述分析,仅当HTTPS服务由weblogic提供时,才能够利用其JAVA反序列化漏洞。
0x02 weblogic开放SSL服务时的T3协议格式分析
利用weblogic的JAVA反序列化漏洞时,必须向weblogic发送T3协议头。为了能够利用提供SSL服务的weblogic的JAVA反序列化漏洞,需要首先分析当weblogic提供SSL服务时的T3协议格式。
SSL数据包为加密的形式,无法直接进行分析,需要进行解密。当已知SSL私钥时,可以利用Wireshark对SSL通信数据进行解密。
weblogic可以使用演示SSL证书提供SSL服务,也可以使用指定SSL证书提供SSL服务。
可以使用两种方法进行分析,一是使用weblogic提供的演示SSL证书进行分析,二是使用自己生成的SSL证书进行分析。
使用weblogic演示证书进行分析(方法一)
使用weblogic演示证书开放SSL服务
登录weblogic控制台,将AdminServer的“启用SSL监听端口”钩选,并填入SSL监听端口号。
查看AdminServer的密钥库配置,确认为“演示标识和演示信任”(Demo Identity and Demo Trust),可以看到演示密钥库的文件名为“DemoIdentity.jks”,演示信任密钥库文件名为“DemoTrust.jks”。
查看AdminServer的SSL配置,可以看到演示密钥库的私钥别名为“DemoIdentity”。
使用HTTPS方式登录weblogic控制台,确认可以正常登录。
如何查看weblogic中https协议使用哪种算法
目前在公开途径还没有看到利用JAVA反序列化漏洞控制开放HTTPS服务的weblogic服务器的方法,已公布的利用工具都只能控制开放HTTP服务的weblogic服务器。我们来分析一下如何利用JAVA反序列化漏洞控制开放HTTPS服务的weblogic服务器,以及相应的防护方法。
建议先参考 修复weblogic的JAVA反序列化漏洞的多种方法 中关于weblogic的JAVA反序列化漏洞的分析。
0x01 HTTPS服务的架构分析
如果某服务器需要对公网用户提供HTTPS服务,可以在不同的层次实现。
使用SSL网关提供HTTPS服务
当使用SSL网关提供HTTPS服务时,网络架构如下图所示(无关的设备已省略,下同)。
SSL网关只会向后转发HTTP协议的数据,不会将T3协议数据转发至weblogic服务器,因此在该场景中,无法通过公网利用weblogic的JAVA反序列化漏洞。
java反序列化漏洞 weblogic 删除哪个包
com.bea.core.appache.commons.collections
common-collections.jar 不是删是改里面的一些代码,当然有些项目里没用到的删了也不影响
java反序列化终极测试工具怎么打开
#include "stdafx.h"
#include
int main()
{
float x = 0.1;
if (x == 0.1)
printf("IF");
else if (x == 0.1f)
printf("ELSE IF");
else
printf("ELSE");
}
Java反序列化终极测试工具是一款检测java反序列化漏洞工具,直接将Jboss、Websphere和weblogic的反序列化漏洞的利用集成到了一起。
关于java序列化的问题
我觉得Connection这个类没有必要序列化,你把Connection对象通过session传递有什么用处呢,Connection应该是一个对数据库的连接,你如果想让接收方对数据库进行连接的话,应该在传递的时候传递远程数据库的连接方式,比如驱动链接,数据库地址,数据库用户名密码等等,接收方在操作的时候新建立一个Connection对象用你传递给他的信息进行连接就可以了.
而关于建立一个Connection所需要的条件的封装,序列化,传递应该很简单吧!
at weblogic.servlet.internal.session.SessionData.getAttribute(SessionDat
首先说明一下序列化的知识:
java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI等技术都是以此为基础的。
序列化机制是通过java.io.ObjectOutputStream类和java.io.ObjectInputStream类来实现的。在序列化(serialize)一个对象的时候,会先实例化一个ObjectOutputStream对象,然后调用其writeObject()方法;在反序列化(deserialize)的时候,则会实例化一个ObjectInputStream对象,然后调用其readObject()方法。
上面您的错误,就是在于有一个或者几个没有"序列化"的数据,导致没有办法创建输出流,导致发生的java.io.NotSerializableException。
之所以要序列化,我猜测是因为您的数据里面存在一个对象型的数据,但是该对象没有实现序列化。比如:您有一个字段为address,这个字段您是通过一个类Address来描述的,Address里面可能有province、city、street等等属性或者一些setter 和getter,如果这个类,没有实现序列化,往往会出现这个问题。
毕竟没有看到程序,是我的一个猜测,请检查一下程序或者发出来进行进一步讨论。
weblogic10.3.6升级补丁,启动受管服务报错,MarshalledObject
java.lang.IncompatibleClassChangeError是类兼容性错误,后面weblogic.corba.utils.MarshalledObject应该就是出问题类了。从问题看,打了3个补丁:p22505423_1036_Generic、p23094342_1036_Generic、p24667634_1036_Generic,
从Oracle官方MOS看:
p22505423是升级到10.3.6.0.160419的补丁集(已被新版本补丁集取代)。
p23094342是升级到10.3.6.0.160719的补丁集(已被新版本补丁集取代)。
查到这里,我就没有查第三个补丁了。
首先,补丁集每个季度都有新版本更新的,且会替换老版本的补丁集,你打了两个版本的补丁集,本身就会有补丁集冲突,启动受管服务的时候报错也就是理所应当的了,同时,前段时间反序列化漏洞人心惶惶,你这两个版本的补丁本身就已经证明存在反序列漏洞,我个人不建议使用。