网络安全实战第13期:侦察报告撰写

渗透测试侦察报告怎么写:七段式结构 + 证据链组织 + 攻击路径规划

网络安全实战 90 天 · Week 2 侦察 · 难度 ★★ 入门 | 关键词:侦察报告 渗透测试报告 七段式 证据链 攻击路径 Markdown

扫描做完了,漏洞也查清了,但如果你交出去的是一堆终端截图和零散命令,这份工作等于白做。侦察报告是渗透测试唯一可交付的产物------它决定了别人能不能复现你的发现、能不能据此做决策。这篇讲怎么把一周的零散信息组织成一份 3--5 页、每条结论都有证据的报告。

一、报告为什么重要

很多人把报告当成「走流程的文书工作」,把精力全放在扫描和利用上。这是本末倒置。

渗透测试的交付物不是「我打进去了」这句话,而是一份能让甲方安全团队独立复现、独立验证、独立修复的文档。如果你的报告里写「发现 vsftpd 后门」,但没有版本号、没有 NSE 输出、没有命令,那甲方既无法确认,也无法验证修复是否生效。

更现实的一点:报告里的每一条结论,未来都可能被追问「你怎么知道的」。证据链就是答案。

说明 本文所有数据来自对自建 Metasploitable2 靶机(192.168.159.137)的侦察,在隔离 Host-Only 网络内完成,不涉及任何真实业务系统。报告中出现的 IP、域名均为实验环境内部地址。

二、第一步:先把资料归档

写报告之前先整理文件。一周下来会产生十几份输出:主机列表、端口扫描、版本识别、NSE 结果、searchsploit 输出。散在 home 目录里根本找不到。

按类别归档

text 复制代码
mkdir -p recon/target recon/scan recon/vuln
mv hosts.txt full_scan.txt recon/scan/
mv vulns.txt recon/vuln/
ls -R recon/

三个目录的含义:target 放目标基本信息(IP、系统、开放服务概览),scan 放扫描原始输出,vuln 放漏洞验证结果。这个划分和后面报告的章节是对应的。

如果忘了某条命令是怎么跑的,用 history 找回来:

从历史记录找回命令

text 复制代码
history | grep nmap
history | grep searchsploit

整理完是 12 个文件。这个数量说明一件事:报告的每一节都应该有对应的原始文件支撑,写的时候直接引用,不靠回忆。

三、第二步:七段式结构

渗透测试报告有行业通用的结构,不需要自己发明。七段式足够覆盖一次侦察任务:

序号 章节 作用 篇幅占比
1 执行摘要 给管理层看:目标是什么、发现了什么、风险多大、建议怎么办 15%
2 目标信息 给技术团队看:目标 IP、系统、网络位置、测试时间窗 5%
3 信息收集 怎么找到目标的:域名、子域、资产范围 15%
4 端口和服务 扫出了什么:端口、服务、版本 20%
5 漏洞分析 每个漏洞:编号、影响、证据、严重程度 30%
6 攻击路径 如果真要打,按什么顺序、用什么手段 10%
7 附录 原始输出、完整命令清单、参考资料 5%

这个结构的关键在于「读者分层」。执行摘要给不懂技术的管理层,一句话说清风险;端口和漏洞章节给技术团队,要有可复现的细节。同一份报告服务两类读者,所以顺序不能乱------先结论后细节。

四、第三步:写骨架

用 Markdown 写,纯文本、版本可控、能直接转 PDF。先把七个标题和空表格搭出来,再往里填内容。

report.md 骨架

bash 复制代码
# 渗透测试侦察报告

## 一、执行摘要
## 二、目标信息
## 三、信息收集
## 四、端口和服务
## 五、漏洞分析
## 六、攻击路径
## 七、附录

为什么用 Markdown 而不是 Word?三个理由:纯文本可以用 git 管理版本;表格和代码块写起来快;pandoc 一条命令就能转 PDF 或 docx。

转成 PDF / Word

text 复制代码
pandoc report.md -o report.pdf
pandoc report.md -o report.docx

五、第四步:填正文

5.1 执行摘要:四要素

执行摘要只有一页,但它是唯一会被所有人读完的一页。四个要素缺一不可:

  • 目标:测的是谁,IP 或域名是什么。

  • 关键发现:最重要的 3--5 条,一句话一条,带 CVSS 分数。

  • 整体风险:严重 / 高 / 中 / 低,一句话给结论。

  • 建议:按优先级排的处置动作,第一条永远是最紧急的。

示例:

执行摘要示例

text 复制代码
**目标**:Metasploitable2 (192.168.159.137)

**关键发现**:
1. vsftpd 2.3.4 存在源码后门(CVE-2011-2523, CVSS 9.8),可直接获取 root 权限
2. Samba 3.0.20 存在远程命令执行(CVE-2007-2447, CVSS 9.3)
3. 1524 端口直接暴露 root shell,无需认证
4. MySQL 5.0.51a root 账号空口令

**整体风险**:严重。攻击者可在无凭据情况下获取系统最高权限。

**建议**:立即将靶机从网络中隔离;生产环境中同类服务应升级至最新稳定版。

5.2 端口和服务:表格化

不要贴终端截图。截图不能复制、不能搜索、不能 diff。用表格:

端口 协议 服务 版本 状态
21 tcp ftp vsftpd 2.3.4 open
22 tcp ssh OpenSSH 4.7p1 open
23 tcp telnet Linux telnetd open
80 tcp http Apache httpd 2.2.8 open
139/445 tcp smb Samba 3.0.20 open
3306 tcp mysql MySQL 5.0.51a open

版本号这一列是重点------后面的漏洞分析完全依赖它。如果扫描时版本是 unknown,要么补扫 --version-all,要么在报告里明确标注「未能识别,需人工确认」。

5.3 漏洞分析:一条一个证据块

每个漏洞独立成块,固定四段:漏洞描述 → 验证过程(命令 + 输出)→ 影响 → 修复建议。

漏洞条目模板

text 复制代码
### 5.1 vsftpd 2.3.4 源码后门

**CVE**:CVE-2011-2523 **CVSS**:9.8(严重)

**描述**:vsftpd 2.3.4 官方源码被植入后门,登录用户名含 ":)" 时
在 6200 端口启动 root shell。

**验证**:
nmap --script ftp-vsftpd-backdoor -p 21 192.168.159.137
→ VULNERABLE (CVE-2011-2523)

**影响**:未认证攻击者可直接获得 root 权限,完全控制系统。

**修复**:升级 vsftpd 至 3.0.0 以上;核查 6200 端口是否有异常监听。

注意「验证」这一段必须有命令和输出。只写「存在后门」是结论,不是证据。证据是「我跑了这条命令,它返回了这个」。

5.4 攻击路径:按优先级排

漏洞清单是并列的,攻击路径是有序的。要回答的问题是「如果我是攻击者,第一步做什么」。排序依据:成功率、所需前置条件、能拿到什么权限。

优先级 入口 手段 预期结果
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 用户权限

为什么把 vsftpd 排第一?因为它只需要发一个特定用户名,不需要任何前置条件,且直接给 root。Samba 排第二是因为同样给 root,但需要构造特定的 SMB 请求,步骤稍多。Web 排第三是因为 Metasploitable2 的 Web 应用需要手工挖,不确定性最高。

六、踩坑记录

现象 原因 解决办法
信息散落在各处,写报告时找不到 没有归档习惯 按 target/scan/vuln 三类建目录,边做边存
报告只有结论没有证据 写的时候凭记忆 每条结论后跟命令 + 输出,从原始文件复制
Markdown 表格在 Word 里错乱 pandoc 默认样式不兼容复杂表格 简化表格列数,或用 docx 模板
忘了某条命令怎么跑的 没记录 history | grep 关键词 找回,然后补进附录
报告写了十几页没人看 把过程全写进去了 控制 3--5 页,细节放附录

坑 1:信息散落,写报告时抓瞎

第一版报告写到一半发现,端口清单在 hosts.txt,版本信息在 full_scan.txt,漏洞验证结果在一个没存下来的终端里。只能重扫。

根因不是「忘了存」,是「没有归档结构」。所有输出默认堆在 home 目录,文件名还是 nmap 自动生成的。

改法:动手之前先 mkdir -p recon/{target,scan,vuln},每条命令的输出直接 -oN 到对应目录。这样报告写到哪一节,就去哪个目录取文件。

坑 2:只有结论没有证据

第一版漏洞分析写的是「发现 vsftpd 存在后门漏洞」。交给同学看,他问「你怎么知道」。

这句话本身没错,但它不是证据。证据应该是:什么版本、用什么命令验证的、返回了什么、CVE 编号是多少。

改法:每个漏洞固定四段------描述、验证(命令+输出)、影响、修复。验证那段必须能被人复制粘贴重跑一遍并得到同样结果。

坑 3:Markdown 表格在 Word 里错乱

用 pandoc 把 md 转 docx,七列的漏洞表格直接挤成一团,列宽全乱。

原因:pandoc 默认按内容长度分配列宽,七列表格在 A4 页面上本来就放不下。

改法:要么减少列数(把「有无 EXP」并进等级列),要么用自定义 docx 模板控制表格样式。最简单的是控制在 5 列以内。

坑 4:忘了命令

写附录要列完整命令清单,但有些命令是几天前跑的,完全不记得参数。

解决:history | grep nmap。bash 的历史记录默认保存最近 1000 条,够用了。更好的习惯是每条关键命令跑完就顺手记到 notes.md 里。

坑 5:报告写太长

第一版写了 15 页,把每条命令的完整输出都贴上去了。自己回头看都嫌累。

报告的价值密度和长度成反比。3--5 页正文足够说清所有事,完整输出全部放附录。管理层只看第一页,技术团队看正文,需要复现的才翻附录。

七、小结

  • 报告是渗透测试唯一的交付物,不是走流程的文书。没有报告,工作等于没做。

  • 动手前先建目录:recon/target、recon/scan、recon/vuln,所有输出 -oN 到对应位置。

  • 七段式结构:执行摘要、目标信息、信息收集、端口服务、漏洞分析、攻击路径、附录。

  • 执行摘要四要素:目标、关键发现、整体风险、建议。只写一页。

  • 每个漏洞固定四段:描述、验证(命令+输出)、影响、修复。验证段必须可复现。

  • 端口和漏洞用表格,不用截图------表格能复制能搜索能 diff。

  • 攻击路径要有优先级,排序依据是成功率和能拿到的权限。

  • 正文控制在 3--5 页,完整输出进附录。

下一篇:Day014 是 Week 2 的周末闯关------把这一周学的所有技能串成一条完整流程,从 ping 到报告,三小时走完一遍。

相关推荐
是真的小外套1 小时前
网络安全实战第15期:SQL注入根源之一条拼接语句的警示
sql·安全·web安全
10岁的博客2 小时前
Chrome 扩展安全攻防实录:从权限模型到真实漏洞复盘
前端·chrome·安全
滼2 小时前
AI 数据安全面试应答框架:从大框架到小点
大数据·人工智能·安全·面试·安全架构
johnsong4 小时前
AI前沿日报 · 2026-11-01 | 资本狂潮与安全崩塌 —— 当AI大国博弈遇上供应链暗战
人工智能·安全
m0_738120724 小时前
JWT 安全从入门到实战:六种典型攻击场景解析
前端·网络·python·安全·网络安全
xbzb4 小时前
OpenStack 网络管理(实操):建网络、连路由、浮动 IP 与安全组
网络·安全·openstack·ip·安全组·浮动
m0_547486664 小时前
《Web安全实践》全套PPT课件2026(暨南大学)
安全·web安全
李纲明6 小时前
WordPress 全站 HTTPS 后仍显示「不安全」或锁被划掉:先清混合内容,再核证书链与强制跳转
网络协议·安全·https·wordpress·devdiy·混合内容
腾科IT教育9 小时前
TypeScript 泛型(Generics):类型占位符实现复用与安全
安全·typescript·泛型