← 返回首页

实验 02:自侦察

实验 02:自侦察

对应综合实践项目(capstone)里程碑 M2(自侦察) · 能力簇 ②「侦察与发现」· L2 / L3

1. 实验目标

⚠️ 红线:所有测试仅对自己的靶场、自己的应用、127.0.0.1 或明确授权的环境进行。禁止对任何真实/第三方系统做未授权探测。本实验同时是「防御自查」训练。

2. 环境准备

2.1 跑起你的 Flask 靶场

实验的目标 = 对 capstone/seed/app.py 做侦察。先把它跑起来:

cd capstone/seed
pip install -r requirements.txt     # Flask 等
python app.py                        # 监听 127.0.0.1:5000

也可以用你自己派生后的靶场应用(M0/M1 的产物)替代 seed/app.py——若如此,请在报告中说明并确保它跑在本机 127.0.0.1

2.2 确认工具就绪

nmap --version            # 主力扫描器(Kali 自带)
which tshark wireshark    # 监听(可选,Kali 自带)
python3 --version         # 解析脚本

2.3 冒烟验证

curl -s http://127.0.0.1:5000/orders      # 应返回 401(未登录),证明服务在
nmap -sn 127.0.0.1                         # 主机发现:应报告 Host is up

3. 任务清单

任务 A:端口与服务测绘(nmap)

127.0.0.1 完成一次完整扫描,并记录每条命令与关键输出:

  1. 主机发现nmap -sn 127.0.0.1,确认靶场主机存活。
  2. TCP SYN 扫描(全端口)sudo nmap -sS -p- 127.0.0.1,记录 5000 端口状态。
  3. 服务/版本探测nmap -sV -p 5000 127.0.0.1,识别 Werkzeug/Flask/Python 版本。
  4. OS 指纹(可选,本机自扫可能不准)sudo nmap -O 127.0.0.1,记录 nmap 对 OS 的猜测,并解释为什么对 127.0.0.1 自扫 OS 指纹意义有限
  5. 结构化输出:至少用一次 -oX(XML)或 -oG为任务 C 的脚本解析做准备

解读要求:在报告中说明 SYN 与 Connect 扫描的区别、为什么 -sS 更隐蔽、UDP 扫描为何慢。

任务 B:Web / 应用指纹

在端口之上,识别应用层指纹(这部分是 U3 漏洞利用的「弹药」):

  1. HTTP 响应头curl -sv http://127.0.0.1:5000/ 2>&1 | grep -iE 'server|x-powered|content-type',记录 ServerContent-Type
  2. http-title / 脚本探测nmap -sV -sC -p 5000 127.0.0.1,记录 http-server-headerhttp-title 等。
  3. (可选) 监听佐证:用 tshark/Wireshark 抓一次登录(POST /login),观察是否明文传输凭证、是否能看到 /orders 的 SQL——作为「监听能暴露什么」的证据。
  4. 版本→漏洞:基于 -sV 得到的 Werkzeug/Flask 版本,查一个已知 CVE(仅查询、不在本实验利用),说明「指纹 → 可利用性」的关联。

仅查询公开 CVE 信息做风险评估;本实验不包含任何漏洞利用(漏洞利用在 U3/M3)。

任务 C:可复用侦察脚本(L3 核心)

编写一个可复用的侦察脚本(bash 或 python 均可),满足:

  1. 参数化目标recon.sh <target>,默认 127.0.0.1,输出带时间戳的目录。
  2. 流水线:主机发现 → 全端口 SYN 扫描 → 服务版本探测 → 结构化输出(XML/grep/JSON)。
  3. 可复用:能对任意授权目标重复执行;不写死单一目标的逻辑。
  4. 结果解析:用脚本把 nmap 的 XML 解析为结构化暴露面清单(至少含 host / port / state / service / product / version 字段)。

参考最小实现(本单元课件已给 bash 与 python 解析骨架,可直接扩展):

#!/usr/bin/env bash
# recon.sh <target> —— 仅对授权环境使用
set -euo pipefail
TARGET="${1:-127.0.0.1}"
DIR="recon-${TARGET}-$(date +%Y%m%d-%H%M)"
mkdir -p "$DIR"
nmap -sn "$TARGET" | tee "$DIR/01-host.txt"
sudo nmap -sS -sV -p- "$TARGET" -oA "$DIR/02-full" | tee "$DIR/02-full.txt"
python3 parse_nmap.py "$DIR/02-full.xml" > "$DIR/03-surfaces.json"
echo "输出目录: $DIR"

python 解析器见 slides「进阶:用 Python 解析 XML」一页;亦可 pip install python-nmap

任务 D:暴露面清单与风险标注

基于任务 C 的结构化输出,产出一份暴露面清单(Markdown 表格)并对每条做风险标注:

host port state service product/version 风险等级 处置建议
127.0.0.1 5000 open http Werkzeug x.y (Flask) 中/高 升级至无 CVE 版本;生产环境禁用 debug;最小暴露

要求:

  1. 清单完整:覆盖所有 open 端口,不漏。
  2. 风险标注:每条给出「风险等级(高/中/低)」+ 理由(过时版本/明文传输/过度暴露/不必要端口)。
  3. 处置建议:给出可执行的加固建议(关闭端口、升级、隐藏指纹、加 TLS 等)——为 M4 加固预热
  4. 治理视角:用 1 段说明「如何把这个脚本接进 CI / 每次部署后自动跑」。

AI 助教适配注意事项

本里程碑由 AI 助教(ns4ai-review)按 §4 量规评审(确定性证据 + LLM 档位裁定)。提交时注意:

4. 交付与量规

提交 lab02/report.md(含以下小节):

  1. 环境:靶场地址、是否用 seed/app.py 还是自有应用。
  2. 任务 A:nmap 命令流 + 关键输出 + 原理解读(SYN/Connect/UDP 区别)。
  3. 任务 B:HTTP 指纹表 + (可选)监听证据 + 一个版本对应的公开 CVE(仅查询)。
  4. 任务 Crecon.sh / parse_nmap.py 源码 + 一次运行的输出目录清单。
  5. 任务 D:暴露面清单(Markdown 表)+ 风险标注 + 处置建议 + 治理说明。
  6. 操作录屏:asciinema 录屏转存 lab02/lab02.cast(便于智能批改)。
  7. 问题复盘:至少 1 个遇到的问题及解决方法。

评分量规(绑定簇 ② · L2 / L3)

维度 权重 优秀 [90,100] 合格 [60,90) 不合格 [0,60)
完成度 0.25 暴露面清单完整 + 风险标注 + 处置建议 + 治理说明;全端口 + 版本 + OS 有清单;主要端口 + 版本 无清单或无风险标注;仅 nmap 127.0.0.1 贴默认输出
深度 0.30 L2 测绘解读到位;L3 脚本可复用、结构化、可入 CI 脚本能跑能解析;主要端口覆盖 手动硬编码、无结构化输出
AI 双向 0.05 用 AI 辅助解析结果或标注暴露面,并说明人工复核 仅常规工具
安全严谨 0.30 全程仅授权环境 + 明确声明;版本→CVE 风险关联 仅本机 触及第三方/未授权系统
自评 0.10 自评与作品一致 有自评 无自评

5. 能力自评

对照簇 ②「侦察与发现」,勾选本次 lab 点亮的级别:

提交时在报告中给出本自评勾选结果,并附一句「本次我点亮了哪些簇×级」。能力框架详见 capability-framework.md


⚠️ 再次强调:仅对自己的靶场 / 127.0.0.1 / 授权环境测试。对真实系统做未授权扫描属违规,本课程不支持、不教授此类行为。