导出当前域内所有用户hash的技术整理

author:三好学生

0x00目标:

导出当前域内所有用户的hash

0x01测试环境:

0x02测试方法:

(1)mimikatz:

(2)pwdump:

(3)vssown.vbs + libesedb + NtdsXtract

Tips:
libesedb + NtdsXtract环境搭建的一点提示:

(4)ntdsutil.exe + QuarksPwDump.exe

0x03实际测试:

  • gethashes.exe:没有源码,忽略
  • mimikatz:无法抓出所有用户hash,本机管理员口令也无法导出
  • pwdump:抓取数量不足
  • vssown.vbs + libesedb + NtdsXtract:成功,耗时3天+
  • ntdsutil.exe + QuarksPwDump.exe:ntdsutil.exe报错,失败

0x04分析:

5种方法唯一成功的是vssown.vbs + libesedb + NtdsXtract,但是耗时太久,操作麻烦,下载数据库容易暴露,vssown.vbs备份的信息容易被管理员发现

其他方法中可取的地方:vssown.vbs复制数据库的方法很是巧妙,但存在一些不足,配合域控的at命令执行较为麻烦;QuarksPwDump.exe可在windows下直接使用,免去读取数据库的等待,并且QuarksPwDump可获得源码,能够配合实际使用做修改。

那么大胆设想一下:如果使用QuarksPwDump.exe在域控上直接读取ntds.dit岂不是最好

0x05改进:

(1)分析vssown.vbs的复制办法,找到一种更好的解决办法,改用ShadowCopy实现ntds.dit的复制
(2)对QuarksPwDump的改造,实现命令行下的自动读取及导出信息

Tips:

0x06最终方案:

(1)使用ShadowCopy的命令行版,编写bat实现拷贝ntds.dit至当前目录

参考链接: http://blogs.msdn.com/b/adioltean/archive/2005/01/05/346793.aspx

(2)使用QuarksPwDump直接读取信息并将结果导出至文件,先执行

修复复制出来的数据库

读取并导出。

注:实际使用时ntds.dit和log.txt需要加绝对路径

Tips:

0x07小结:

ShadowCopy+QuarksPwDump:

评论

first2016-06-21 15:17:36

@三好学生
ERROR: COM call "m_pVssObject->InitializeForBackup()" failed.
- Returned HRESULT = 0x80042302
- Error text: <Unknown error code>
- Please re-run VSHADOW.EXE with the /tracing option to get more details
shadcopy报这样的错是为什么

0x702016-05-06 20:54:25

@三好学生
[+] SYSKEY restrieving...[OK]
SYSKEY = 4A5DB246C825E2568509D58340D30DB8
[+] Init JET engine...OK
[+] Open Database c:\Users\2015000\Desktop\ntds.dit...ERROR : JetOpenDatabase() failed with JET_ERR = -602
Details : JET_errUnicodeTranslationFail, Unicode normalization failed
[!] NTDS_OpenDatabase failed!

三好学生2016-05-06 15:18:47

@0x70 https://github.com/quarkslab/quarkspwdump/pull/3

0x702016-05-06 15:13:21

+] Parsing datatable...Fatal error: not enough memory!
爆这个错误是怎么回事?怎么解决

2015-11-26 23:44:03

给楼主一个提示:VSHADOW

三好学生2015-07-08 08:16:33

@浮生 @喵喵爱吃鱼
gsecdump没有源码,免杀比较麻烦,所以就没考虑
QuarksPwDump有源码,免杀相对容易很多

浮生2015-07-07 19:53:07

@喵喵爱吃鱼
gsecdump杀的有点厉害,需要免杀的

浮生2015-07-07 19:51:41

最后方案也是需要 QuarksPwDump.exe免杀的

三好学生2015-07-06 09:57:47

@_Evil
可以用NtdsXtract:
python dsusers.py ../ntds.dit.export/datatable.3 ../ntds.dit.export/link_table.5 --passwordhashes '/root/SYSTEM' --passwordhistory '/root/SYSTEM'

_Evil2015-07-06 09:37:26

@mickey m老湿 文章里面可以所获取账号的历史密码(他说上限是20次内)。 有啥方法?

喵喵爱吃鱼2015-07-06 09:03:01

楼主没有测试神器gsecdump呢,可以到处2008所有用户的HASH。貌似2012就不可以了。

三好学生2015-07-03 18:04:03

@mickey 感谢提供参考资料,期末考试我要得100分

三好学生2015-07-03 17:56:03

@debug
QuarksPwDump确实还有修改提升空间,配合实际需要修改源码就好