我们来自五湖四海,不为别的,只因有共同的爱好,为中国互联网发展出一分力!

如何抓取所有域用户的hash(win2008--win2012)

2013年10月08日20:50 阅读: 15059 次

如何抓取所有域用户的hash 

gethashes.exe 和gsecdump.exe都直接悲剧,这意味着想要轻量级的抓取所有域用户hash已经很难了。 
在线抓取失败,没办法只能祭出终极武器:离线抓取! 
第一种办法: vssown.vbs + libesedb + NtdsXtract 
详细出处参考这里:http://pauldotcom.com/2011/11/safely-dumping-hashes-from-liv.html
首先用vssown.vbs把域数据库ntds.dit和SYSTEM文件复制一份,然后把复制文件下载回本地,再利用libesedb分解ntds.dit文件,最后用NtdsXtract分析出用户hash信息, 
这种方法除了能获取用户当前密码hash外,还能获取历史密码hash值,能给社工带来更多的帮助。除此之外还能获取很多其他的信息,比如所有计算机列表,操作系统等等保存在域数据库中的数据。 
具体的操作过程就直接上图了,不懂得可以去看那篇英文的文章 
不过有一点需要注意,那篇文章过后vssown.vbs有更新过,在创建shadow copy时需要指定盘符,不然会有个下标越界的错误,这是为了方便当域数据库保存在D盘时的情况。 
Windows server 2012 用户hash抓取方法研究(本地+域) 
然后把ntds.dit和SYSTEM这两个文件下载回本地,放到BT5里面提取hash: 
可以看到成功的提取了域里面所有用户的密码hash 
在实际渗透时需要注意的问题: 
域的数据库根据域的规模大小不一,我见过最大的有5G,所以下载回本地时推荐压缩后再下载

ntdsutil.exe + QuarksPwDump.exe 
Ntdsutil.exe 是域控制器自带的域数据库管理工具。从windows server 2008 开始就有了。 
这个方法在QuarksPwDump.exe程序的Readme.txt里面有详细的讲解(windows 2008那个,适用于windows server 2012)。按顺序运行下列命令,不用带#号 
#ntdsutil 
#snapshot 
#activate instance ntds 
#create 
#mount {GUID} 
#copy c:MOUNT_POINTWINDOWSNTDSNTDS.dit c:NTDS_saved.dit 
#unmount {GUID} 
#quit 
#quit 
上图: 
然后用QuarksPwDump.exe导出hash值,运行命令: 
QuarksPwDump.exe --dump-hash-domain --ntds-file c: tds.dit 
Windows server 2012 用户hash抓取方法研究(本地+域) 
注意:我发现其实作者忘了一个步骤,是删除快照信息,如果域管理员是利用这个工具进行管理的话,会很容易发现有人创建过快照,所以在quit之前应该执行delete {GUID}命令 
以上就是两种比较重量级的抓取hash的方法了。第一种方法我经常用,从2003-2012通杀,有时候会遇到vssown.vbs出错, 
一般是在windows 2008 R2上面出错比较多,这时候改用vssadmin.exe就OK的,vssadmin.exe的用法、功能和vssown.vbs差不多,vssadmin.exe在2008 R2中自带。 
具体使用方法参考:http://technet.microsoft.com/en-us/library/cc754968%28v=ws.10%29.aspx 
第二种也可以通杀2003到2012,但是2003里面比较麻烦,需要在图形界面中手动备份数据库才行,2008 和 2012则可以在命令行下搞定。另外用vssown.vbs复制出来的ntds.dit数据库不能用QuarksPwDump抓取。 
补充:cmd shell下的抓取方式 
前面讲了两种抓取所有域用户hash的方法,但是都是在交互的图形化界面中进行的。实际的渗透中,最好不要用mstsc登录域控制器, 
很可能上面装有监控远程桌面登录信息的各种工具。更实际的情况应该是我们从一台成员服务器上通过远程的cmd shell抓取域用户信息。 
我一般用psexec开启一个远程cmdshell,如果没有域管理员密码明文,就用wce进行hash注入,再用psexec就可以了。 
第一种方法主要是vssown.vbs的操作,没有任何交互式的命令需要执行,所以没有什么特别的,在psexec下面直接操作即可 
第二种方法中ntdsutil.exe的命令是交互式的,需要一步步输入,而psexec开启的shell是没办法这么做的,会直接卡死在那。 
于是我尝试了下把命令写在一起,就像用netsh配置网络信息时一样,发现是可以用的,只不过有空格的地方用引号就行了。 
所以ntdsutil的命令就可以写成 
ntdsutil snapshot "activate instance ntds" create quit quit 
ntdsutil snapshot "mount {GUID}" quit quit 
copy MOUNT_POINTwindowsNTDS tds.dit c: tds.dit 
ntdsutil snapshot "unmount {GUID}" quit quit 
ntdsutil snapshot "delete {GUID}" quit quit 
接下来就是导出hash,执行: QuarksPwDump.exe --dump-hash-domain --ntds-file c: tds.dit 
具体的过程如下: 
总结: 
测试了这么多,最大的收获应该是mimikatz还能抓到lm hash。其实还是有很多工具可以抓到hash的,期待wce的更新,他的hash注入功能还是很实用的。 
另外我发现有时候psexec在退出后,远程服务器的psexec的服务并没有被删除,这点相当危险,而且psexec会安装服务,很容易被管理员发现。 
理论上psexec可以用wmi远程执行命令代替,但是一直没有去研究那个,如果哪位大牛了解,望不吝赐教。 
最后,吐槽下windows server 2012烂到掉渣的用户体验,用起来跟翔一样…… 

分享到: 更多
蓝客门户
©2001-2017 中国蓝客联盟 版权所有.
关于蓝客联盟历史宗旨章程技术服务联系我们蓝客社区