# 网络枚举与 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 端口总数

# 问题二

  • 要求:枚举目标主机名
  • 提交内容:目标主机名(区分大小写)