首页
社区
课程
招聘
[原创]MS17-010 “永恒之蓝”漏洞分析与复现
发表于: 2021-9-5 10:19 32025

[原创]MS17-010 “永恒之蓝”漏洞分析与复现

2021-9-5 10:19
32025

MS17-010漏洞分析

一、漏洞信息

1. 漏洞简述

  • 漏洞名称:“永恒之蓝”漏洞
  • 漏洞编号:MS17-010,CVE-2017-0143/0144/0145/0146/0147/0148
  • 漏洞类型:缓冲区溢出漏洞
  • 漏洞影响:信息泄露
  • CVSS评分:9.3(High)
  • 利用难度:Medium
  • 基础权限:不需要

2. 组件概述

SMB(Server Message Block)是一个协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。

 

SMB1.0协议由于在文件共享传输过程中存在的传输效率低以及传输空间小等缺陷被人们所摒弃。为了更好的实现网络中文件的共享过程,在SMB1.0的基础上开发了新的网络文件传输协议,并将其命名为SMB2.0。该协议在实现了文件共享传输的基本功能的基础上对文件传输的效率、文件缓存的空间以及文件并发传输等问题进行改进,使得在局域网或更高配置的网络环境下,文件传输过程的速度和效率等得到了很大的提升。

4. 漏洞影响

Windows Vista SP2; Windows Server 2008 SP2 and R2 SP1; Windows 7 SP1; Windows 8.1; Windows Server 2012 Gold and R2; Windows RT 8.1; and Windows 10 Gold, 1511, and 1607; and Windows Server 2016

 

以上系统打开445号端口都容易受到影响。

5. 解决方案

  • 禁用 SMBv1

对于客户端操作系统:

  1. 打开“控制面板”,单击“程序”,然后单击“打开或关闭 Windows 功能”。
  2. 在 Windows 功能窗口中,清除SMB1.0/CIFS 文件共享支持复选框,然后单击确定关闭窗口。
  3. 重新启动系统。

对于服务器操作系统:

  1. 打开服务器管理器,然后单击管理菜单并选择删除角色和功能。
  2. 在功能窗口中,清除SMB1.0/CIFS 文件共享支持复选框,然后单击确定关闭窗口。
  3. 重新启动系统。

    • 更新Windows系统补丁

官方文档链接

二、漏洞复现

1. 环境搭建

实验中需要用到三个机器,分别是调试机,靶机(被调试机),攻击机

  • 调试机环境:主机Windows 10x64专业版 1909
  • 靶机(被调试机)环境:Windows 7x86 SP1
  • 靶机(被调试机)配置:192.168.44.132:445
  • 攻击机环境:Windows XPx86 SP3
  • 攻击机配置:192.168.44.152

1. 双机内核调试

首先需要用调试机调试靶机,具体实现双机调试请看这里

2. 安装并配置fuzzbunch

另外需要在攻击机安装fuzzbunch实现永恒之蓝漏洞:

  1. 安装Python 2.6

  2. 安装PyWin32
    需要以管理员权限进行安装

  3. 下载fuzzbunch

  4. 在shadowbroker-master的子目录windows中新建listeningposts文件夹,同时修改FuzzyBunch.xml文件内容,设置相应的ResourcesDir和LogDir参数值,修改结果如下图所示。(路径根据实际情况而定)

1.png

3. 靶机环境配置

  1. 打开靶机445端口,具体打开方法点这里

  2. 关闭防火墙:控制面板-系统和安全-Windows防火墙-打开或关闭Windows防火墙-全部选择关闭防火墙。

2. 复现过程

在攻击机中启动命令行,进入fuzzbench的Windows文件夹,用python启动fuzzbench:

 

2.PNG

 

启动后设置靶机IP-设置击机IP-重定向no-log地址确认(无误直接回车)-0+回车(创建新的项目)-为项目命名-设置路径(Yes)-:

 

3.PNG

 

使用永恒之蓝建立后门:

1
use Eternalblue

之后一直回车到出现设置靶机系统版本,本次复现靶机为Win7,所以选择1:

 

4.PNG

 

5.PNG

 

下一项模式选择1,FB模式:

 

6.PNG

 

接下来一直回车即可,即可看到插件运行,并成功利用永恒之蓝漏洞在靶机系统中留下后门:

 

10.PNG

三、漏洞分析

1. 基本信息

  • 漏洞文件:srv.sys
  • 漏洞函数:srv!SrvOs2FeaListToNt
  • 漏洞对象:为NtFeaList分配的缓冲区

2. 背景知识

1. SrvOs2FeaListToNt()函数

SrvOs2FeaListToNt()函数用于将FEA list转化为NTFEA list,需要分配在内核地址大非分页池分配缓冲区来存放转化后的NTFEA list,因此需要先计算转化后的NTFEA list的大小,计算大小是通过srv!SrvOs2FeaListSizeToNt()函数进行的,这个函数被SrvOs2FeaListToNt()调用。

2. 0xffdff000系统预留地址空间

0xffdff000处地址是系统预留的地址空间,用于存放时钟,版本,配置等信息,其分配的权限为可执行:

1
2
3
4
5
kd> !pte 0xffdff000
                    VA ffdff000
PDE at C0603FF0            PTE at C07FEFF8
contains 000000000018A063  contains 00000000001E3163
pfn 18a       ---DA--KWEV  pfn 1e3       -G-DA--KWEV

3. 详细分析

1. 静态分析


[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

最后于 2021-9-6 07:54 被Sal_Tay编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (4)
雪    币: 186
活跃值: (2659)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
010的shellcode很有意思 本以为能看到shellcode分析
2021-9-5 17:32
0
雪    币: 820
活跃值: (1051)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
章鱼C 010的shellcode很有意思 本以为能看到shellcode分析
以后有机会的现在能力有限
2021-9-5 20:51
0
雪    币: 515
活跃值: (687)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
能问一下怎么样查到_FEALIST这两个结构体信息的吗?我网上也没找到对应的函数原型文档
2022-6-25 17:20
0
雪    币: 803
活跃值: (1517)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
写得真的很好,易理解
2023-3-27 12:00
0
游客
登录 | 注册 方可回帖
返回