前言
Samba远程漏洞(CVE-2017-7494) 被称为Linux 版的永恒之蓝,由于其影响范围广以及攻击成功后获得的权限高(一般默认smb服务以root权限运行)受到了广泛的关注,趁空余时间写一下这个漏洞的复现以及利用分析
漏洞成因
Linux Samba 协议实现代码中,处于source3/rpc_server/srv_pipe.c中的is_known_pipename()函数对路径过滤不严格导致攻击者可以上传恶意可执行文件然后构造对应的payload调用恶意文件导致远程代码执行。
以下Samba版本受到影响:3.5.0- 4.6.4
3.5.0- 4.5.10
3.5.0- 4.4.14
漏洞成因:
处于\source3\rpc_server\src_pipe.c的is_known_pipename()函数未对传进来的管道名pipename的路径分隔符/进行识别过滤,导致可以用绝对路径调用恶意的so文件,从而远程任意代码执行。
首先看到is_known_pipename()函数
跟进到smb_probe_module()
再跟进到do_smb_load_module(),发现调用的过程就在其中,调用了传进来的moudule_name对应的init_samba_module函数
我们可以通过smb服务上传一个恶意的so文件,该文件包含一个输出函数init_samba_module,随后通过上述过程进行调用,执行任意代码。
漏洞复现