微信搜索我吃你家米了关注公众号

Kerberos委派_服务器

非约束kerberos委派

如果提供服务的服务器开启了非约束委派那么KDC在返回给客户端的服务票据中就会包含该客户端的TGT票据,这样当客户端将服务票据发送给服务器的时候,服务器就可以打开服务票据从里面获取到TGT,然后拿着该TGT代表该用户去执行一系列的操作

注意上面的重点就是服务票据中包含了TGT,这是委派的关键。

非约束委派就意味着该账户被信任,可以拿着这个别人的TGT去申请所有该TGT的拥有者能够申请到的服务

所以我们只要能够让Domain Admin访问到我们使用非约束委派账户注册地的服务,就能够获取到Domain Admin的TGT,进而获取整个域的权限

具体的做法就是可以通过社工Domain Admin或者其他的方式来其使用的机器去访问我们使用非约束委派账户注册的SPN

TGT的有效时间还是比较长的,至少有几个小时

缓解策略

缓解的办法就是将账户设置为不可被委派

不要使用kerberos的非约束委派

还有就是从server 2012开始,位于​​Protected Users​​用户组中的用户是不能被委派的

找出具有非约束委派的账户 ​​https://dirkjanm.io/krbrelayx-unconstrained-delegation-abuse-toolkit/​

Or they can be extracted using one of my own tools, ldapdomaindump, which will report users/computers that have this privilege with the TRUSTED_FOR_DELEGATION flag:

​https://github.com/dirkjanm/ldapdomaindump​

具体的利用方式

我们需要先拿下一台服务器,然后再从该服务器中导出域账户或者计算机账户的kerberos key

计算过程中需要一个salt,域账户和计算机账户的salt不一样

For user accounts, it is the uppercase Kerberos realm name + case sensitive username

For computer accounts, it is the uppercase realm name + the word host + full lowercase hostname

在我们拥有了一个可以完全掌控的账户之后,我们需要进行引流,就是让受害者可以访问到我们的服务,这样我们就可以用该账户对TGS票据进行解密,进而获得TGT,这里有一个问题就是我们如何让受害者访问到我们的服务呢?,答案就是直接给该账户注册一个SPN,使用​​addspn.py​

注意:我们注册SPN的目的就是为了创建出一个不存在的服务,从而保证该服务一定是注册在我们控制的账户上面的,并且是注册在我们可以控制的机器上的

如果我们拥有的账户没有直接注册SPN的权限,那么我们也可以通过其他方式创建出默认的SPN

​python addspn.py -u testsegment\\w10-outlook\$ -p aad3b435b51404eeaad3b435b51404ee:7a99efdea0e03b94db2e54c85911af47 -s testme.testsegment.local s2016dc.testsegment.local​

这条命令会将​​msDS-AdditionalDnsHostName​​​属性的值修改为​​testme.testsegment.local​​​,这部操作完成后,​​testme.testsegment.local​​就会注册出默认SPN

好了,经过上面的操作我们已经完成了SPN的注册,SPN是注册到一个​​hostname​​​上的,但是我们需要让其他的主机知道怎么通过​​hostname​​来找到我们的主机。这时我们就需要通过修改DNS记录来达到这一目的。

如果我们所处的网络环境中的DNS服务器使用的是Windows Active Directory集成的DNS服务器,那么事情就会变得简单得多,在默认情况下,活动目录中任何经过验证的用户都可以添加DNS记录

​https://github.com/dirkjanm/krbrelayx​​​有一个​​dnstool.py​​工具,可以直接修改DNS记录

​python dnstool.py -u icorp\\testuser icorp-dc.internal.corp -r attacker -a add -d 10.1.1.2​

这条命令执行完后,LDAP中会多出一条记录

[+] Found record attacker
DC=attacker,DC=internal.corp,CN=MicrosoftDNS,DC=DomainDnsZones,DC=internal,DC=corp
[+] Record entry:
- Type: 1 (A) (Serial: 36)
- Address: 10.1.1.2

DNS服务器默认情况下每3分钟会从LDAP中获取一次数据来刷新自己的记录,到时间我们就可以直接在DNS服务器中查询到我们刚才添加进去的DNS记录了

引流


  • 钓鱼
  • responder、 Inveigh
  • mitm6
  • 图片链接,带一个到特定文件共享的UNC路径

两个例子


  • print bug
  • ​exchange权限提升​​ Exchange Web Services (EWS) SOAP API ,这个远程调用会触发exchange推送通知到用户,如果exchange账户可以执行非约束委派,则我们可以直接获取到其TGT来提升自己在域内的权限。

例一

print bug

例二

exchange priv abuse