授权渗透测试的第一份交付物通常不是漏洞报告,而是一份能经得起复核的攻击面台账。台账的价值在于把"我知道有哪些入口"变成"我能解释每个入口为什么被列进来、为什么排在这个位置、验证到什么程度就该停"。没有台账的测试过程往往呈现两种失控:一种是扫描器跑了一整夜,输出几千条记录,却说不清哪些资产在授权范围内;另一种是凭经验挑了几个"看起来有意思"的目标深挖,最后无法向客户证明覆盖度。本文以授权测试为前提,给出一套可执行的台账结构与配套的停止条件,命令和请求示例均使用占位域名与测试环境。
前置条件:授权边界要落到可枚举的对象上
授权书里写"对某某公司外网资产进行测试"是不够的。可执行的授权边界需要落到域名、IP 段、云账号、应用系统这几类可枚举对象上,并明确三类信息:
- 包含范围:允许测试的域名与子域、CIDR 网段、具体 URL 路径前缀、API 版本、管理后台地址。
- 排除对象:第三方托管服务、CDN 回源以外的节点、共享办公 SaaS、客户明确标注为生产核心且不允许任何主动探测的系统。
- 时间与速率窗口:允许测试的时段、峰值并发上限、是否允许主动扫描、是否允许口令测试。
一个容易忽略的点是共享基础设施。多个业务域名解析到同一个反向代理或同一台负载均衡时,对某个域名的路径探测可能影响到同一 IP 上的其他租户。因此在台账中记录每个入口的"归属"字段时,应区分自有资产、托管资产和共享资产,共享资产默认只做被动收集,主动验证需单独确认。
停止条件从这一步就要写下来:一旦发现目标解析到授权清单之外的 IP,或响应中出现第三方组织的标识,立即停止对该入口的主动操作并记录。
资产发现的三个阶段与各自的停止条件
资产发现建议按"被动收集 → 低影响主动探测 → 交互验证"推进,每一阶段都有独立的产出和停止条件。这个顺序的意义不只是隐蔽性,更是让每一步的结论都能被前一步的证据支撑。
被动收集:从公开数据建立初始清单
被动阶段不向目标发送任何流量,来源包括证书透明度日志、公开的 DNS 数据集、搜索引擎索引、企业公开的招聘与技术文档、代码托管平台的配置泄露线索。这一阶段的目标是产出一份"候选资产清单",而不是最终台账。
需要注意,证书透明度日志中的域名不一定属于目标组织——同一张证书可能覆盖多个主体,或域名已被转让。每条候选记录都要标注来源,来源不明的条目在进入下一阶段前必须人工确认。
停止条件:候选清单不再有新增来源,或新增条目全部来自低可信来源(如聚合站、历史快照)时,转入下一阶段。
低影响主动探测:确认存活与基础指纹
这一阶段开始与目标交互,核心约束是速率。建议对单个目标域名的 DNS 解析请求控制在每秒个位数,对 Web 服务的探测请求间隔不低于 1 秒,并避免使用会触发大规模日志的路径字典。
# 占位示例:对授权清单内的域名做低频解析确认
for host in app.example.test api.example.test admin.example.test; do
dig +short "$host" A | sed "s/^/$host /"
sleep 2
done
输出解读的要点:同一域名返回多个 A 记录时,要判断是否存在 CDN 或负载均衡;若解析结果落在授权网段之外,标记为待确认并暂停后续探测。CNAME 指向第三方服务(如托管平台、邮件服务商)的,按共享资产处理。
端口层面,优先确认授权范围内明确列出的服务端口,全端口扫描应事先获得同意并约定速率。对 WordPress 类站点,可先通过 HTTP 响应头、/wp-login.php 是否存在、robots.txt 与 readme.html 等公开路径判断站点类型,这些请求与普通访客访问无异。
停止条件:出现 WAF 拦截页面、源站返回 429/403 频次上升,或监控方通知异常流量时,立即降速或暂停,并在台账中记录触发时间与现象。

交互验证:确认入口的真实可达性
交互验证只针对已经确认存活、且在授权范围内的入口。这一步要回答的是"这个入口以什么方式暴露、需要什么条件才能到达业务逻辑",而不是立刻尝试漏洞利用。
对 Web 应用,一次正常的首页请求加一次登录页请求通常足以判断认证方式;对 API,可用文档端点或一个无害的 GET 请求确认版本与鉴权头要求。所有请求都应带上可识别的测试标识(如自定义 User-Agent 或请求头),便于事后与目标方日志对账。
GET /api/v1/health HTTP/1.1
Host: api.example.test
User-Agent: authorized-pentest-2026Q1
Accept: application/json
停止条件:任何请求返回了非预期的敏感数据、触发了账号锁定、或导致服务响应时间显著上升时,停止该类请求并记录。
台账字段设计:让每个入口可复核
台账建议用表格维护,字段设计的目标是让第三个人在不询问测试者的情况下,能理解每个入口的来龙去脉。以下字段经过实际项目验证,可直接作为模板起点。
| 字段 | 说明 | 示例 |
|---|---|---|
| 入口 ID | 稳定编号,后续报告引用 | AS-014 |
| 资产标识 | 域名/IP/应用名 | admin.example.test |
| 归属 | 自有/托管/共享 | 自有 |
| 暴露方式 | 公网直连/CDN 回源/内网跳板可达 | CDN 回源 |
| 服务与端口 | 协议、端口、服务指纹 | HTTPS/443, nginx |
| 应用类型 | WordPress/自研后台/API 网关 | WordPress |
| 认证要求 | 无认证/单因素/多因素/仅内网 | 单因素 |
| 数据敏感度 | 高/中/低,附判断依据 | 高(含用户订单) |
| 业务影响 | 若被攻陷的后果描述 | 订单数据泄露 |
| 来源 | 该条目如何被发现 | CT 日志 + 解析确认 |
| 状态 | 待验证/验证中/已闭环/已排除 | 待验证 |
| 证据链接 | 截图、请求记录、时间戳 | evidence/AS-014/ |
两个字段值得单独说明。"数据敏感度"必须附判断依据,不能只写"高"——依据可以是登录后可见的数据类型、接口返回字段、或与客户确认的业务描述。"来源"字段在复核时最常被追问,它决定了这条记录是否可信。
入口分级:按可利用性与影响排序
分级不是给资产贴标签,而是决定验证顺序。建议用两个维度交叉:可达性(从测试位置能否直接触达业务逻辑)和影响面(一旦被利用的业务后果)。据此可以形成四类:
- 优先验证:公网可达、认证薄弱或缺失、且承载敏感数据或核心业务。例如暴露在公网的 WordPress 管理后台、无鉴权的内部 API。
- 计划验证:公网可达但认证较强,或需要特定条件才能触达。例如启用了多因素认证的管理入口。
- 条件验证:仅在获得额外授权或特定前提(如拿到低权限账号)后才验证。例如需要内网位置才能访问的服务。
- 记录不验证:共享资产、第三方托管、明确排除的对象。保留记录用于报告完整性。
分级结果要写进台账的状态字段,并在验证开始前与客户确认。这一步的沟通成本远低于验证中途被叫停的成本。
验证优先级排序:三个变量的加权
在同一级别内部,排序可以按可利用性、数据敏感度、修复成本三个变量加权。这不是精确的数学,但能让排序有据可依。
- 可利用性:是否需要认证、是否存在已知的公开利用方式、利用是否需要用户交互。不需要认证且无需交互的入口排前面。
- 数据敏感度:入口背后能触达的数据类型与范围。能读到全量用户数据的排前面。
- 修复成本:这一项常被忽略,但它影响的是验证顺序而非风险等级。修复成本低的入口(如一个配置项、一次版本升级)可以先验证,因为发现的问题能快速闭环,为后续验证腾出沟通窗口。
一个实用的做法是给三个变量各打 1–3 分,加权求和后排序,并在台账中保留打分依据。当客户质疑排序时,可以逐项解释而不是凭印象争论。
扫描速率与并发的控制方法
速率控制不是"慢一点"这么模糊。可执行的做法是给每类操作设定明确上限,并在工具层面落地:
- 端口扫描:限制并发连接数与每秒发包数,避开业务高峰时段。
- Web 路径探测:单目标并发不超过 2–3,请求间隔可配置。
- 目录与参数枚举:优先使用小规模、高相关性的字典,而非全量字典。
- 口令测试:严格按授权约定次数,触发锁定即停止。
同时准备一份"熔断清单":哪些现象出现时必须立即停止(源站 5xx 比例上升、WAF 封禁、客户通知、响应时间翻倍)。清单要写在测试执行文档里,而不是记在脑子里。
从台账到验证与复测的同步
台账在验证阶段是工作台,在报告阶段是索引,在复测阶段是检查表。保持同步的关键是让每条验证记录都回写台账:
- 验证开始与结束时间、使用的入口 ID。
- 复现条件:请求、参数、前置状态。
- 证据位置:截图、原始请求响应、时间戳。
- 结论:确认存在/不存在/无法验证,以及原因。
- 整改后复测结果与复测时间。
复测时不要重新建表,而是基于原台账逐条更新状态。这样报告中的"已修复"才有对应的验证记录,而不是仅凭开发人员的口头确认。

常见误区与收尾清理
几个在实践中反复出现的问题值得提前规避。把扫描器的原始输出直接当作台账,会导致字段缺失、来源不明、无法分级;只记录"发现了什么"而不记录"为什么排除某条",会让复核者无法判断覆盖度;在验证阶段才发现某资产不在授权范围内,说明前置确认不充分。
测试结束后的清理同样要写进流程:删除测试过程中上传的临时文件、移除测试账号、撤销测试期间申请的访问凭据、确认没有留下计划任务或调试端点。清理结果也要回写台账,作为闭环的一部分。
台账本身是动态文档。攻击面会随业务变化,一次测试结束不代表台账失效。把台账移交给客户的运维或安全团队时,附上字段说明和更新建议,比交付一份静态表格更有长期价值。

上海市青浦区 1F
“来源”字段设计得很细,复核时确实全靠它