发布于10月9日10月9日 背景这篇记录放在“漏洞库”板块,重点不是新闻复述,而是一次授权环境中对 Windows Print Spooler 相关漏洞(常见讨论为 PrintNightmare,CVE-2021-34527 / CVE-2021-1675 关联场景)的验证、排查和修复建议。测试对象为域内 Windows Server,包含域控与成员服务器。测试目标是确认是否存在打印服务暴露、补丁缺失、策略配置不当导致的权限边界绕过风险。说明:以下内容仅适用于授权渗透测试、内部安全验证和漏洞复现环境。不要在未授权网络中执行。影响场景域控或关键服务器启用了 Print Spooler 服务。系统缺少对应安全更新,或更新后 Point and Print 策略配置仍不安全。普通域用户可访问目标主机的 RPC 打印相关接口。环境中存在可控 SMB 共享,或可被诱导加载的打印驱动路径。实际测试中,很多环境虽然已经打过补丁,但域控仍开启 Spooler,并且历史遗留组策略允许普通用户安装打印驱动,这类配置容易造成误判,需要结合补丁、策略和服务状态一起看。问题定位先确认目标是否运行打印后台处理服务。域控如果没有明确打印需求,建议默认关闭。可以在授权主机上用 PowerShell 批量检查:Get-ADComputer -Filter * -Properties DNSHostName | Where-Object {$_.DNSHostName} | ForEach-Object { $host = $_.DNSHostName try { $svc = Get-Service -ComputerName $host -Name Spooler -ErrorAction Stop [PSCustomObject]@{ Host = $host Status = $svc.Status StartType = (Get-CimInstance -ClassName Win32_Service -ComputerName $host -Filter \"Name='Spooler'\").StartMode } } catch { [PSCustomObject]@{ Host = $host Status = \"Unreachable\" StartType = \"Unknown\" } } } | Format-Table -AutoSize如果没有域管权限,也可以在授权测试机上通过 RPC/SMB 连通性做初筛:rpcdump.py @192.168.10.20 | grep -i spool rpcclient -U 'domain/user%password' 192.168.10.20 -c 'enumprinters'重点关注目标是否响应 MS-RPRN / MS-PAR 相关接口。能枚举打印机不代表一定可利用,但说明服务面是开放的。技术分析该类问题的核心不只是“服务开启”,而是打印服务在处理远程驱动安装、驱动路径解析、权限检查时可能出现边界控制不足。历史漏洞中,攻击者可能借助打印驱动加载机制让高权限服务进程加载远端或非预期路径的动态库,从而造成权限提升或远程代码执行。在企业域环境中,风险通常集中在以下几个点:域控开启 Spooler:域控上运行不必要的打印服务,会扩大高价值目标攻击面。Point and Print 策略过宽:允许非管理员安装或更新驱动,可能绕过预期的管理员确认。补丁状态不一致:部分服务器打补丁,部分模板机或业务机未打补丁。日志不完整:默认情况下打印服务相关日志可能未启用,事后难以确认是否被探测或尝试利用。操作步骤下面是一次较稳妥的授权验证流程,不建议一上来就跑利用脚本,容易影响业务,也容易留下不必要的驱动残留。1. 确认系统版本与补丁systeminfo | findstr /i \"OS Version Hotfix\" wmic qfe get HotFixID,InstalledOn | findstr /i \"KB5004945 KB5005010 KB5005030 KB5005033 KB5005565 KB5005573\"不同 Windows 版本对应 KB 不完全相同,不能只拿一个 KB 号判断。建议结合微软公告、系统版本和安装时间核对。2. 检查 Spooler 服务sc.exe query Spooler sc.exe qc Spooler Get-Service Spooler | Select-Object Name,Status,StartType如果目标是域控,且没有打印业务,看到 Spooler 为 Running 就应纳入整改项。3. 检查 Point and Print 相关注册表reg query \"HKLM\\Software\\Policies\\Microsoft\\Windows NT\\Printers\\PointAndPrint\" /s reg query \"HKLM\\Software\\Policies\\Microsoft\\Windows NT\\Printers\\PackagePointAndPrint\" /s重点看这些值:NoWarningNoElevationOnInstall:如果为 1,安装驱动时可能不提示也不提权确认,风险高。UpdatePromptSettings:如果为 2 或配置过宽,也需要关注。RestrictDriverInstallationToAdministrators:建议为 1,限制只有管理员可安装打印驱动。4. 启用并查看打印服务日志很多环境默认没有启用 Operational 日志,建议在验证前开启,便于留痕和回溯。wevtutil sl Microsoft-Windows-PrintService/Operational /e:true wevtutil qe Microsoft-Windows-PrintService/Operational /f:text /c:20重点关注打印驱动安装、打印机添加、远程连接异常等事件。常见相关日志路径:Applications and Services Logs └─ Microsoft └─ Windows └─ PrintService ├─ Admin └─ Operational5. 安全验证方式授权测试时建议优先采用“非破坏式验证”:确认 Spooler 是否可远程访问。确认普通域用户是否能触发打印机枚举。确认策略是否允许非管理员安装驱动。确认补丁是否缺失或策略回退。不要在生产域控上加载测试 DLL 或写入驱动目录。如果确需在靶场复现,应使用隔离环境,复现后清理驱动、服务项、共享文件、事件日志标记和测试账户权限。排查命令示例以下脚本用于快速检查本机关键配置,可作为漏洞库条目的自检片段:$result = [ordered]@{} $svc = Get-Service -Name Spooler -ErrorAction SilentlyContinue if ($svc) { $result[\"SpoolerStatus\"] = $svc.Status $result[\"SpoolerStartType\"] = $svc.StartType } else { $result[\"SpoolerStatus\"] = \"NotFound\" } $ppPath = \"HKLM:\\Software\\Policies\\Microsoft\\Windows NT\\Printers\\PointAndPrint\" if (Test-Path $ppPath) { $pp = Get-ItemProperty $ppPath $result[\"NoWarningNoElevationOnInstall\"] = $pp.NoWarningNoElevationOnInstall $result[\"UpdatePromptSettings\"] = $pp.UpdatePromptSettings $result[\"RestrictDriverInstallationToAdministrators\"] = $pp.RestrictDriverInstallationToAdministrators } else { $result[\"PointAndPrintPolicy\"] = \"NotConfigured\" } $hotfix = Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 HotFixID,InstalledOn $result[\"RecentHotfix\"] = ($hotfix | Out-String) [PSCustomObject]$result | Format-List风险判断检查项风险表现建议等级域控 Spooler 运行中高价值资产暴露打印服务面高普通用户可远程枚举打印接口存在远程交互条件中NoWarningNoElevationOnInstall=1安装驱动无需警告或提权确认高RestrictDriverInstallationToAdministrators 未开启非管理员可能安装打印驱动高补丁缺失可能存在已知漏洞利用面高日志留痕与应急排查如果怀疑被探测或利用,可以从以下方向查:查看 Microsoft-Windows-PrintService/Admin 和 Operational 日志中的驱动安装、打印机添加事件。检查 C:\\Windows\\System32\\spool\\drivers\\ 下近期新增文件。检查是否存在异常 SMB 访问记录,特别是来自普通办公终端到服务器的共享访问。查看安全日志中普通域用户是否在短时间内访问多台服务器的打印接口。关注 Sysmon Event ID 7(Image loaded)、11(FileCreate)、3(Network connection),如果已有部署。Get-ChildItem \"C:\\Windows\\System32\\spool\\drivers\" -Recurse | Sort-Object LastWriteTime -Descending | Select-Object FullName,Length,LastWriteTime -First 50修复建议关闭非必要 Spooler:域控、数据库服务器、核心业务服务器如无打印需求,直接禁用。Stop-Service Spooler -Force Set-Service Spooler -StartupType Disabled限制驱动安装:启用“限制只有管理员可安装打印驱动”。reg add \"HKLM\\Software\\Policies\\Microsoft\\Windows NT\\Printers\\PointAndPrint\" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 1 /f reg add \"HKLM\\Software\\Policies\\Microsoft\\Windows NT\\Printers\\PointAndPrint\" /v NoWarningNoElevationOnInstall /t REG_DWORD /d 0 /f reg add \"HKLM\\Software\\Policies\\Microsoft\\Windows NT\\Printers\\PointAndPrint\" /v UpdatePromptSettings /t REG_DWORD /d 0 /f统一补丁基线:按系统版本统一核对安全更新,不要只检查域控,成员服务器也要覆盖。收紧 RPC/SMB 访问:核心服务器仅允许必要管理网段访问,减少普通办公网段直连。启用日志:开启 PrintService Operational 日志,并纳入 SIEM 或集中日志平台。组策略固化:通过 GPO 下发上述策略,避免单机修改被回滚。总结Print Spooler 类漏洞在内网里危险点不只在单个 CVE,而在“高权限服务 + 远程接口 + 宽松驱动策略”的组合。漏洞库记录时建议把服务状态、补丁、Point and Print 策略、日志留痕和修复动作一起写清楚,这样验证结果才可复查,也方便后续形成基线。生产环境优先做非破坏式验证,域控上没有打印需求就关闭 Spooler,这是最直接也最稳的缓解措施。 服务器、云资产与权限边界梳理示意
10月9日10月9日 可以把验证和修复分成“是否暴露远程打印能力”和“补丁/策略是否真正生效”两块来看,避免只看 KB 号产生误判。 排查建议: 1. 确认 Spooler 是否在不需要的机器上运行,尤其是 DC: Get-Service Spooler Get-CimInstance Win32_Service -Filter "Name='Spooler'" | Select Name, State, StartMode 如果域控不承担打印服务,建议直接禁用: Stop-Service Spooler -Force Set-Service Spooler -StartupType Disabled 2. 检查 Point and Print 相关限制是否配置正确。重点看这几个注册表项: reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint" reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PackagePointAndPrint" 比较稳妥的配置是要求管理员权限安装/更新驱动,示例: reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 1 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v NoWarningNoElevationOnInstall /t REG_DWORD /d 0 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v UpdatePromptSettings /t REG_DWORD /d 0 /f 配置后执行: gpupdate /force 3. 注意确认补丁后的行为,而不是只确认“装了某个补丁”。可以检查系统是否存在相关更新: wmic qfe list brief /format:table Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 20 但最终还是建议结合策略项验证,因为当时不同系统版本、累积更新和 GPO 覆盖关系比较容易导致实际防护不一致。 4. 如果环境里确实需要打印服务,建议最小化暴露面: - 打印服务器与域控分离; - 普通终端不要允许用户自行安装非受信打印驱动; - 只允许可信打印服务器; - SMB/RPC 访问做网络隔离,不要让办公网全段都能访问关键服务器的 Spooler。 可以补充一条防火墙侧检查: netsh advfirewall firewall show rule name=all | findstr /i "spool print rpc" 5. 日志侧可以重点看打印服务相关事件,辅助确认是否有异常驱动安装或打印机连接行为: Get-WinEvent -LogName "Microsoft-Windows-PrintService/Admin" -MaxEvents 50 | Select-Object TimeCreated, Id, ProviderName, Message 如果 Admin 日志没有启用,可以先打开: wevtutil sl Microsoft-Windows-PrintService/Admin /e:true 我个人在做这类复核时,会先把 DC 上的 Spooler 状态列出来,再看 GPO 实际落地结果: gpresult /h C:\gp.html 很多问题不是补丁没装,而是旧的 Point and Print 策略还在放宽安装行为,导致修复看起来“完成了”,实际边界还是没收紧。
创建帐户或登录后发表意见