@Dukebf
2017-08-28T00:57:50.000000Z
字数 2808
阅读 1673
web安全
java安全
前人轮子:
修复weblogic的JAVA反序列化漏洞的多种方法图
我是如何造Weblogic反序列化漏洞EXP的轮子
我是如何造Weblogic反序列化漏洞EXP的轮子 github代码
What Do WebLogic, WebSphere, JBoss, Jenkins, OpenNMS, and Your Application Have in Common? This Vulnerability.
docker 命令:
docker run -i -t -p 7001:7001 -p 8101:8101 -p 5556:5556 oracle/weblogic1221:latest
在Wireshark中,客户端向服务器发送的数据显示为红色,服务器向客户端返回的数据显示为蓝色。
当weblogic客户端向weblogic服务器发送序列化数据时,发送的第一个包为T3协议头.
注:可以使用ObjectInputStream.readObject方法解析weblogic调用停止脚本时发送的JAVA序列化数据的结构
已知JAVA序列化数据的前4个字节为“AC ED 00 05”
使用十六进制形式查看数据包.java
从上图可以看到,weblogic发送的JAVA序列化数据分为7个部分,第一部分的前四个字节为整个数据包的长度(1711=0x6AF),第二至七部分均为JAVA序列化数据。
此外,weblogic发送的数据包格式如下:
在利用weblogic的JAVA反序列化漏洞时,需要向weblogic发送两个数据包。
第一个数据包为T3的协议头。
经测试,使用“t3 9.2.0\nAS:255\nHL:19\n\n”字符串作为T3的协议头发送给weblogic9、weblogic10g、weblogic11g、weblogic12c均合法。向weblogic发送了T3协议头后,weblogic也会返回相应的数据,以“\n\n”结束.
也可以使用12.2.1的版本的头部.
第二个数据包为JAVA序列化数据,可采用两种方式产生。
在利用weblogic的JAVA反序列化漏洞时,weblogic会抛出异常,但是weblogic已经对恶意的序列化数据执行了readObject方法,漏洞仍然会触发。
经测试,必须先发送T3协议头数据包,再发送JAVA序列化数据包,才能使weblogic进行JAVA反序列化,进而触发漏洞。如果只发送JAVA序列化数据包,不先发送T3协议头数据包,无法触发漏洞。
由于只有Collections的特定组件才会引起反序列化漏洞
可通过以下方法准确判断weblogic是否使用了Apache Commons Collections组件特定的JAVA类。
在weblogic中任意安装一个j2ee应用,在某个jsp中写入以下代码。
<%
String path = [需要查找的类的完整类名].class.getResource("").getPath();
out.println(path);
%>
通过浏览器访问运行,可以看到对应的类所在的jar包的完整路径。
通过上述方法查找“org.apache.commons.collections.map.TransformedMap”所在的jar包.
不同版本的不同版本的weblogic对Apache Commons Collections组件的使用情况如下:
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类,因此会触发反序列化漏洞。
weblogic的默认服务端口为7001,该端口提供了对HTTP(S)、SNMP、T3等协议的服务。由于weblogic的不同协议均使用一个端口,因此无法通过防火墙限制端口访问的方式防护JAVA反序列化漏洞。
T3协议与HTTP协议均基于TCP协议,T3协议以"t3"开头,HTTP协议以“GET”、“POST”等开头,两者有明显的区别。因此可以限定只允许特定服务器访问weblogic服务器的T3协议,能够修复weblogic的JAVA反序列化漏洞。
若将weblogic修复为发送T3协议时要求发送weblogic的用户名与密码,也能够修复weblogic的反序列化问题,但会带来密码如何在weblogic客户端存储的问题。
使用防火墙禁止通过公网访问weblogic的控制台.
部署负载均衡或者使用web代理
此外,当部署负载均衡或者使用web代理时,可以起到防护作用,原理如下:
在用户访问服务器的路径中:
web代理
会经过web代理时,在web代理这一层,只对http协议进行代理转发,不转发t3协议.
负载均衡
在进行负载均衡的配置中,只对http协议进行转发.