当前位置: 首页 > news >正文

内网横向移动避坑指南:Mimikatz哈希传递(PTH)常见失败原因及解决方案

内网横向渗透中的哈希传递实战:从原理到排错的深度解析

如果你在内网渗透测试中尝试过使用Mimikatz进行哈希传递攻击,大概率遇到过这样的场景:精心获取的NTLM哈希值,信心满满地执行了经典的sekurlsa::pth命令,弹出的CMD窗口却无法访问目标主机的共享资源,或者返回令人沮丧的“拒绝访问”或“登录失败”错误。这并非个例,而是许多安全研究员和红队成员在实际操作中频繁遭遇的“滑铁卢”。哈希传递作为一种经典的横向移动技术,其成功与否远不止于一条命令的正确输入,它背后涉及操作系统版本、补丁状态、安全策略、账户权限以及网络配置等一系列复杂的制约因素。本文将从一个实践者的角度,深入剖析PTH攻击失败的常见原因,并提供一套系统性的诊断思路与解决方案,帮助你在错综复杂的内网环境中,精准定位问题,有效突破防线。

1. 哈希传递的核心原理与前置条件再审视

在深入排错之前,我们有必要超越工具使用的层面,重新理解哈希传递的本质。许多人将PTH简单地等同于Mimikatz的一个功能模块,这其实是一种误解。PTH攻击的核心,在于绕过本地密码哈希生成过程,直接向身份验证子系统提交已获取的哈希值

Windows网络身份验证(如SMB、WMI、WinRM)主要依赖NTLM或Kerberos协议。在NTLM认证流程中,当客户端尝试访问服务器资源时,服务器会发起一个挑战。客户端需要使用用户密码的哈希(NTLM hash)对该挑战进行加密运算,生成一个响应。PTH攻击的精妙之处在于,攻击者无需知道原始密码,只要拥有了正确的NTLM hash,就能独立完成这个响应计算,从而通过认证。

注意:这里所说的NTLM hash,严格来说是NT hash,它基于MD4算法。自Windows Vista/Server 2008后,更古老且脆弱的LM hash已被默认禁用,现代环境中的PTH几乎都指代使用NT hash。

要使一次PTH攻击得以成功执行,必须同时满足以下几个关键条件,任何一个环节的缺失都可能导致失败:

  1. 有效的身份凭据:你拥有的NTLM hash必须来自目标系统上真实存在且未被禁用的用户账户。一个常见的误区是使用了域用户的哈希去登录一个仅存在于本地的工作组机器。
  2. 适当的访问权限:该用户账户在目标主机上必须拥有执行相应操作所需的权限。例如,通过dir \\target\C$访问管理员共享,要求该账户是目标主机本地Administrators组的成员。
  3. 兼容的认证协议:目标服务必须允许使用NTLM协议进行认证。如果目标系统或服务(如某些配置下的IIS)强制使用Kerberos或仅允许协商认证,而当前环境(如非域环境)无法提供Kerberos票据,则NTLM PTH会失败。
  4. 未被安全机制阻断:系统层面的安全策略,如用户账户控制、受限制的管理员模式、特定的安全补丁等,不能完全阻止这种类型的网络登录。
  5. 可用的网络路径与服务:相应的网络端口(如SMB的445端口)必须可达,且相关服务器服务(Server)正在运行。

下面这个表格概括了PTH成功所需的核心要素及对应的验证点:

要素具体内容验证/排查方法
凭据有效性正确的用户名、对应的NTLM Hash、正确的域名或计算机名使用net userGet-ADUser(域内) 确认用户状态;核对Hash来源。
账户权限账户在目标主机上属于本地管理员组尝试用已知密码的同一账户远程连接;或通过其他已控主机查询目标本地组。
认证协议目标服务接受NTLM认证检查目标系统Local Security Policy中的网络安全策略;或使用Nmap脚本扫描SMB签名等设置。
安全策略未启用“受保护的用户”组、UAC远程限制等检查目标系统组策略;尝试使用本地管理员账户(SID 500)进行PTH,其限制通常较少。
网络与服务端口开放,服务运行,防火墙允许使用Test-NetConnectiontelnet测试端口连通性;使用sc query lanmanserver检查服务状态。

2. 权限与账户配置导致的典型失败场景

这是PTH失败最常见的原因之一。很多时候,我们拿到了一个有效的哈希,却忽略了该账户在目标上下文中的实际权限。

场景一:账户非本地管理员这是最直白的原因。你获取了用户zhangsan的哈希,并在自己的攻击机上成功通过sekurlsa::pth弹出了带有zhangsan身份令牌的CMD。然而,当你执行dir \\192.168.1.10\c$时,系统提示“拒绝访问”。这是因为zhangsan在目标主机192.168.1.10上只是一个普通用户,不属于本地Administrators组。PTH成功模拟了身份,但该身份没有访问管理员共享的权限。

  • 解决方案
    • 权限提升:尝试利用其他漏洞(如本地提权)在目标主机上获得一个管理员会话,然后从该会话中抓取真正的管理员哈希。
    • 信息收集:在发起PTH前,应尽可能收集目标信息。可以通过已控制的其他主机、LDAP查询(域环境)或网络扫描来推测哪些账户可能是目标的管理员。例如,许多运维会使用统一的本地管理员密码。
    • 横向切换目标:如果当前哈希权限不足,可以考虑用它访问该用户有权访问的其他资源(如文件共享、Web应用),寻找新的突破口,再图进一步渗透。

场景二:UAC远程限制用户账户控制对远程管理的影响常常被忽视。从Windows Vista/Server 2008开始,非内置的本地管理员账户在通过网络进行远程管理时,会受到UAC过滤器的限制。即使账户在本地Administrators组中,其远程令牌也是“过滤后的”,不包含管理员权限,除非该操作需要提升权限的提示被同意(这显然无法远程完成)。

  • 解决方案
    • 使用内置Administrator账户:内置的RID为500的Administrator账户不受此UAC远程限制。因此,如果可能,优先收集和使用该账户的哈希进行PTH。
    • 修改注册表:如果条件允许(例如通过其他已控主机),可以远程修改目标注册表,禁用UAC的远程限制(需重启生效或触发策略更新),但这会留下明显痕迹。
      # 在目标主机上执行(需管理员权限) reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
    • 使用服务票据:在域环境中,可以尝试使用Kerberos票据而非NTLM哈希,有时可以绕过此限制。

场景三:账户被禁用或锁定账户本身在目标系统上被禁用,或者由于多次失败登录尝试而被临时锁定。

  • 解决方案
    • 在域环境中,使用net user username /domain或PowerShell的Get-ADUser命令检查账户状态。
    • 在工作组环境,这比较难直接查询,通常需要通过其他途径确认或尝试使用其他账户。

3. 系统安全机制与补丁带来的挑战

微软为了应对凭据盗窃和横向移动,引入了多项安全机制,其中一些会直接导致传统的PTH攻击失效。

挑战一:KB2871997补丁的影响这个著名的补丁(及后续Windows更新中集成的相应安全特性)旨在限制对本地管理员账户的远程使用。它的核心影响是:即使你拥有了本地管理员组中某个账户的哈希,也无法直接通过网络进行PTH,除非该账户是内置的Administrator (RID 500)。这解释了为什么有时用普通管理员账户哈希PTH失败,但换用内置Administrator账户却成功了。

  • 解决方案与深度利用
    1. 首选内置Administrator:再次强调,内置Administrator账户是绕过此限制的“金钥匙”。
    2. “注册表注入”技巧:Mimikatz的sekurlsa::pth命令会在内存中创建一个新的登录会话,并注入提供的凭据。对于打了KB2871997补丁的系统,如果目标账户当前已在目标系统上有活跃的会话(例如有人正在登录使用),那么针对该账户的PTH仍然可能成功,因为凭据已经存在于LSASS中。但这条件较为苛刻。
    3. 转向其他技术:当PTH受限制时,应考虑替代的横向移动方法:
      • 票据传递:在域环境中,如果获得了用户的Kerberos票据,使用sekurlsa::tickets /export导出并用kerberos::ptt注入,往往比NTLM PTH更有效。
      • Over-Pass-the-Hash:这实际上是PTH的一种变体,它利用NTLM哈希向域控制器请求一个Kerberos票据,然后再使用该票据进行访问,有时能绕过一些针对传统PTH的检测。
      • WMI、WinRM、计划任务:使用哈希配合这些协议进行远程命令执行,可能对安全策略的敏感度与SMB不同。

挑战二:受保护的用户组“受保护的用户”是域中的一个安全组。加入此组的用户,其凭据在域控制器上会受到更强保护,例如禁止使用NTLM认证,强制使用Kerberos且票据生存期很短。如果你尝试对一个属于“受保护的用户”的账户进行NTLM PTH,必然会失败。

  • 解决方案
    • 识别用户是否在该组内。如果确认,则放弃使用该用户的NTLM哈希进行横向移动,转而寻找其Kerberos票据,或者使用其他账户。

4. 网络策略、防火墙与主机配置问题

技术层面之外,网络和系统配置也是常见的“拦路虎”。

问题一:SMB签名如果目标服务器强制要求SMB签名,而你的PTH攻击发起的SMB会话未启用签名,连接会被拒绝。在工作组环境中较少见,但在域环境中,域控制器默认要求SMB签名。

  • 解决方案
    • 使用支持SMB签名的工具进行PTH。例如,Impacket套件中的很多脚本(如psexec.py,smbexec.py)在传递哈希时会处理签名问题。Mimikatz弹出的原生CMD窗口可能不支持。
    • 使用其他不依赖SMB的横向移动方式,如WMI over DCOM、WinRM等。

问题二:主机防火墙Windows防火墙可能阻止了SMB(TCP 445)或其他管理端口(如WMI的135、WinRM的5985/5986)的入站连接。

  • 解决方案
    • 使用端口扫描确认端口是否开放。
    • 如果已有其他通道,可以尝试远程修改防火墙规则(需管理员权限):
      netsh advfirewall firewall add rule name="Open SMB" dir=in action=allow protocol=TCP localport=445
    • 使用允许出站的协议进行“反向连接”,例如使用哈希通过WMI或Scheduled Task创建反向Shell。

问题三:网络访问控制列表或主机限制除了本地防火墙,网络层可能还存在ACL限制,或者目标主机配置了“拒绝从网络访问此计算机”的安全策略。

  • 解决方案
    • 检查目标主机的安全策略:secpol.msc-> 本地策略 -> 用户权限分配 -> “拒绝从网络访问这台计算机”。如果目标账户或所在组在此列表中,PTH将失败。
    • 网络ACL难以直接绕过,需要依赖网络拓扑发现,寻找可通行的路径。

5. 实战排错流程与工具链辅助

当PTH失败时,遵循一个系统化的排错流程可以节省大量时间。

第一步:基础连通性与服务检查在尝试任何认证之前,先确保网络是通的,服务是活的。

# 使用PowerShell测试端口 Test-NetConnection 192.168.1.10 -Port 445 # 使用传统telnet(如果可用) telnet 192.168.1.10 445

第二步:凭据与权限预验证

  • 验证哈希有效性:确保哈希格式正确(32位十六进制字符串),且来自正确的用户。
  • 推测权限:结合信息收集,判断该用户是否可能是目标的管理员。可以尝试用该哈希访问一个权限要求较低的共享(如IPC$)或服务。

第三步:使用替代工具进行交叉验证不要只依赖Mimikatz。用其他支持PTH的工具尝试同样的凭据,这有助于判断是凭据问题还是工具/协议兼容性问题。

# 使用Impacket的psexec进行哈希传递(Linux攻击机) python3 psexec.py -hashes :2cefb09dda6f9becfa3c0f56c3dad7 domain/administrator@192.168.1.10 # 使用CrackMapExec进行测试 crackmapexec smb 192.168.1.10 -u administrator -H 2cefb09dda6f9becfa3c0f56c3dad7 --shares

如果Impacket成功而Mimikatz失败,可能问题出在SMB签名或会话建立方式上。

第四步:深入分析错误代码Windows系统返回的错误代码是宝贵的诊断信息。常见的如:

  • STATUS_ACCESS_DENIED(0xC0000022):通常是权限不足。
  • STATUS_LOGON_FAILURE(0xC000006D):用户名、密码或哈希错误,或账户被禁用/锁定。
  • STATUS_ACCOUNT_RESTRICTION(0xC000006E):账户有登录限制(如时间限制)。
  • STATUS_NETWORK_ACCESS_DENIED(0xC00000CA):网络访问被拒绝(如防火墙、ACL)。

可以在微软官方文档或通过net helpmsg命令查询错误代码的具体含义。

第五步:启用详细日志与分析在可控的测试环境中,可以在攻击机和目标机上启用更详细的日志(如Windows安全事件日志中的“审核登录/注销”事件),观察认证过程在哪一步失败,这能提供最直接的线索。

内网横向移动是一场精细的“外科手术”,哈希传递是其中一把锋利但需要精准操作的手术刀。它并非万能,其成功严重依赖于对环境细节的深刻理解。当PTH受阻时,最忌讳的是盲目重复尝试。停下来,从凭据、权限、策略、网络、服务这五个维度进行系统性排查,并准备好切换到票据传递、WMI、WinRM、计划任务乃至漏洞利用等备选方案。真正的渗透测试高手,其价值不在于记住多少条命令,而在于拥有一个清晰的排错思维框架和一套灵活多变的技术工具箱。每一次失败的攻击尝试,其背后揭示的系统配置信息,都可能成为你下一步成功突破的垫脚石。

http://www.jsqmd.com/news/456318/

相关文章:

  • 从零到一:基于Miniforge3与Mamba构建高效Python开发环境(2025实践版)
  • Win10更新后外接显示器消失?Thinkpad X1 Carbon 6代保姆级避坑指南
  • 如何通过RyzenAdj实现AMD锐龙处理器的电源优化与性能调校
  • VideoAgentTrek Screen Filter环境配置详解:Anaconda创建独立Python虚拟环境
  • 智能解析:突破网页视频下载壁垒的Chrome扩展工具
  • 离线歌词批量获取与同步工具:LRCGET完全指南
  • PowerBI度量值格式化避坑指南:保持数字格式的3种单位显示技巧
  • Overleaf+计算机学报模板:零基础协作撰写学术论文的完整指南
  • 裸机级C++编译优化手册(含RISC-V+ARMv8双平台Makefile模板):删掉这11行冗余flag,内存占用直降41%
  • EcomGPT-7B效果展示:跨境小家电→多平台合规文案(含CE/FCC认证提示)
  • 突破暗黑破坏神II角色养成限制:Diablo Edit2工具实现个性化角色定制自由
  • 键盘连击终结者:Keyboard Chatter Blocker全方位解决方案
  • 如何用文本快速生成专业流程图?flowchart.js全场景应用指南
  • 基于ChatGPT与Python构建高可用聊天系统:从架构设计到生产环境部署
  • ccmusic-database/music_genre效果对比:不同采样率(16k/44.1k)识别稳定性
  • 开源工具Nigate:Mac平台NTFS管理完全指南
  • BERT中文分段镜像应用场景:从会议记录到讲座文稿的全搞定
  • Qwen3-ASR-1.7B性能优化:利用C语言加速推理过程
  • 构建基于FRCRN的智能语音笔记应用:实时降噪转文字
  • 如何使用OpenCore Configurator简化黑苹果系统配置流程
  • Ostrakon-VL-8B多模态大模型一键部署:基于Python的快速入门指南
  • Vue图片查看解决方案:v-viewer全方位技术指南
  • Translumo实时屏幕翻译:破解跨语言场景的效率瓶颈
  • 6步解锁热键自由:Hotkey Detective全方位冲突排查指南
  • 不用管理员权限!PRTG安全监控Windows 10性能的WMI权限配置指南
  • 浦语灵笔2.5-7B环境配置:CUDA 12.4 + PyTorch 2.5 + FlashAttention 2.7.3
  • 突破数据接口瓶颈:AKShare金融数据获取实战指南
  • 从Claude到UNIT-00:开源代码生成与审查能力对比与实践
  • Skylo与ViaSat的NB-IoT NTN方案解析:如何用GEO卫星实现低功耗IMS语音通话?
  • 通义千问1.5-1.8B-Chat-GPTQ-Int4 使用CSDN博客文章进行领域知识微调