zoukankan      html  css  js  c++  java
  • weblogic漏洞的日志分析和调查取证

    一、WebLogic简介:

      1.WebLogic简介:

      WebLogic是著名的Oracle公司开发的Application Server,是第一个成功商业化的J2EE中间件、容器,用于开发、集成、部署、管理大型&分布式Web应用、网络应用和数据库应用等;

      WebLogic是基于标准化、模块化的组件,提供完整的服务,无需编程即可自动处理应用行为的很多细节;

      Weblogic使用独有的T3协议(T3协议:WebLogic最早由 WebLogic Inc. 开发,后并入BEA公司,最终BEA公司又并入Oracle公司,T3协议为BEA公司的内部协议);

      Weblogic的市场份额还算比较稳定,主要在大型商用系统使用,高并发,与Oracle的产品线联动配合,如图(2017年Java应用服务市场份额占比):

     

       2.WebLogic漏洞介绍:

      <1>.漏洞介绍:

        近年来,缝缝补补的Weblogic,深受Java反序列、SSRF、组件Getshell、弱口令等高危漏洞影响,如图(Weblogic反序列化漏洞历史):

    漏洞影响:Weblogic 10.3.x、Weblogic 12.1.x、Weblogic 12.2.x等系列产品

        序列化与反序列化技术:

          序列化和反序列化,是Java引入的数据传输和存储接口技术;

          序列化:用于将对象(Object)转换成二进制串数据存储,对应着writeObject方法;

          反序列化:洽好相反,将二进制串数据转换成对象(Object),对应着readObject方法,

          序列化与反序列化,是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。

        反序列化使用场景:

          HTTP:多平台之间的通信、管理等;

          RMI:Java的一组拥护开发分布式应用程序的API,实现了不同OS之间程序的方法调用(注:RMI传输,100%基于反序列化。Java RMI的默认端口是1099端口;)。

          JMX:JMX是一套标准的代理和服务,用户可在任何Java应用程序中使用这些代理和服务实现管理(注:Weblogic管理页面是基于JMX开发的,JBoss整个系统都基于JMX构架。)。

       <2>.漏洞分析:

        CVE-2015-4852:

          Apache commons-collections组件的反序列化漏洞,基于T3;

          存在漏洞的Class:

            org.apache.commons.collections.functors* *;

            com.sun.org.apache.xalan.internal.xsltc.trax* *;

            javassist* *;

            org.codehaus.groovy.runtime.ConvertedClosure;

            org.codehaus.groovy.runtime.ConversionHandler;

            org.codehaus.groovy.runtime.MethodClosure;

        CVE-2016-0638:

          readExternal存在反序列化漏洞;

        CVE-2016-3510:

          反序列化对象,封装进weblogic.corba.utils.MarshalledObject,可顺利对MarshalledObject序列化;在反序列化时,MarshalledObject对象调用readObject,对 MarshalledObject封装的序列化对象再次反序列化,导致,逃过

    黑名单的检查。

        CVE-2017-3506:

          由于使用了存在反序列化缺陷XMLDecoder导致的漏洞,基于http协议,挖矿主力军;

        CVE-2017-10271:

          是3506的绕过;

        CVE-2017-10352:

          XMLDecoder库存在缺陷导致任意代码执行,PoC被泄露,被用于黑产;

        CVE-2017-3248:

          RMI机制的缺陷,通过JRMP协议,达到执行任意反序列化Payload的目的;

          resolveClass和resolveProxyClass都存在漏洞,被用于黑产(挖门罗币等);

        CVE-2018-2628:

          CVE-2017-3248的绕过,基于StreamMessage封装,利用java.rmi.activation.Activator绕过补丁中对java.rmi.registry.Registry的限制。

        CVE-2018-2893:

          如下的类被绕过,导致反序列化:

            java.rmi.activation.*;

            sun.rmi.server.*;

            java.rmi.server.RemoteObjectInvocationHandler;

            java.rmi.server.UnicastRemoteObject;

        应急场景中常见的Weblogic漏洞,还有:

          Console弱口令(weblogic/weblogic);

          SSRF;

          WLS组件命令执行漏洞。

    二、日志分析(使用E.L.K处理日志):

      Weblogic日志主要分为:Server日志、HTTP日志和DOMAIN日志;

      1.Server日志:

        主要功能:记录Weblogic Server启动至关闭过程中的运行信息和错误信息

        日志结构:时间戳、严重程度、子系统、计算机名、服务器名、线程 ID、用户 ID、事务 ID、诊断上下文 ID、原始时间值、消息 ID 和消息文本。

        例如:####<Mar 4, 2019 9:42:07 AM CST> <Warning> <RMI> <localhost.localdomain> <AdminServer> <[ACTIVE]ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> 080003>

    <RuntimeException thrown by rmi server:<1551663727980> <BEA-weblogic.common.internal.RMIBootServiceImpl.authenticate(Lweblogic.security.acl.UserInfo;)

      2.DOMAIN日志:

        主要功能:记录一个DOMAIN下的各个Weblogic Server的启动至关闭过程中的运行信息和错误信息。

        日志结构:####<Oct 18, 2018 2:21:11 PM CST> <Notice> <Security> <WIN-L25PQAJM1K1> <AdminServer> <[ACTIVE]ExecuteThread: '9' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1539843671288> <BEA-090082> <Security initializing using security realm myrealm.>

        注:Domain日志中的日志记录不会按照其时间戳顺序写入;

          DOMAIN日志中记录的时间戳是发出消息的服务器的时间戳;

          有可能服务器在一段时间内无法与域服务器联系,此时,消息会被缓冲在本地并在重新连接服务器之后发送到管理服务器。

      3.HTTP日志:  

        默认情况下,HTTP日志记录处于启用状态;

        服务器会将 HTTP 请求保存到单独的日志文件中;

        服务器不会将 HTTP 请求存储在服务器日志文件或域日志文件中;

        默认按文件大小滚动和轮询,大小是5000KB;

        扩展日志记录格式字段:c-ip cs-username date cs-method cs-uri sc-status cs(User-Agent) s-sitename s-port time-taken sc-substatus cs-host cs-version

          字段解释:

            c-ip: 客户端访问服务端的IP;

            cs-username: 客户端访问服务端使用的用户名,匿名访问则使用占位符(-)代替;

            date : 访问的日期;

            time : 访问的时间;

            cs-method : 客户端请求的方法;

            cs-uri: 客户端请求服务器的URL;

            sc-status: 服务器响应的状态码;

            cs(User-Agent) : 浏览器的信息;

            s-sitename: 互联网请求的名称,通常是一个占位符;

            s-port: 服务的端口号;

            time-taken: 完成整个访问请求所花费的时间(秒);

            sc-substatus: 子状态吗,通常是一个占位符;

            cs-host: 服务器的header头部;

            cs-version: 协议的版本号

  • 相关阅读:
    使用 ASP.NET Core 创建 Web API
    C# 请求接口返回中文乱码→???
    无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它
    制作和引用自定义图标库
    asp.net core 3.1 解决跨域的问题
    看自己以前写的代码
    图解SQL Server 数据库定时自动备份
    码云修改登录密码后终端连不上的问题
    C#中string.format用法详解
    C#高级编程之泛型详解
  • 原文地址:https://www.cnblogs.com/CDZX/p/12559620.html
Copyright © 2011-2022 走看看