Week 2 周末闯关:三小时走完一次完整侦察流程,从 ping 到报告
网络安全实战 90 天 · Week 2 侦察 · 难度 ★★★ 进阶 | 关键词:渗透测试流程 信息收集 Nmap 漏洞验证 侦察报告 实战演练
学完 Google Hacking、WHOIS/DNS、Nmap 主机发现、Nmap 端口扫描、漏洞初判、报告撰写六个模块,最大的问题是「单个都会,串起来就乱」。这篇是一次三小时的完整闯关:给一个只知道 IP 的目标,从 ping 开始,一路做到交出报告。五个阶段,每一步都有明确的产出物。
一、闯关设定
任务:在不知道目标任何信息的前提下,完成一次完整的侦察,并交付一份报告。
| 项目 | 内容 |
|---|---|
| 已知条件 | 只有一个 IP:192.168.159.137 |
| 目标 | 摸清开放端口、服务版本、已知漏洞,产出侦察报告 |
| 时间 | 3 小时 |
| 环境 | Kali Linux (192.168.159.128) / Metasploitable2 (192.168.159.137) / VMware Host-Only |
| 交付物 | 一份七段式侦察报告 + 全部原始扫描输出 |
五个阶段依次是:连通性确认 → 网段存活主机 → 端口与服务 → 漏洞初判 → 报告撰写。前四个阶段是技术动作,第五个阶段是交付。
说明 本文所有操作在隔离的 VMware Host-Only 网络内完成,目标为自建 Metasploitable2 教学靶机,未涉及任何真实业务系统或公网资产。
二、阶段 1:连通性确认
拿到一个 IP,第一个动作永远是确认它活着、并且我能到得了。跳过这一步,后面所有扫描失败都无从判断是「目标没开」还是「网络不通」。
确认本机网络与目标可达
bash
ip addr
ping -c 4 192.168.159.137

ping 通了,延迟 0.5ms 左右------这个数字说明是同一局域网内,没有跨路由。同时 ip addr 确认本机在 192.168.159.0/24 网段,和目标同网段。
如果 ping 不通,先别急着换目标,按这个顺序排查:本机 IP 对不对 → 两台机器网络模式是否一致(Host-Only vs NAT 是常见坑)→ 目标防火墙是否禁 ping。
阶段产出:确认目标可达,本机与目标同网段。
三、阶段 2:网段存活主机
知道一台机器活着,但不知道这个网段里还有没有别的。这一步是把视野从「一个点」扩到「一张网」。
网段存活主机发现
bash
sudo nmap -sn 192.168.159.0/24

扫出 4 台存活:.1 是网关、.2 是 DHCP 服务、.128 是本机 Kali、.137 是靶机。
这一步的价值不在于「找到 4 台」,而在于建立网络拓扑认知:.1 和 .2 是 VMware 虚拟网络自带的服务,.128 是我自己,真正的目标只有 .137。如果没有这一步,后面扫到 .1 上的服务可能会误判为「目标还开了别的端口」。
阶段产出:存活主机清单,明确唯一目标是 .137。
四、阶段 3:端口与服务
这是耗时最长、信息量最大的阶段。用三步走的策略,从快到慢:
4.1 第一步:默认端口快速摸底
默认 1000 端口
bash
nmap -T4 192.168.159.137

几秒钟出结果,看到 21/22/23/25/80/139/445/3306 等常规端口。这一步的目的是判断「值不值得深挖」------如果只开了 22 和 80,那就是一台普通服务器;如果开了 21、23、139、445 这些老古董协议,基本可以确定是台旧系统,漏洞不会少。
4.2 第二步:全端口扫描找隐藏服务
65535 全端口扫描
bash
sudo nmap -sS -p- -T4 -oN ports.txt 192.168.159.137

全端口扫完,比默认扫描多出来三个:8180(Tomcat)、6667(IRC)、2121(ProFTPD)。这三个在默认的 1000 端口里都没有,只有全扫才能发现。
8180 上的 Tomcat 是个典型例子------很多管理员会把 Tomcat 的默认 8080 改成 8180「图个安全」,但只要端口开着,全扫一样能发现。2121 的 ProFTPD 同理,把 FTP 从 21 挪到 2121 只是换了个门牌号。
4.3 第三步:重点端口版本识别
重点端口版本 + 默认脚本
bash
sudo nmap -sV -sC -p 21,22,23,25,80,139,445,3306,8180,6667,2121 -oN services.txt 192.168.159.137

对重点端口做 -sV 版本识别加 -sC 默认脚本。拿到 12 个服务的精确版本:vsftpd 2.3.4、OpenSSH 4.7p1、Apache 2.2.8、Samba 3.0.20、MySQL 5.0.51a、ProFTPD 1.3.1、Tomcat 等。
阶段产出:24 个端口记录、12 个服务版本。
五、阶段 4:漏洞初判
有版本号之后,判断哪些有已知漏洞。两个动作并行:NSE 脚本做主动验证,searchsploit 找现成 EXP。
漏洞验证与 EXP 检索
text
sudo nmap --script vuln -p 21,22,23,25,80,139,445,3306 -oN vulns.txt 192.168.159.137
searchsploit vsftpd 2.3.4
searchsploit samba 3.0
searchsploit apache 2.2

整理出 8 条漏洞,其中 5 条严重:
| # | 服务/端口 | 漏洞 | CVE | CVSS | 等级 |
|---|---|---|---|---|---|
| 1 | vsftpd 2.3.4 / 21 | 源码植入后门,可获 root | CVE-2011-2523 | 9.8 | 严重 |
| 2 | Samba 3.0.20 / 139,445 | usermap_script 远程命令执行 | CVE-2007-2447 | 9.3 | 严重 |
| 3 | bindshell / 1524 | 直接暴露 root shell | --- | 9.0 | 严重 |
| 4 | MySQL 5.0.51a / 3306 | root 空口令 | --- | 8.5 | 严重 |
| 5 | ProFTPD 1.3.1 / 2121 | 源码后门 | CVE-2010-4221 | 7.5 | 高 |
| 6 | Tomcat / 8180 | 默认管理凭据 | --- | 7.5 | 高 |
| 7 | UnrealIRCd / 6667 | 后门命令执行 | CVE-2010-2075 | 7.5 | 高 |
| 8 | OpenSSH 4.7p1 / 22 | 算法过时,无重大 RCE | --- | 4.3 | 中 |
阶段产出:8 条漏洞记录,5 条严重。
六、阶段 5:报告撰写
把前四个阶段的产出组织成七段式报告。这一阶段不需要新的技术动作,只需要把已有的东西写清楚。
归档并开始撰写
text
mkdir -p recon/{target,scan,vuln}
mv ports.txt services.txt vulns.txt recon/scan/
vim report.md
最终报告 6 页,包含:24 个端口记录、12 个服务版本、8 条漏洞、3 条攻击路径。

三条攻击路径按优先级排:
| 优先级 | 入口 | 手段 | 预期结果 |
|---|---|---|---|
| 1 | 21/tcp vsftpd 2.3.4 | CVE-2011-2523 后门触发 | 直接 root shell |
| 2 | 139/445 Samba 3.0.20 | usermap_script (CVE-2007-2447) | root 权限命令执行 |
| 3 | 80/tcp Web 应用 | 手工测试注入/上传/遍历 | web 用户权限 |
阶段产出:一份 6 页侦察报告,全部结论带证据。
七、踩坑记录
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 全端口扫描跑了 20 分钟 | 没加 -T4 | 加 -T4;或先扫重点端口再全扫 |
| 漏掉了 8180/6667/2121 | 只跑了默认 1000 端口 | 确认目标值得深挖后必须 -p- 全扫 |
| 信息点统计口径不一 | 一会儿算端口一会儿算服务 | 统一口径:端口数、服务数、漏洞数分开记 |
| 报告写了两天 | 边写边补扫描 | 先跑完所有扫描再写,报告阶段不产生新数据 |
| 三个小时不够用 | 阶段之间没有时间预算 | 每阶段预设时限,超时就先记录后补 |
坑 1:全端口扫描跑了 20 分钟
第一次跑 sudo nmap -sS -p- 192.168.159.137,忘了加 -T4。65535 个端口按默认时序跑,20 分钟才出结果,整个闯关节奏被打乱。
加 -T4 之后同样的扫描 2 分钟完成。局域网环境下 -T4 完全安全,不会造成丢包或误判。
更稳的做法是分两步:先 nmap -T4 扫默认端口(几秒),确认是台有货的机器,再上 -p- 全扫。别一上来就全端口。
坑 2:漏掉了三个非标准端口
第一版只跑了默认扫描,报告里写「开放 8 个端口」。后来跑全端口才发现还有 8180、6667、2121,实际是 24 个。
这个漏报很致命------8180 的 Tomcat 和 6667 的 UnrealIRCd 都是高危入口,漏了就等于漏了两条攻击路径。
教训:默认扫描只是「快速摸底」,不是「完整结论」。只要目标是值得深挖的(比如这台明显是老系统),就必须跑 -p-。
坑 3:信息点统计口径不一致
报告里一会儿写「24 个信息点」,一会儿写「8 条漏洞」,一会儿又写「12 个服务」,自己都搞不清这些数字之间的关系。
原因是三个概念混在一起:端口数(24)、服务数(12,多个端口可能是一个服务,比如 139 和 445 都是 Samba)、漏洞数(8)。
改法:报告里明确区分三个口径,不要笼统说「信息点」。端口、服务、漏洞三个数字各自独立统计。
八、Week 2 总结
一周六个模块串起来,最重要的一句话是:渗透测试 80% 是信息收集,20% 才是攻击。
这周的所有工作都在那 80% 里------Google 搜、WHOIS 查、DNS 枚举、Nmap 扫、CVE 比对、报告撰写。没有一步是「攻击」,但每一步都在为攻击做准备。
8.1 掌握程度自评
| 模块 | 内容 | 掌握程度 |
|---|---|---|
| Day008 | Google Hacking 语法与 GHDB | 熟练 |
| Day009 | WHOIS 与 DNS 信息收集 | 熟练 |
| Day010 | Nmap 主机发现 | 熟练 |
| Day011 | Nmap 端口扫描与服务识别 | 熟练 |
| Day012 | 漏洞初判与 CVE 查询 | 良好 |
| Day013 | 侦察报告撰写 | 良好 |
| Day014 | 完整流程串联 | 优秀 |
8.2 三条结论
-
信息收集的价值不在「收集」,在「指向下一步」。扫出一堆端口没有意义,知道哪个端口通向 root 才有意义。
-
有漏洞不等于能利用。OpenSSH 4.7p1 的加密算法过时严格来说不算漏洞,但在实战中会限制横向手段------这种「不是漏洞但影响攻击」的信息同样要写进报告。
-
本周所有操作都是被动查询或低交互探测。真正的攻击动作一次都没做,但已经能画出完整的攻击路径。这就是侦察阶段的意义。
九、Week 2 命令速查
| 阶段 | 命令 | 作用 |
|---|---|---|
| 连通性 | ping -c 4 目标 | 确认目标可达 |
| 网络 | ip addr | 查看本机 IP 和网段 |
| 主机发现 | sudo nmap -sn 网段/24 | 扫网段存活主机 |
| 主机发现 | sudo arp-scan -l | ARP 层扫描(更准) |
| 端口 | nmap -T4 目标 | 默认 1000 端口快速摸底 |
| 端口 | sudo nmap -sS -p- -T4 目标 | 全端口 SYN 扫描 |
| 服务 | sudo nmap -sV -sC -p 端口 目标 | 版本识别 + 默认脚本 |
| 系统 | sudo nmap -O 目标 | 操作系统指纹 |
| 漏洞 | nmap --script vuln -p 端口 目标 | NSE 漏洞检测 |
| 漏洞 | searchsploit 关键词 | 检索 Exploit-DB |
| 报告 | pandoc report.md -o report.pdf | Markdown 转 PDF |
Week 2 到此结束。下一篇进入 Week 3:从「知道有漏洞」到「验证漏洞可利用」,开始接触实际的漏洞利用技术。