域渗透——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工具

  1. Metasploit
use exploit/windows/smb/psexec_psh
  1. 密码攻击工具集
    位于"密码攻击 → 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

步骤:

  1. 生成票据:
kekeo "tgt::ask /user:test1 /domain:test.local /ntlm:7ECFFFF0C3548187607A14BAD0F88BB1"

生成文件:TGT_test1@TEST.LOCAL_krbtgt~test.local@TEST.LOCAL.kirbi

  1. 导入票据:
kekeo "kerberos::ptt TGT_test1@TEST.LOCAL_krbtgt~test.local@TEST.LOCAL.kirbi"

0x03 防御建议

  1. 限制特权账户使用

    • 避免域管理员账户用于日常操作
    • 实施最小权限原则
  2. 补丁管理

    • 安装kb2871997等安全补丁
    • 但注意:kb2871997仅限制本地账户的PTH,不影响域账户
  3. 监控与检测

    • 监控异常的身份验证尝试
    • 检测LSASS进程的异常访问
  4. 安全配置

    • 禁用LM hash存储
    • 启用SMB签名
    • 限制WMI和SMB的访问权限
  5. 凭证保护

    • 使用Credential Guard(Windows 10/Server 2016+)
    • 实施LSA保护

0x04 总结

Pass The Hash是域渗透中极为有效的横向移动技术,攻击者无需破解明文密码即可利用哈希值进行身份验证。本文详细介绍了PTH的原理、多种实现工具及防御措施,为安全研究人员提供了全面的技术参考。在实际渗透测试或安全评估中,理解这些技术有助于更好地评估和加固域环境的安全性。

域渗透——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) 0x02 常用PTH工具 Kali Linux工具 Metasploit 密码攻击工具集 位于"密码攻击 → Passing the Hash"分类下,包含多种利用工具 Windows工具 1. Python工具 wmiexec.py 项目地址:https://github.com/CoreSecurity/impacket EXE版本:https://github.com/maaaaz/impacket-examples-windows 参数格式: 示例: 注:LMHASH可为任意值(当系统不支持LM hash时) 2. PowerShell工具 Invoke-TheHash 项目地址:https://github.com/Kevin-Robertson/Invoke-TheHash 包含多种执行方式: a. Invoke-WMIExec 类似wmiexec.py的实现 b. Invoke-SMBExec 特点: 支持SMB1, SMB2 (2.1)和SMB签名 通过创建服务执行命令,权限为SYSTEM c. Invoke-SMBClient 适用于仅有SMB文件共享权限的情况,支持: 列举目录 上传/下载文件 删除文件 (权限取决于hash对应账户的权限) 3. Mimikatz工具 a. Pass-The-Hash(实际为Overpass-the-hash) 要求:本地管理员权限(需访问lsass.exe进程) b. Pass-The-Ticket 适用于非管理员权限场景,需配合kekeo使用: kekeo下载:https://github.com/gentilkiwi/kekeo 步骤: 生成票据: 生成文件: 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的原理、多种实现工具及防御措施,为安全研究人员提供了全面的技术参考。在实际渗透测试或安全评估中,理解这些技术有助于更好地评估和加固域环境的安全性。