该漏洞后续CVE-2021-34527,也懒得复现了,大差不差。来自推特大佬的图镇楼
RCE复现环境
DC:Windows Server 2019 IP:192.168.159.15
域主机:Win 10
SMB服务器:非域内PC IP:192.168.159.129
本地提权复现环境:Windows 10 1803
POC
Mimikatz(https://github.com/gentilkiwi/mimikatz)
Github脚本(https://github.com/evilashz/CVE-2021-1675-LPE-EXP)
Payload DLL:Cobalt Strike
根据官方文档的介绍,添加打印机驱动程序的API有:RpcAddPrinterDriverEx 和 AddPrinterDriverEx。调用这两个API需要客户端(用户)具有 SeLoadDriverPrivilege 权限。该权限可以使用 whoami /priv进行查看。
漏洞利用中涉及到的函数可以在官方文档中查阅到:
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rprn/857d00ac-3682-4a0d-86ca-3d3c372e5e4a
https://docs.microsoft.com/zh-cn/windows/win32/api/rpcdce/nf-rpcdce-rpcbindingsetauthinfoexw
另外关于RPC编程的知识直接百度看吧,有很多文章
RCE能利用的前提:
1、域管能访问到SMB服务器,网络可达
2、攻击者在域内
3、攻击者到域控服务器需要一个域用户的用户名密码,建立RPC连接
再说下非域的情况,非域情况也可以实现RCE,但是实现RCE的前提是需要目标主机账户密码,非域的情况下主机的用户密码一致的情况比较少,且如果知道了主机的账户密码,可直接上去提权就好。
RCE整个攻击的代码执行流程(截图不是Mimikatz里的代码,大致是一样的):
1、攻击者与域控服务器建立RPC连接,进行句柄绑定(那一长串数字是打印机接口的UUID)
2、RpcBindingSetAuthInfoExW函数进行身份验证
3、RpcEnumPrinterDrivers函数枚举域控机器上的已安装的打印机驱动程序目录
4、RpcAddPrinterDriverEx函数进行驱动安装(正常情况使用RpcAddPrinterDriverEx函数的前提是前面RPC验证的用户具有SeLoadDriverPrivilege权限,漏洞的点就在于绕过了这个权限验证)
漏洞复现过程:
1、域控服务器上创建一个普通用户
2、建立SMB服务器
复制下面信息到一个PS1文件中,管理员权限运行该powershell脚本
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 "HKLMSystemCurrentControlSetServicesLanManServerParameters" /v NullSessionPipes /t REG_MULTI_SZ /d srvsvc /f #This will overwrite existing NullSessionPipes
REG ADD "HKLMSystemCurrentControlSetServicesLanManServerParameters" /v NullSessionShares /t REG_MULTI_SZ /d share /f
REG ADD "HKLMSystemCurrentControlSetControlLsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 1 /f
REG ADD "HKLMSystemCurrentControlSetControlLsa" /v RestrictAnonymous /t REG_DWORD /d 0 /f
将CS生成的dll放在SMB共享目录中
3、Mimikatz攻击验证
4、成功上线,system权限
目前在Windows Server 2019上复现成功,Windows Server 2008/2012上未复现成功。Windows Server 2012系统,观察到恶意的dll已经上传到目标服务器,在做备份时,创建了old目录,后来又删除了,原因未知,欢迎师傅找我一起探讨。
另外,2019系统上线后发现没过多久,打印机进程会崩溃掉线,所以得做上线会话迁移。
RCE的情况需要账户密码的原因是因为RPC连接绑定打印机接口时,需要用户身份验证。对于本地提权,我们不需要账户密码。也不需要搭建smb服务器,dll直接放到主机上就好。
整个攻击的代码执行流程:
1、EnumPrinterDriversW函数枚举域控机器上的打印机驱动
2、AddPrinterDriverEx函数进行驱动安装
漏洞复现:
在漏洞利用的时候,需要对dll进行免杀,因为在漏洞利用的过程中恶意dll会在目标服务器上落地。
另外,如果有师傅对逆向分析该漏洞代码感兴趣的,可以联系一起交流交流。
END
本文始发于微信公众号(NOVASEC):CVE-2021-1675 漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论