首页
社区
课程
招聘
[原创]Linux cve-2017-7494samba远程漏洞利用和分析
2017-6-2 14:58 20794

[原创]Linux cve-2017-7494samba远程漏洞利用和分析

2017-6-2 14:58
20794

漏洞背景

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中间的所有版本,,确认属于严重漏洞,可以造成远程代码执行。


环境搭建

靶机环境    :                Linux-mint 17 镜像网上随便下内核版本3.13.0-24-generic x86_64

samba版本:                4.1.6-Ubuntu

然后配置smb服务配置
vim /etc/samba/smb.confg

参考其他人分析在末行加入

但是我自己测试 只需要就可以


重新reload smb的配置文件 重启服务
/etc/init.d/samba restart
/etc/init.d/samba reload
有的机器上需要关闭防火墙

/etc/init.d/iptables stop

看当前靶机ip


攻击机环境: kali2017-amd64 .iso         :https://www.kali.org/downloads/  直接安装镜像即可,linux kali 自带metasploit框架,利用起来非常的方便

Exploit_CVE-2017-7494(msf-ruby)        :https://github.com/hdm/metasploit-framework/blob/0520d7cf76f8e5e654cb60f157772200c1b9e230/modules/exploits/linux/samba/is_known_pipename.rb


在攻击机上扫描目标靶机是否445 端口是否打开,因为samba服务开启需要开启445端口

可以看到445和139端口open开启

把down下来的ruby脚本is_known_pipename.rb拷贝至kali机器上的/usr/share/metasploit-framework/modules/exploits/linux/samba/目录下

启动启动msfconsole,并选择使用is_known_pipename模块:

设置目标机ip等,看下配置选项:


开始进行攻击:


可以看到尝试着在靶机的共享目录下上传一个随机字符串生成的so文件,然后就会回连一个shell,看出ip就是靶机的ip

获取一个组ID为root的shell终端。


漏洞代码分析:

官方给出的漏洞补丁可以看出


漏洞出现在source3/rpc_server/srv_pipe.c 的475行中也就是发生在is_known_pipename函数中对传进来的管道名称进行了过滤的处理,如果管道名称中含有了“/”的字符进行了过滤,其实更严格的话应该是判断首个字符串是不是‘/’来判断是否需要过滤,后续会有介绍,那么根据补丁来进行分析肯定管道名称带有'/'会触发漏洞,所以跟进代码看一下

再跟:

继续:


以samba-4.5.9.tar.gz源码为例分析:

可以看出参数pipename参数传递过来就是module_name,如果首字符是'/'的话也就是管道的名称的首字符是'/'也就是传过来的是绝对路径的时候,就会跳到load_module函数中,在跟进去就是会加载上传上来的so,而且导出函数

会以SAMBA_INIT_MODULE的函数名进行导出,然后进行执行导出函数,在代码中搜一下可以

#define SAMBA_INIT_MODULE "samba_init_module"

所以上传的so必须要是以samba_init_module函数名导出才可以加载,(但是后续分析ruby exp上传的so在dlopen的时候就会结束,但是会得到反弹shell不知道为什么)

动态gdb跟踪调试:

下载 samba-4.5.9.tar.gz    链接:https://download.samba.org/pub/samba/stable/samba-4.5.9.tar.gz

./configure ... --enable-debug

make

安装好对应的依赖,进行编译,因为本机的smbd服务正在运行,要首先stop系统对应的smbd的服务,然后在调试debug的smbd进程

关掉本机的smbd服务

然后进行调试debug版的smbd程序,在源码目录中的bin中smbd,以交互模式和设置配置文件路径进行启动
已经知道是在srv_pipe.c:is_known_pipename函数中,下断点,攻击机这时候发起攻击,因为为了调试所以直接就指定靶机的共享目录  /tmp

在exp  set SMB_SHARE_BASE /tmp

靶机这gdb 跟进:


然后跟进函数中:


打印module名称就是从攻击机上上传上来的恶意的so的名称,然后进入到load_module函数中:

然后通过do_smb_load_module->load_module函数中,最后在load_module中加载so,并且导出函数并且执行下图为加载上传的so文件:

然后加载执行,但是这个恶意的so中无论是gdb调试还是正常的运行中都会在dlopen之后退出,然后回弹一个远程shell,不再执行导出函数和执行函数的步骤,这块还不懂怎么回事,希望厉害的人可以解答一下,so就在附件中。


临时解决方案:

在samba的配置文件global节点中添加nt pipe support = 0,即关闭pipe支持(依赖pipe的功能受影响),然后重启服务。


参考链接:

http://www.secist.com/archives/3666.html

http://www.4hou.com/technology/4983.html

http://bobao.360.cn/learning/detail/3900.html

http://bobao.360.cn/news/detail/4180.html

https://github.com/omri9741/cve-2017-7494

https://wiki.samba.org/index.php/Build_Samba_from_Source

https://github.com/samba-team/samba/commit/04a3ba4dbcc4be0ffc706ccc0b586d151d360015




[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞2
打赏
分享
最新回复 (8)
雪    币: 33
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
XiaoHuaMe 2017-6-2 15:01
2
0
还没写完呢,手滑了,在编辑一下
雪    币: 32401
活跃值: (18875)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2017-6-2 15:02
3
0
XiaoHuaMe 还没写完呢,手滑了,在编辑一下
辛苦,标题别忘了
雪    币: 33
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
XiaoHuaMe 2017-6-2 15:15
4
0
嗯嗯,好的
雪    币: 33
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
XiaoHuaMe 2017-6-2 16:00
5
0
kanxue 辛苦,标题别忘了
嗯嗯,好的。第一次发帖,不太会用。
雪    币: 62
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
toToC 2017-11-23 01:29
6
0
学习了,漏洞触发容易理解,写poc还需要费点劲,很有收获,感谢
雪    币: 229
活跃值: (79)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
daowang 1 2018-5-5 10:06
7
0
复现不了
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
e霜 2018-7-5 00:20
8
0
请问4.1.6内核的Ubuntu在哪下载
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
e霜 2018-7-7 10:48
9
0
想问一下,恶意文件.so到底怎么运行,还有明明已经创建了共享文件夹但是还是不可以复现,这是怎么回事
游客
登录 | 注册 方可回帖
返回