跳至内容

信息收集与 Nmap

信息收集(侦察)是渗透测试中最耗时也最关键的一步——你对目标了解得越多,后面利用的成功率越高。这篇先讲被动与主动收集的区别,再用大量篇幅讲透 Nmap:主机发现、端口扫描技术、服务与版本识别、操作系统探测和 NSE 脚本引擎。

主动扫描(尤其是全端口、版本探测、NSE 漏洞脚本)会在目标日志中留下明显痕迹,只能对授权目标或自建靶场执行scanme.nmap.org 是 Nmap 官方提供的合法测试目标。

被动收集 vs 主动收集

  • 被动收集:不直接接触目标,从第三方获取信息。不触发目标告警,应优先做。
    • whois 域名注册信息、DNS 记录、子域名枚举。
    • 网络空间搜索引擎:Shodan、FOFA、ZoomEye(见《Web 安全基础与工具》)。
    • Google Hacking、证书透明度日志(crt.sh)、GitHub 泄露。
  • 主动收集:直接向目标发包,信息更准确但有痕迹。
    • 端口扫描、服务识别、目录爆破、漏洞扫描。

Nmap 扫描技术

Nmap(Network Mapper)是端口扫描的事实标准。它的工作分两个逻辑阶段:先主机发现(哪些主机存活),再对存活主机做端口扫描

主机发现

# 仅做主机发现(Ping 扫描),不扫端口,快速摸清网段存活主机
nmap -sn 192.168.1.0/24

# 跳过主机发现,直接扫端口(目标禁 Ping 时用)
nmap -Pn 192.168.1.10

主机发现可组合多种探针提高准确率:-PE(ICMP echo)、-PP(ICMP 时间戳)、-PS80,443(TCP SYN 到指定端口)、-PA3389(TCP ACK)、-PU40125(UDP)。

常用端口扫描类型

参数名称说明
-sSTCP SYN 扫描半开扫描,不完成三次握手,快且相对隐蔽(默认,需 root)
-sTTCP Connect 扫描完成完整握手,无 root 权限时的回退方式,痕迹明显
-sUUDP 扫描扫描 UDP 服务(DNS、SNMP 等),慢但不可少
-sATCP ACK 扫描用于探测防火墙规则、识别端口是否被过滤
-sN/-sF/-sXNull/FIN/Xmas隐蔽扫描,利用 RFC 行为差异绕过部分防火墙

端口范围与速度控制

# 扫描全部 65535 个端口
nmap -p- 192.168.1.10

# 指定端口/范围
nmap -p 22,80,443,8000-8100 192.168.1.10

# 只扫最常见的 100 个端口(快速)
nmap -F 192.168.1.10

# 时间模板 T0(最慢/最隐蔽) ~ T5(最快/最吵),常用 T4
nmap -T4 192.168.1.10

服务版本与操作系统识别

# -sV 服务版本探测:识别端口背后运行的具体软件与版本
nmap -sV 192.168.1.10

# -O 操作系统探测
nmap -O 192.168.1.10

# -A 一把梭:等价于 -O -sV -sC --traceroute,信息最全但最吵
nmap -A -T4 scanme.nmap.org

-sV 输出的版本号是后续匹配 CVE、选择 Metasploit 模块的关键依据。下面是 -A 扫描的典型输出(节选自官方 scanme.nmap.org):

PORT     STATE    SERVICE     VERSION
22/tcp   open     ssh         OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
80/tcp   open     http        Apache httpd 2.2.14 ((Ubuntu))
9929/tcp open     nping-echo  Nping echo
Running: Linux 2.6.X
OS details: Linux 2.6.39

一条完整的侦察命令

把上面的技巧组合起来,对一个网段做深度侦察并保存所有格式的结果:

nmap -sS -p- -A -T4 -oA fullscan 192.168.1.0/24
  • -oA fullscan 同时输出三种格式:.nmap(可读)、.gnmap(可 grep)、.xml(可导入其它工具,如 Metasploit db_import)。

NSE:Nmap 脚本引擎

NSE(Nmap Scripting Engine)用 Lua 脚本扩展 Nmap,能做漏洞检测、暴力破解、信息抓取等。脚本按用途分类(authvulnbrutediscoverysafe 等)。

# 运行默认脚本集(等价于 -A 中的 -sC),安全且信息量大
nmap -sC 192.168.1.10

# 调用 vuln 类脚本检测已知漏洞
nmap --script vuln 192.168.1.10

# 指定单个脚本,例如检测 SMB 的 MS17-010(永恒之蓝)
nmap -p445 --script smb-vuln-ms17-010 192.168.1.10

# 给脚本传参
nmap --script http-title --script-args http.useragent="Mozilla/5.0" 192.168.1.10
脚本库在 /usr/share/nmap/scripts/。用 nmap --script-help <脚本名> 查看某脚本的用途和参数;vulnbruteexploit 类脚本具有攻击性,务必在授权范围内使用。

防御视角

了解扫描原理是为了更好地发现和阻断它:

  • 端口最小暴露:只开放业务必需端口,用防火墙/安全组收口。
  • IDS/IPS 检测:SYN 扫描、全端口扫描、NSE vuln 脚本都有明显特征,Suricata/Snort 规则可告警。
  • 限速与封禁:对短时间内大量连接的源 IP 触发 fail2ban / 速率限制。
  • 隐藏版本信息:去掉中间件 Banner 中的版本号,增加攻击者匹配 CVE 的成本(属于纵深防御的一环,不能替代打补丁)。
最后更新于