Windows Print Spooler 权限提升漏洞(CVE-2019-1040/CVE-2019-1019)已被实现为用于渗透测试的反射 DLL。
PrintSpoofer 是一款通过利用 Windows 打印后台处理程序服务(CVE-2019-1040 / CVE-2019-1019)中的漏洞实现本地权限提升的工具。本项目以 Reflective DLL 格式实现了 PrintSpoofer 漏洞利用,使其适用于 Cobalt Strike 等渗透测试框架。
PrintSpoofer 利用 Windows 打印后台处理程序服务中的一个漏洞,该漏洞允许低权限用户获取 SYSTEM 级权限。该漏洞利用滥用了打印后台处理程序服务处理命名管道的方式。
PrintSpoofer 通过执行以下步骤来工作:
该漏洞利用首先检查当前令牌是否具有 SE_IMPERSONATE_NAME 特权。这是模拟其他用户令牌所必需的。
使用随机 UUID 创建一个命名管道。管道路径为:
\\.\pipe\<UUID>\pipe\spoolss
在已创建的命名管道上等待异步连接。创建一个事件,并将管道准备好以接受传入连接。
在单独的线程中,向打印后台处理程序服务发起 RPC 调用。通过调用 RpcRemoteFindFirstPrinterChangeNotificationEx,该服务会尝试连接到我们创建的管道。
当打印后台处理程序服务(以 SYSTEM 身份运行)连接到命名管道时,该漏洞利用会使用 ImpersonateNamedPipeClient 模拟服务的令牌,从而获得 SYSTEM 权限。
获得 SYSTEM 令牌后,即可执行高权限操作。
Windows 打印后台处理程序服务通过命名管道处理打印机通知。由于该服务没有正确验证管道连接,攻击者可以强制其连接到恶意管道,进而模拟 SYSTEM 令牌。
本项目使用 MS-RPRN(打印系统远程协议)与打印后台处理程序服务进行通信。该协议通过 IDL(接口定义语言)文件定义,并支持 RPC 调用。
Reflective DLL 的行为与标准 DLL 不同:
LoadLibrary API在 Visual Studio 中打开 PrintSpoofer.sln 文件。
选择你的解决方案平台和配置:
x64 或 Win32(取决于目标架构)Release(生产环境)或 Debug(开发环境)通过 生成解决方案(Ctrl+Shift+B)构建解决方案。
编译后的 DLL 将位于:
PrintSpoofer\x64\Release\PrintSpoofer.dll (for x64)
PrintSpoofer\Win32\Release\PrintSpoofer.dll (for x86)
本项目使用以下预处理器定义:
REFLECTIVE_DLL_EXPORTS:启用 Reflective DLL 导出REFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN:使用自定义 DllMainREFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR:启用 LoadRemoteLibraryR(在 Release 模式下)PrintSpoofer 可与 Cobalt Strike 的 elevate 命令一起使用:
elevate PrintSpoofer LISTENER_NAME
其中:
PrintSpoofer:elevate 模块名称LISTENER_NAME:将接收提权 shell 的监听器可以使用 Reflective DLL 注入技术手动加载该 DLL。
成功执行漏洞利用后,将显示以下内容:
[+] Found privilege: SeImpersonatePrivilege
[+] Named pipe listening...
[+] ImpersonateNamedPipeClient OK
[+] Exploit successfully, enjoy your shell
dllmain.cppDllMain)PrintSpoofer.cppms-rprn.idlReflectiveLoader.cpp本工具仅供教育目的和授权渗透测试使用。
本项目基于 MIT 许可证授权。更多信息,请参阅 LICENSE 文件。