D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Источник: https://itm4n.github.io/printnightmare-exploitation/
Перевёл: BLUA специально для xss.is
Хотя PrintNightmare и его варианты были теоретически решены Microsoft, эта уязвимость до сих пор затрагивает организации, главным образом из-за довольно запутанных групповых политик и настроек. В этом блоге я хочу пролить свет на эти проблемы конфигурации и, надеюсь, предложить четкие рекомендации по их устранению.
“PrintNightmare” и “Point and Print”
Если вы не жили в изоляции последние три года, вы должны были слышать о «PrintNightmare», но я начну с краткого обзора, чтобы убедиться, что мы на одной волне.
Изначально «PrintNightmare» было названием уязвимости в службе диспетчера печати (Print Spooler), которая могла быть использована для выполнения удалённого выполнения кода (RCE) или локального повышения привилегий (LPE) на Windows-хосте, при условии, что злоумышленник получил сетевой доступ и учетные данные домена или локальный доступ в контексте обычного пользователя. Это действительно стало настоящим «кошмаром», так как это открытие в конечном итоге привело к обнаружению множества вариантов этой первоначальной уязвимости, отчасти вызванных неполными патчами.
Более конкретно, проблемной функцией является «Point and Print». Согласно Microsoft, Point and Print «обозначает возможность для пользователя создать подключение к удаленному принтеру без предоставления дисков или других установочных носителей». Другими словами, эта функция позволяет добавлять принтер, как напрямую, так и через сервер печати, и автоматически устанавливать его драйвер, при этом не требуя прав администратора, целью чего является обеспечение функции plug-and-play для конечных пользователей.
> Начиная с Windows Vista, драйверы принтеров могут быть только в пользовательском режиме. Как указано в документации, если приложение попытается установить драйвер в режиме ядра, «функции
При добавлении принтера требуется установить соответствующий драйвер принтера. Этот драйвер может быть как «не поддерживающий пакеты» (non package aware), так и «поддерживающий пакеты» (package aware). Понятие драйверов, поддерживающих пакеты, было впервые введено в Windows Vista.
Определить, поддерживает ли драйвер принтера пакеты («package aware»), можно с помощью оснастки «Управление печатью» (Print Management) в консоли MMC или просто используя PowerShell.
Код: Скопировать в буфер обмена
Как видно из вывода команды выше, драйверы, поддерживающие пакеты («package aware»), в наши дни гораздо более распространены, чем их аналоги, не поддерживающие пакеты («non package aware»).
Эта разница имеет важное значение, так как она определяет, какой тип конфигурации необходимо применить к функции «Point and Print» для того, чтобы пользователи могли устанавливать принтеры, как мы увидим в следующих частях.
Point and Print ограничен для администраторов
После саги PrintNightmare Microsoft решила решить проблему глобально, ограничив установку драйверов принтеров только администраторами, но с возможностью для системных администраторов при необходимости обходить эту политику. Такое поведение стало стандартным с 10 августа 2021 года.
Для организаций, которые не предвидели этого изменения, последствием стало то, что некоторые пользователи больше не могли печатать с их ПК на Windows. Например, при попытке добавить общий принтер с драйвером, поддерживающим пакеты, через настройки «Принтеры и сканеры», появлялось следующее сообщение об ошибке.
Ошибка №740 — это стандартный код ошибки Win32, который переводится как «Запрашиваемая операция требует повышения привилегий». Другими словами, для добавления сетевого принтера требуются права администратора.
Таким образом, чтобы разрешить обычным пользователям устанавливать общий принтер, необходимо отключить политику «Ограничить установку драйверов принтера только администраторам» (Конфигурация компьютера > Политики > Административные шаблоны > Принтеры), как упоминалось ранее.
Когда этот параметр применяется к целевым рабочим станциям, в реестре создается (или обновляется) следующее значение.
Код: Скопировать в буфер обмена
Если мы попробуем добавить наш принтер снова, это сработает!
А как насчёт принтеров, использующих драйверы, не поддерживающие пакетирование? В таком случае будет отображено другое диалоговое окно, которое в итоге приведёт к появлению запроса UAC после нажатия кнопки «Продолжить».
Если у нас нет прав администратора, у нас не останется другого выбора, кроме как отменить операцию, что приведёт к тому, что принтер не установится.
Ограничения функции Point and Print
В контексте организации, если пользователи не могут устанавливать принтеры с драйверами, не поддерживающими пакеты, это может стать проблемой. Поэтому может возникнуть соблазн отключить уведомление, которое мы видели ранее, с помощью настройки политики ограничений функции Point and Print.
Более конкретно, эта политика содержит два параметра, регулирующих уведомления системы безопасности.
- «При установке драйверов для нового подключения»
- «При обновлении драйверов для существующего подключения»
Установив эти значения на «Не показывать предупреждение или запрос повышения прав», мы можем отключить запросы и, таким образом, получить поведение, аналогичное драйверам, учитывающим пакеты.
Применение этой политики на целевых машинах приведет к установке следующих значений в реестре.
Код: Скопировать в буфер обмена
Если значения
И если мы попробуем снова добавить наш принтер, это сработает! Теперь у нас есть конфигурация, которая позволяет пользователям устанавливать как драйверы принтеров с поддержкой пакетов, так и без неё.
PrintNightmare снова вернулся!
Если вы отключите запросы безопасности функции Point and Print, как описано ранее, пользователи смогут устанавливать драйверы принтеров без поддержки пакетов, но при этом вы сделаете устройство уязвимым для оригинальной уязвимости PrintNightmare. Это задокументировано в статье базы знаний KB5005010.
Уязвимая конфигурация Point and Print будет следующей
- Параметр
- Параметр
В этой конфигурации эксплуатация уязвимости является простой. Фактически, она сводится к вызову функции
В сети вы найдете множество эксплойтов, но я рекомендую использовать скрипт PowerShell CVE-2021-34527.ps1, разработанный Кейлебом Стюартом и Джоном Хаммондом. Вы можете позволить скрипту использовать встроенную DLL (которая при загрузке создаёт новую локальную учётную запись администратора) или передать абсолютный путь к вашей собственной DLL. В качестве альтернативы вы можете использовать мой собственный скрипт PointAndPrint.ps1, который сильно вдохновлен их работой.
Код: Скопировать в буфер обмена
Ниже представлено короткое видео, демонстрирующее эксплуатацию уязвимости. В этом примере я использовал DLL, которая просто запускает новый процесс cmd.exe на рабочем столе текущего пользователя.
https://itm4n.github.io/assets/posts/2024-01-28-printnightmare-exploitation/10_printnightmare-exploit.webm
В итоге, если запросы безопасности функции Point and Print отключены, локальный атакующий может просто загрузить произвольную DLL в контексте службы диспетчера печати. Это самый простой вариант эксплуатации уязвимости, и он работает даже в том случае, если настроен список одобренных серверов Point and Print!
Пакет Point and Print
Теперь давайте немного отмотаем назад и предположим, что мы не отключили запросы безопасности. Иными словами, мы предполагаем, что политика "Ограничение установки драйверов принтера для администраторов" отключена, а все остальные настройки остаются нетронутыми, чтобы применялись значения по умолчанию.
В этих условиях мы видим, что не можем установить драйвер принтера, не поддерживающий пакетный режим, но можем воспользоваться пакетом Point and Print для установки принтера, которым делится сервер печати. Чтобы лучше понять, что происходит в этом случае, нам нужно сначала взглянуть на список драйверов принтеров по умолчанию (см. скриншот ниже).
Зная это, действительно легче показать, что служба диспетчера печати загружает соответствующий драйвер с удаленного сервера печати и устанавливает его локально. На скриншоте ниже показано, как драйвер Canon автоматически устанавливается в фоновом режиме.
По сути, мы попросили диспетчер печати подключиться к удаленному серверу печати, и он загрузил драйвер с этого расположения. Таким образом, если мы заставим его подключиться к серверу, который контролируем, мы сможем заставить его загрузить кастомный драйвер и, таким образом, выполнить произвольный код от имени NT AUTHORITY\SYSTEM, верно?
Как вы можете себе представить, это не так просто. В статье “Point and Print with Driver Packages” можно прочитать, что “Подпись драйвера и его целостность проверяются на клиенте печати”. Кроме того, в статье “Use Group Policy settings to control printers in Active Directory” также указано, что “При использовании пакетной функции Point and Print компьютеры-клиенты будут проверять подпись всех драйверов, загруженных с серверов печати”.
В случае нашего драйвера Canon мы можем видеть, что он имеет подпись WHQL, так как поле EKU его сертификата содержит OID
Короче говоря, хотя мы можем указать на любой сервер, мы не можем загрузить кастомный драйвер из-за требований к подписи. Можно утверждать, что не невозможно создать вредоносный драйвер и все же пройти проверку WHQL, но существует гораздо более простое решение.
Используйте уязвимый драйвер принтера
Когда дело доходит до обхода продвинутых защит, таких как Protected Processes или решений для обнаружения и реагирования на угрозы на конечных точках (EDR), часто используется уже хорошо известная техника под названием «Используй свой собственный (уязвимый) драйвер». Например, инструменты, такие как PPLKiller или EDRSandBlast, используют легитимные драйверы, которые предоставляют доступ на чтение/запись в ядро, чтобы обойти механизмы безопасности путем изменения данных, которые являются ключевыми для их функционирования.
Хотя драйверы принтеров не являются драйверами в режиме ядра, тот же самый подход может быть применен к Package Point and Print, но с несколько другой целью. Вместо использования привилегий администратора для доступа к ядру, мы стремимся получить эти привилегии администратора.
Для этого нам сначала нужно настроить сервер печати и расшарить поддельный принтер, который использует легитимный, но уязвимый драйвер. Затем мы воспользуемся Package Point and Print, чтобы принудить службу Print Spooler установить этот драйвер на целевую систему. Наконец, мы эксплуатируем эту уязвимость для получения привилегий
Эта конкретная атака была реализована @Junior_Baines в готовом инструменте под названием Concealed Position. Проект состоит из одного исполняемого файла, который включает в себя как сервер, так и клиент, а также коллекцию из четырех уязвимых драйверов принтера.
Тем не менее, существует как минимум две основные проблемы, которые делают этот инструмент едва ли пригодным для использования в наши дни. Прежде всего, он помечен как вредоносный, поэтому его нельзя легко запустить без модификации кода или, по крайней мере, упаковки исполняемого файла. Во-вторых, он полагается на анонимный доступ к общей папке print$, который, скорее всего, будет заблокирован из-за ограничений, введенных в некоторых последних версиях Windows.
Чтобы решить эти проблемы, я разделил цепочку эксплуатации на три шага, которые я повторно реализовал на PowerShell для облегчения воспроизведения. Шаг 1 (красным) и шаг 2 (синим) уже проиллюстрированы на предыдущей диаграмме.
1. АТТАКУЮЩИЙ (в роли администратора): создайте фальшивый общий принтер, используя уязвимый драйвер принтера.
2. ЦЕЛЬ (в роли обычного пользователя): добавьте удалённый общий принтер, чтобы инициировать установку его драйвера локально.
3. ЦЕЛЬ (в роли обычного пользователя): эксплуатируйте уязвимость драйвера принтера для получения привилегий LocalSystem.
Наконец, как я упоминал ранее, Concealed Position предлагает эксплойты для четырёх уязвимых драйверов. Однако, для демонстрации я выбрал только один:
1. Создание поддельного общего принтера (Злоумышленник)
Сначала нам нужно Скачать
Перевёл: BLUA специально для xss.is
Хотя PrintNightmare и его варианты были теоретически решены Microsoft, эта уязвимость до сих пор затрагивает организации, главным образом из-за довольно запутанных групповых политик и настроек. В этом блоге я хочу пролить свет на эти проблемы конфигурации и, надеюсь, предложить четкие рекомендации по их устранению.
“PrintNightmare” и “Point and Print”
Если вы не жили в изоляции последние три года, вы должны были слышать о «PrintNightmare», но я начну с краткого обзора, чтобы убедиться, что мы на одной волне.
Изначально «PrintNightmare» было названием уязвимости в службе диспетчера печати (Print Spooler), которая могла быть использована для выполнения удалённого выполнения кода (RCE) или локального повышения привилегий (LPE) на Windows-хосте, при условии, что злоумышленник получил сетевой доступ и учетные данные домена или локальный доступ в контексте обычного пользователя. Это действительно стало настоящим «кошмаром», так как это открытие в конечном итоге привело к обнаружению множества вариантов этой первоначальной уязвимости, отчасти вызванных неполными патчами.
Более конкретно, проблемной функцией является «Point and Print». Согласно Microsoft, Point and Print «обозначает возможность для пользователя создать подключение к удаленному принтеру без предоставления дисков или других установочных носителей». Другими словами, эта функция позволяет добавлять принтер, как напрямую, так и через сервер печати, и автоматически устанавливать его драйвер, при этом не требуя прав администратора, целью чего является обеспечение функции plug-and-play для конечных пользователей.
> Начиная с Windows Vista, драйверы принтеров могут быть только в пользовательском режиме. Как указано в документации, если приложение попытается установить драйвер в режиме ядра, «функции
AddPrinterDriver
и AddPrinterDriverEx
завершатся с кодом ошибки ERROR_KM_DRIVER_BLOCKED
». Тем не менее, это не мешает поставщикам принтеров распространять обычные драйверы в режиме ядра вместе с драйверами принтеров в пользовательском режиме, если они считают это необходимым.При добавлении принтера требуется установить соответствующий драйвер принтера. Этот драйвер может быть как «не поддерживающий пакеты» (non package aware), так и «поддерживающий пакеты» (package aware). Понятие драйверов, поддерживающих пакеты, было впервые введено в Windows Vista.
Определить, поддерживает ли драйвер принтера пакеты («package aware»), можно с помощью оснастки «Управление печатью» (Print Management) в консоли MMC или просто используя PowerShell.
Код: Скопировать в буфер обмена
Код:
PS C:\Users\Administrator> Get-PrinterDriver | select Name,IsPackageAware
Name IsPackageAware
---- --------------
Microsoft XPS Document Writer v4 True
Microsoft Print To PDF True
Microsoft enhanced Point and Print compatibility driver True
Lexmark Universal v2 True
Canon MX920 series Printer True
Canon MX920 series FAX False
Brady BBP11-24L True
Microsoft enhanced Point and Print compatibility driver True
Как видно из вывода команды выше, драйверы, поддерживающие пакеты («package aware»), в наши дни гораздо более распространены, чем их аналоги, не поддерживающие пакеты («non package aware»).
Эта разница имеет важное значение, так как она определяет, какой тип конфигурации необходимо применить к функции «Point and Print» для того, чтобы пользователи могли устанавливать принтеры, как мы увидим в следующих частях.
Point and Print ограничен для администраторов
После саги PrintNightmare Microsoft решила решить проблему глобально, ограничив установку драйверов принтеров только администраторами, но с возможностью для системных администраторов при необходимости обходить эту политику. Такое поведение стало стандартным с 10 августа 2021 года.
Для организаций, которые не предвидели этого изменения, последствием стало то, что некоторые пользователи больше не могли печатать с их ПК на Windows. Например, при попытке добавить общий принтер с драйвером, поддерживающим пакеты, через настройки «Принтеры и сканеры», появлялось следующее сообщение об ошибке.
Ошибка №740 — это стандартный код ошибки Win32, который переводится как «Запрашиваемая операция требует повышения привилегий». Другими словами, для добавления сетевого принтера требуются права администратора.
Таким образом, чтобы разрешить обычным пользователям устанавливать общий принтер, необходимо отключить политику «Ограничить установку драйверов принтера только администраторам» (Конфигурация компьютера > Политики > Административные шаблоны > Принтеры), как упоминалось ранее.
Эта конфигурация небезопасна!
Нажмите, чтобы раскрыть...
Когда этот параметр применяется к целевым рабочим станциям, в реестре создается (или обновляется) следующее значение.
Код: Скопировать в буфер обмена
Код:
HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint
RestrictDriverInstallationToAdministrators -> 0 (= Disabled)
Если значениеRestrictDriverInstallationToAdministrators
не существует или установлено на1
, установка драйверов принтеров разрешена только администраторам.
Нажмите, чтобы раскрыть...
Если мы попробуем добавить наш принтер снова, это сработает!
А как насчёт принтеров, использующих драйверы, не поддерживающие пакетирование? В таком случае будет отображено другое диалоговое окно, которое в итоге приведёт к появлению запроса UAC после нажатия кнопки «Продолжить».
Если у нас нет прав администратора, у нас не останется другого выбора, кроме как отменить операцию, что приведёт к тому, что принтер не установится.
Ограничения функции Point and Print
В контексте организации, если пользователи не могут устанавливать принтеры с драйверами, не поддерживающими пакеты, это может стать проблемой. Поэтому может возникнуть соблазн отключить уведомление, которое мы видели ранее, с помощью настройки политики ограничений функции Point and Print.
Более конкретно, эта политика содержит два параметра, регулирующих уведомления системы безопасности.
- «При установке драйверов для нового подключения»
- «При обновлении драйверов для существующего подключения»
Установив эти значения на «Не показывать предупреждение или запрос повышения прав», мы можем отключить запросы и, таким образом, получить поведение, аналогичное драйверам, учитывающим пакеты.
Эта конфигурация крайне небезопасна, как мы скоро увидим!
Нажмите, чтобы раскрыть...
Применение этой политики на целевых машинах приведет к установке следующих значений в реестре.
Код: Скопировать в буфер обмена
Код:
HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint
NoWarningNoElevationOnInstall -> 1 (= Do not show warning or elevation prompt)
UpdatePromptSettings -> 2 (= Do not show warning or elevation prompt)
Если значения
NoWarningNoElevationOnInstall
и UpdatePromptSettings
не существуют или установлены в 0
, всегда отображаются предупреждения безопасности.И если мы попробуем снова добавить наш принтер, это сработает! Теперь у нас есть конфигурация, которая позволяет пользователям устанавливать как драйверы принтеров с поддержкой пакетов, так и без неё.
PrintNightmare снова вернулся!

Если вы отключите запросы безопасности функции Point and Print, как описано ранее, пользователи смогут устанавливать драйверы принтеров без поддержки пакетов, но при этом вы сделаете устройство уязвимым для оригинальной уязвимости PrintNightmare. Это задокументировано в статье базы знаний KB5005010.
Уязвимая конфигурация Point and Print будет следующей
- Параметр
RestrictDriverInstallationToAdministrators
установлен в значение 0
, чтобы пользователи могли устанавливать драйверы принтеров.- Параметр
NoWarningNoElevationOnInstall
установлен в значение 1
, чтобы при установке драйвера принтера не отображалось окно с запросом прав администратора.Отключение запросов безопасности делает другие параметры полностью бесполезными. Поэтому, даже если вы зададите список утверждённых серверов или ограничите функцию Point and Print машинами в пределах леса, система всё равно будет уязвима.
Нажмите, чтобы раскрыть...
В этой конфигурации эксплуатация уязвимости является простой. Фактически, она сводится к вызову функции
AddPrinterDriverEx
с соответствующими флагами и передачей структуры DRIVER_INFO
, содержащей абсолютный путь к DLL, которая будет загружена службой диспетчера печати.В сети вы найдете множество эксплойтов, но я рекомендую использовать скрипт PowerShell CVE-2021-34527.ps1, разработанный Кейлебом Стюартом и Джоном Хаммондом. Вы можете позволить скрипту использовать встроенную DLL (которая при загрузке создаёт новую локальную учётную запись администратора) или передать абсолютный путь к вашей собственной DLL. В качестве альтернативы вы можете использовать мой собственный скрипт PointAndPrint.ps1, который сильно вдохновлен их работой.
Код: Скопировать в буфер обмена
Код:
. .\PointAndPrint.ps1
Invoke-PointAndPrintExploit -DllPath "$HOME\Downloads\payload.dll"
Важно указать абсолютный путь, предпочтительно на локальной файловой системе. Это связано с тем, что путь к DLL будет интерпретироваться в контексте службы диспетчера печати, от имени учетной записи LocalSystem. Следовательно, относительный путь, вероятно, укажет на место, отличное от вашего, и сетевые пути (например, подключенные сетевые диски) могут быть даже недоступны.
Нажмите, чтобы раскрыть...
Ниже представлено короткое видео, демонстрирующее эксплуатацию уязвимости. В этом примере я использовал DLL, которая просто запускает новый процесс cmd.exe на рабочем столе текущего пользователя.
https://itm4n.github.io/assets/posts/2024-01-28-printnightmare-exploitation/10_printnightmare-exploit.webm
В итоге, если запросы безопасности функции Point and Print отключены, локальный атакующий может просто загрузить произвольную DLL в контексте службы диспетчера печати. Это самый простой вариант эксплуатации уязвимости, и он работает даже в том случае, если настроен список одобренных серверов Point and Print!
Пакет Point and Print
Теперь давайте немного отмотаем назад и предположим, что мы не отключили запросы безопасности. Иными словами, мы предполагаем, что политика "Ограничение установки драйверов принтера для администраторов" отключена, а все остальные настройки остаются нетронутыми, чтобы применялись значения по умолчанию.
В этих условиях мы видим, что не можем установить драйвер принтера, не поддерживающий пакетный режим, но можем воспользоваться пакетом Point and Print для установки принтера, которым делится сервер печати. Чтобы лучше понять, что происходит в этом случае, нам нужно сначала взглянуть на список драйверов принтеров по умолчанию (см. скриншот ниже).
Зная это, действительно легче показать, что служба диспетчера печати загружает соответствующий драйвер с удаленного сервера печати и устанавливает его локально. На скриншоте ниже показано, как драйвер Canon автоматически устанавливается в фоновом режиме.
По сути, мы попросили диспетчер печати подключиться к удаленному серверу печати, и он загрузил драйвер с этого расположения. Таким образом, если мы заставим его подключиться к серверу, который контролируем, мы сможем заставить его загрузить кастомный драйвер и, таким образом, выполнить произвольный код от имени NT AUTHORITY\SYSTEM, верно?
Как вы можете себе представить, это не так просто. В статье “Point and Print with Driver Packages” можно прочитать, что “Подпись драйвера и его целостность проверяются на клиенте печати”. Кроме того, в статье “Use Group Policy settings to control printers in Active Directory” также указано, что “При использовании пакетной функции Point and Print компьютеры-клиенты будут проверять подпись всех драйверов, загруженных с серверов печати”.
В случае нашего драйвера Canon мы можем видеть, что он имеет подпись WHQL, так как поле EKU его сертификата содержит OID
1.3.6.1.4.1.311.10.3.5
. Это означает, что он прошел процесс проверки перед тем, как был цифрово подписан Microsoft.Если вы откроете свойства бинарного файла драйвера принтера (например, одного из его DLL-файлов), вы не найдете там подписи. Это потому, что "Подпись выпуска WHQL состоит из цифрово подписанного каталожного файла" (см. WHQL Release Signature). В приведенном выше примере таким файлом является MX920P6.cat
Нажмите, чтобы раскрыть...
Короче говоря, хотя мы можем указать на любой сервер, мы не можем загрузить кастомный драйвер из-за требований к подписи. Можно утверждать, что не невозможно создать вредоносный драйвер и все же пройти проверку WHQL, но существует гораздо более простое решение.
Используйте уязвимый драйвер принтера
Когда дело доходит до обхода продвинутых защит, таких как Protected Processes или решений для обнаружения и реагирования на угрозы на конечных точках (EDR), часто используется уже хорошо известная техника под названием «Используй свой собственный (уязвимый) драйвер». Например, инструменты, такие как PPLKiller или EDRSandBlast, используют легитимные драйверы, которые предоставляют доступ на чтение/запись в ядро, чтобы обойти механизмы безопасности путем изменения данных, которые являются ключевыми для их функционирования.
Хотя драйверы принтеров не являются драйверами в режиме ядра, тот же самый подход может быть применен к Package Point and Print, но с несколько другой целью. Вместо использования привилегий администратора для доступа к ядру, мы стремимся получить эти привилегии администратора.
Для этого нам сначала нужно настроить сервер печати и расшарить поддельный принтер, который использует легитимный, но уязвимый драйвер. Затем мы воспользуемся Package Point and Print, чтобы принудить службу Print Spooler установить этот драйвер на целевую систему. Наконец, мы эксплуатируем эту уязвимость для получения привилегий
LocalSystem
.Эта конкретная атака была реализована @Junior_Baines в готовом инструменте под названием Concealed Position. Проект состоит из одного исполняемого файла, который включает в себя как сервер, так и клиент, а также коллекцию из четырех уязвимых драйверов принтера.
Тем не менее, существует как минимум две основные проблемы, которые делают этот инструмент едва ли пригодным для использования в наши дни. Прежде всего, он помечен как вредоносный, поэтому его нельзя легко запустить без модификации кода или, по крайней мере, упаковки исполняемого файла. Во-вторых, он полагается на анонимный доступ к общей папке print$, который, скорее всего, будет заблокирован из-за ограничений, введенных в некоторых последних версиях Windows.
Чтобы решить эти проблемы, я разделил цепочку эксплуатации на три шага, которые я повторно реализовал на PowerShell для облегчения воспроизведения. Шаг 1 (красным) и шаг 2 (синим) уже проиллюстрированы на предыдущей диаграмме.
1. АТТАКУЮЩИЙ (в роли администратора): создайте фальшивый общий принтер, используя уязвимый драйвер принтера.
2. ЦЕЛЬ (в роли обычного пользователя): добавьте удалённый общий принтер, чтобы инициировать установку его драйвера локально.
3. ЦЕЛЬ (в роли обычного пользователя): эксплуатируйте уязвимость драйвера принтера для получения привилегий LocalSystem.
Наконец, как я упоминал ранее, Concealed Position предлагает эксплойты для четырёх уязвимых драйверов. Однако, для демонстрации я выбрал только один:
ACIDDAMAGE
. Он использует базовую уязвимость в разрешениях файлов в драйвере Lexmark (CVE-2021-35449), как мы увидим далее.1. Создание поддельного общего принтера (Злоумышленник)
Сначала нам нужно Скачать
View hidden content is available for registered users!