0x01 前言

CNCERT前几天发公告称发现Oracle公司出品的基于JavaEE结构的中间件WebLogic产品存在一个远程上传漏洞,并得到了厂商的确认,危害程度评分高达9.8分。鉴于厂商已进行了安全修复,笔者对该漏洞进行了一次分析。WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限。两个页面分别为/ws_utc/begin.do,/ws_utc/config.do;漏洞的影响范围 Oracle WebLogic Server,版本10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3;相关链接: http://www.oracle.com/technetwork/security-advisory/cpujul2018-4258247.html#AppendixFMW  , 下文笔者从这两个文件入手来系统调试跟踪找出漏洞产生的原理和位置。

0x02 漏洞流程

笔者首先访问了一下 http://IP/ws_utc/config.do  并且将默认的目录WSTestPageWorkDir修改了为 user_projects\domains\base_domain\tmp\sd\  如下图

工作台设置一个新的目录后,weblogic会将原来目录下的子目录和文件一起转移到新设定的目录下,但旧的目录依然保留。因为不是重点,笔者对这块的分析就此略过。笔者从攻击者的维度简单的画了一个草图,最初攻击者肯定需要配置工作目录,因为默认的工作目录在URL访问的时候不可达,然后攻击者考虑是从config.do页面上传keystore文件还是从begin.do上传,最终都是成功上传小马,只是小马的访问格式和路径不尽相同。如下图

如果要从原理上彻底搞清楚weblogic漏洞产生的过程还需要看下图,简单的描述一下,攻击者开始攻击后,Weblogic在服务端做了很多的判断,如果设定了新的工作目录,那么程序会自动拷贝所有旧目录下的子目录和文件到新的设定目录里,并且设定新的目录作为工作目录,如果攻击者通过begin.do上传的话,Weblogic在服务端会判断有没有upload目录,如果不存在会自动创建,再接着在upload目录下创建Rs_Upload_格式化后的作为目录名,紧接着获取到import_file_name字段名作为后续的文件名拼接的一部分;如果通过config.do上传的话就获取GET请求中的timestamp参数作为后续webshell的文件名中的一部分,还是看下图吧:

0x03 begin.do页面上传漏洞

首先在IDE里搭建好WebLogic环境,把应用跑起来后点击页面右上方的文件夹按钮,这里实现的是一个导入的功能

选择任意文件上传,笔者选择上传jsp文件

抓取数据包可以看到其实真正存在上传漏洞的地址是

http://IP:7001/ws_utc/resources/ws/config/import?timestamp=1532403983779

因为是漏洞复现和分析,笔者一边上传的时候就一边把数据包抓取下来,得到下图的HTTP

这段没什么可说的就是一个简单的上传数据流,表单字段import_file_name是关键值,从产品防御的角度来看检测它们也是关键的特征之一。

接下来就需要在IDE里动态定位到漏洞的触发点,因为weblogic大多数漏洞都和T3协议有关联,根据之前分析过的weblogic漏洞定位的调试断点是在com.bea.core.weblogic.rmi.client_4.0.0.0.jar包里,多次调试后一步步跳转到了漏洞触发的核心包

并且查到了对应的触发漏洞类名的位置 : \com\oracle\webservices\testclient\ws\util\RSDataHelper.class

定位到的方法convertFormDataMultiPart,代码如下:

代码中检查了当前工作目录下是否存在upload目录,如果没有的话则创建,并且调用了cleanObsoleteFile方法强制遍历了一次目录中所有的文件,并且发现文件就删除掉,调试过程如下图

再创建了一个以字符串Rs_Upload_打头的加格式化后的时间命名的目录,并且作为上传文件保存的目录。

接下来程序获得了上传的表单的form-data , 经过循环遍历获取了所有的表单字段和对应的value,数据做两块存储,一块保存在kvMap集合中、获取的附件通过saveAttacheFile方法保存到磁盘中,代码如下

下图红圈处是拼接后的物理路径名

接着追踪调试到 execute方法,位于ImportTestCaseAction.class类

\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\com.oracle.webservices.wls.ws-testclient-app-wls_12.1.3\cmprq0\war\WEB-INF\lib\ws-testpage-impl.jar!\com\oracle\webservices\testclient\ws\action\ImportTestCaseAction.class

由于笔者导入的文件格式以及数据并非weblogic能处理的,所以程序在context.createUnmarshaller方法处抛出空指针异常的错误,这就导致了上传成功后Response的状态码是500,这也可以作为防御产品检测的特征之一。动态调试异常如下图

到此begin.do页面未授权访问引起的任意文件上传漏洞已经很明朗,防御的策略可以检测表单字段

0x04 config.do页面上传漏洞

访问 http://IP:7001/ws_utc/config.do 页面后点击左侧的“安全”菜单,添加一个Keystore,任意设置名字和密码,当然文件也是任意格式上传,这里真的很随意。

点击提交后,抓取触发地址: http://IP/ws_utc/resources/setting/keystore?timestamp=1532400069848 ; 抓取的包如下

和之前的套路一样,上传的时候就已经打开了IDE调试功能,断点后还是定位到 RSDataHelper.class 文件,如下图

这次获取的表单字段是ks_filename,值得收藏,加入特征检测范畴内;再跟进看下关键的shell生成那一步

上传后的shell位于工作台配置的目录下的/config/keystore/目录中,文件名的格式相对来说简单,采用了POST请求中URL地址上携带的参数timestamp的值加上下划线拼接起来的文件名,让笔者大跌眼镜的是weblogic作为知名软件提供商存在这样低级的漏洞实在匪夷所思,再加上其一系列的反序列化绕过漏洞,只能说weblogic的产品能不用就不用,实在不行少用为妙。

0x05 防御措施

  1. 设置Config.do、begin.do页面登录授权后访问;
  2. IPS等防御产品可以加入相应的特征;
  3. 升级到官方最新版本;

0x06参考链接

https://www.secrss.com/articles/4008

http://www.oracle.com/technetwork/security-advisory/cpujul2018-4258247.html#AppendixFMW

WebLogic 两处任意文件上传漏洞动态分析(CVE-2018-2894)的更多相关文章

  1. PHP任意文件上传漏洞CVE-2015-2348浅析

    昨晚安全新闻爆出一个“PHP任意文件上传漏洞”,CVE编号为:CVE-2015-2348. 当时楼主正准备收拾东西回家,看到这个新闻心里一惊:失传江湖多年的0字符截断上传漏洞又重现了?而且还影响这么多 ...

  2. 13.Weblogic任意文件上传漏洞(CVE-2018-2894)复现

    Weblogic任意文件上传漏洞(CVE-2018-2894)复现 漏洞背景 WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限.两个页面分别为/ws_utc/be ...

  3. WebLogic任意文件上传漏洞(CVE-2019-2618)

    WebLogic任意文件上传漏洞(CVE-2019-2618) 0x01 漏洞描述 漏洞介绍 CVE-2019-2618漏洞主要是利用了WebLogic组件中的DeploymentService接口, ...

  4. CVE-2019-2618任意文件上传漏洞复现

    CVE-2019-2618任意文件上传漏洞复现 漏洞介绍: 近期在内网扫描出不少CVE-2019-2618漏洞,需要复测,自己先搭个环境测试,复现下利用过程,该漏洞主要是利用了WebLogic组件中的 ...

  5. 【原创】JEECMS v6~v7任意文件上传漏洞(1)

    文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...

  6. 中国电信某站点JBOSS任意文件上传漏洞

    1.目标站点 http://125.69.112.239/login.jsp 2.简单测试 发现是jboss,HEAD请求头绕过失败,猜测弱口令失败,发现没有删除 http://125.69.112. ...

  7. CKFinder 1.4.3 任意文件上传漏洞

    CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...

  8. WordPress Contact Form 7插件任意文件上传漏洞

    漏洞名称: WordPress Contact Form 7插件任意文件上传漏洞 CNNVD编号: CNNVD-201311-415 发布时间: 2013-11-28 更新时间: 2013-11-28 ...

  9. WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞

    漏洞名称: WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-403 发布时间: 2013-11-28 更新 ...

随机推荐

  1. 【UVA】11825 Hackers' Crackdown(状压dp)

    题目 传送门:QWQ 分析 $ n<= 16 $ 显然是状压 然后搞一搞(靠着蓝书yy一下) 代码 #include <bits/stdc++.h> using namespace ...

  2. 给iOS开发新手送点福利,简述UIView的属性和用法

    UIView 1.alpha 设置视图的透明度.默认为1. // 完全透明 view.alpha = 0; // 不透明 view.alpha = 1; 2.clipsToBounds // 默认是N ...

  3. go run helper

    # go run helper -a :强制编译相关代码,不论编译代码是否最新 -n :打印编译过程需要用到的命令,但不真正执行他们 -p n :并行编译,n为并行的数量 -v :列出被编译的代码包的 ...

  4. Python运维开发基础03-语法基础

    上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现" ...

  5. 新手C#string类常用函数的学习2018.08.04

    ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower ...

  6. dubbo 提供者 ip不对

    1.服务器多网卡绑定,导致服务起来后程序自己选择的ip不对. 2.提供服务的机器开启了vpn. 3.dubbo配置文件中写死了host. 以下为转载:转自http://www.ithao123.cn/ ...

  7. Varint 数值压缩

    [Varint 数值压缩] Varint 是一种紧凑的表示数字的方法.它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数.这能减少用来表示数字的字节数.比如对于 int32 类型的数字,一 ...

  8. 什么是UE、UI、UCD、UED?UE、UI、UCD、UED四者的区别(转)

    字面释义: UE (User Experience) : 用户体验 UI (User Interface) : 用户界面 UCD (User-Centered Design) :以用户为中心的设计 U ...

  9. 无法启动Tomcat, 端口被占用的问题

    这个错误是说这几个端口已经有某个应用程序占用了,所以Tomcat就没法启动了.   出现这个问题的原因可能有以下几种: 情况一:点击运行的时候没有选中页面或Servlet窗口的标签 标签被选中时: 标 ...

  10. 什么是http头信息

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET.POST.PU ...