# 网络枚举与 Nmap
# 枚举
# 枚举的重要性
- 枚举是整个渗透测试过程中最关键的部分。
- 其目标不是立即获取目标系统的访问权限,而是识别所有可能的攻击途径。
- 枚举依赖于对服务的理解和与之交互的能力,而不仅仅是工具的使用。
# 枚举的核心要点
- 工具只是辅助,关键在于如何理解和利用工具返回的信息。
- 必须了解服务的工作原理及通信语法以实现有效交互。
- 枚举的目标是收集尽可能多的信息,为后续攻击提供方向。
# 枚举过程中的关键理解
# 攻击信息的两个核心来源:
- 提供与目标系统交互能力,或额外信息的功能 / 资源。
- 可用于进一步访问目标的更关键信息。
# 常见问题与误解:
- 许多人误以为尝试所有工具就能获得所需信息。
- 实际上,更多时候是因为不了解服务的交互方式和关键点导致进展停滞。
# 手动枚举的重要性:
- 自动化工具虽能加速过程,但无法替代手动深入分析。
- 举例:扫描工具可能因超时将端口标记为关闭,从而错过潜在入口点。
# 安全配置错误与风险
- 大量信息泄露源于服务的安全配置错误或疏忽。
- 错误的安全观念(如仅依赖防火墙、组策略对象 GPO 等)可能导致网络暴露。
# Nmap 简介
- Nmap(Network Mapper)是一款开源的网络分析与安全审计工具
- 使用 C、C++、Python 和 Lua 编写
- 利用原始数据包扫描网络,识别可用主机、服务及其版本
- 可识别操作系统类型及版本
- 支持检测防火墙、IDS/IPS 配置情况
# 使用场景
- 网络安全审计
- 模拟渗透测试
- 防火墙与入侵检测系统配置检查
- 网络拓扑映射
- 端口开放状态分析
- 漏洞评估
# Nmap 架构
# 扫描技术分类
- 主机发现
- 端口扫描
- 服务枚举与识别
- 操作系统检测
- 脚本化交互(Nmap Scripting Engine)
# Nmap 语法
- 基本命令格式:
nmap <扫描类型> <选项> <目标>
- 示例:
sudo nmap -sS localhost
# 扫描技术
# TCP-SYN 扫描 (-sS)
- 默认扫描方式之一
- 发送 SYN 标志位,不完成三次握手
- 快速扫描数千端口 / 秒
- 回应类型判断端口状态:
- SYN-ACK:端口开放
- RST:端口关闭
- 无回应:端口被过滤
# 其他常见扫描类型
-sT
:TCP 连接扫描-sA
:TCP ACK 扫描-sW
:TCP 窗口扫描-sM
:Maimon 扫描-sU
:UDP 扫描-sN/sF/sX
:空扫描、FIN 扫描、圣诞树扫描--scanflags
:自定义 TCP 标志位-sI
:空闲扫描(使用僵尸主机)-sY/sZ
:SCTP INIT/COOKIE-ECHO 扫描-sO
:IP 协议扫描-b
:FTP 反弹扫描
# 实例输出解析
- 扫描结果显示如下信息:
- 主机是否在线
- 端口状态(open/closed/filtered)
- 对应服务名称(如 ssh、http、postgresql 等)
# 主机发现
# 扫描网络范围
# 扫描选项
- 目标网络范围:
10.129.2.0/24
- 禁用端口扫描:
-sn
- 存储结果到所有格式,文件名以 'tnet' 开头:
-oA tnet
# 说明
- 此方法依赖于目标主机是否响应 ICMP Echo 请求,若防火墙阻止则需其他技术。
- 建议保存每次扫描结果用于后续对比和报告。
# 扫描 IP 列表
# 扫描命令
sudo nmap -sn -oA tnet -iL hosts.lst
# 扫描选项
- 禁用端口扫描:
-sn
- 存储结果:
-oA tnet
- 从提供的列表文件中读取目标:
-iL
# 说明
- Nmap 仅检测到 7 个 IP 中的 3 个活跃主机,其余可能因防火墙配置未响应 ICMP 请求。
# 扫描多个 IP
# 扫描命令
sudo nmap -sn -oA tnet 10.129.2.18 10.129.2.19 10.129.2.20
- 或使用范围表示法:
sudo nmap -sn -oA tnet 10.129.2.18-20
# 说明
- 可灵活指定多个 IP 地址或连续范围进行扫描。
# 扫描单个 IP
# 扫描命令
sudo nmap 10.129.2.18 -sn -oA host
# 扫描选项
- 指定目标 IP:
10.129.2.18
- 禁用端口扫描:
-sn
- 存储结果:
-oA host
# 进阶操作
- 强制使用 ICMP Echo 请求扫描:
-PE
- 显示数据包发送与接收情况:
--packet-trace
- 显示扫描结果原因:
--reason
- 禁用 ARP Ping:
--disable-arp-ping
# 示例输出
- 主机存活信息通过 ARP 响应或 ICMP Echo 回复获取。
- 可通过不同参数组合验证主机状态及网络行为。
# 主机发现策略
# 补充说明
- ICMP Echo 请求不仅能判断主机是否存活,还可辅助识别操作系统类型(如 TTL 值)。
- 更多主机发现策略详见 Nmap 官方文档。
# 主机与端口扫描
# 端口状态
# 描述
- open:成功建立连接(TCP/UDP/SCTP)
- closed:收到 RST 标志,表示端口关闭
- filtered:无响应或收到错误码,可能被防火墙过滤
- unfiltered:仅在 TCP-ACK 扫描中出现,可访问但无法判断开 / 闭
- open|filtered:无响应,可能被防火墙保护
- closed|filtered:仅在 IP ID 空闲扫描中出现,无法判断关闭或过滤
# TCP 端口扫描方法
# 默认行为
- 默认扫描前 1000 个 TCP 端口(使用 SYN 扫描
-sS
) - 非 root 用户默认使用 TCP Connect 扫描(
-sT
)
# 指定端口方式
# 扫描选项
- 单个端口:
-p 22,25,80
- 范围:
-p 22-445
- 前 N 个端口:
--top-ports=10
- 所有端口:
-p-
- 快速扫描(前 100):
-F
# SYN 扫描分析示例
# 发送请求(SENT)
- 源地址
10.10.14.2:63090
向目标10.129.2.28:21
发送 SYN 包 - 包含 SYN 标志及 TCP 头部参数(如 MSS、TTL 等)
# 接收响应(RCVD)
- 目标返回包含 RA 标志的 TCP 包,表示 RST 和 ACK
- 表明端口关闭并结束连接
# TCP Connect 扫描(-sT)
# 工作原理
- 完整三次握手(SYN → SYN-ACK → ACK)
- 收到 SYN-ACK → 开放;收到 RST → 关闭
# 特点
# 优点
- 准确性高:完全建立连接,精确判断状态
- 对服务友好:行为类似正常客户端,更 “礼貌”
# 缺点
- 不够隐蔽:易被 IDS/IPS 记录
- 速度慢:需等待每个响应
# 应用场景
- 需要准确映射网络时使用
- 当防火墙允许出站流量时有效
# 过滤端口(Filtered Ports)
# 原因
- 防火墙丢弃数据包(无响应)
- 防火墙拒绝数据包(返回 ICMP 不可达)
# 实例分析
# 端口 139(过滤)
- Nmap 发送多个 SYN 包未收到响应
- 扫描耗时较长(约 2 秒),判定为过滤中
# 端口 445(过滤)
- 收到 ICMP type=3/code=3 → 端口不可达
- 表明防火墙主动拒绝该端口
# UDP 扫描(-sU)
# 特点
- 无连接协议,无法依赖 ACK 确认
- 默认超时时间长,扫描速度慢
- 结果状态:
- open:有响应
- closed:收到 ICMP 不可达
- open|filtered:无响应,无法确定
# 实例分析
# 端口 137(开放)
- 收到 UDP 响应 → 确认为开放
# 端口 100(关闭)
- 收到 ICMP type=3/code=3 → 确认为关闭
# 端口 138(开放 | 过滤)
- 无响应 → 判定为 open|filtered
# 版本扫描(-sV)
# 功能
- 获取服务版本、名称及详细信息
- 建立真实连接以获取 Banner 或响应特征
# 实例分析
# 端口 445(SMB)
- 检测到运行 Samba smbd 3.X - 4.X
- 工作组为 WORKGROUP,主机为 Ubuntu
# 常用扫描命令汇总
# 常用选项
-p [port]
:指定单个或多个端口--packet-trace
:显示所有发送和接收的数据包-n
:禁用 DNS 解析--disable-arp-ping
:禁用 ARP 探测-Pn
:禁用 ICMP 存活检测--reason
:显示端口状态原因-sU
:UDP 扫描-sT
:TCP Connect 扫描-sV
:服务版本检测
# 实战练习
# 问题一
- 要求:找出目标上所有 TCP 端口
- 提交内容:找到的 TCP 端口总数
# 问题二
- 要求:枚举目标主机名
- 提交内容:目标主机名(区分大小写)