信息收集
信息收集是 Web 安全测试的起点。它不是“拿工具扫一遍”,而是把目标的资产、入口、技术栈、业务流程和风险线索整理成一张可复盘的地图。
先定边界
开始之前先确认授权范围。哪些域名、子域名、IP、接口、账号和时间窗口允许测试,哪些第三方资源、生产数据、支付流程、短信邮件、压力行为不能触碰,都要提前写清楚。
| 边界项 | 需要确认什么 |
|---|---|
| 域名与 IP | 主域、子域、历史域名、云资源、CDN 是否在范围内 |
| 环境 | 生产、测试、预发布、演示环境能做哪些动作 |
| 账号 | 普通用户、管理员、商户、运营等角色是否可用 |
| 行为限制 | 是否允许扫描、爆破、上传、导出、改数据、触发回调 |
| 证据记录 | 发现时间、来源、请求方式、截图或响应摘要 |
边界不清时,先记录线索,不主动触达高风险目标。信息收集的第一条原则是可控,第二条才是全面。
从外到内看资产
信息收集可以按“公开信息 -> 网络暴露面 -> Web 入口 -> 业务流程”的顺序推进。这样不容易漏掉关键面,也方便把零散发现串起来。
| 方向 | 看什么 | 价值 |
|---|---|---|
| 组织画像 | 公司名、品牌、子公司、旧系统、海外站点 | 找到真实资产归属和历史遗留系统 |
| 公开索引 | 搜索引擎、GitHub、文档站、招聘 JD、状态页 | 发现域名、接口、技术栈、泄露信息 |
| 域名 DNS | 子域名、CNAME、MX、TXT、NS、历史解析 | 还原业务分布和第三方依赖 |
| 证书日志 | CT 记录、证书 SAN、过期证书 | 补充隐藏子域和旧资产 |
| IP 与服务 | 端口、协议、Banner、服务版本 | 判断暴露服务和潜在攻击面 |
| Web 指纹 | WebServer、框架、CMS、中间件、前端构建 | 关联已知漏洞、默认路径和配置习惯 |
| 页面与前端 | HTML 注释、JS、SourceMap、接口地址、Token 名称 | 发现 API、调试信息和隐藏入口 |
| 应用流程 | 注册、登录、找回密码、订单、上传、导出、后台 | 为逻辑漏洞、越权、认证问题做铺垫 |
新手容易只盯着“有没有漏洞”,但信息收集更重要的是回答:目标有哪些资产,入口在哪里,身份怎么流转,数据怎么进出,哪些地方看起来像临时、旧版或管理面。
重点线索
看到这些内容时,要单独记录,因为它们经常会变成后续验证的入口:
- 测试环境、预发布环境、旧后台、管理登录页、接口文档。
.git、备份包、日志文件、配置文件、SourceMap、目录列表。- Swagger、OpenAPI、GraphQL、Postman Collection、移动端 API。
- 上传、下载、导入、导出、预览、回调、Webhook、URL 抓取。
- 用户 ID、订单 ID、组织 ID、角色字段、状态字段、价格字段。
- 报错页、调试模式、框架版本、中间件版本、数据库错误。
- 云存储 Bucket、对象链接、CDN 回源线索、第三方 SaaS 地址。
这些线索不一定马上就是漏洞,但它们能告诉你下一步该看哪类风险:认证与会话、越权、逻辑漏洞、文件类问题、SSRF、SQL 注入、XSS 或源码泄露。
输出一张地图
信息收集结束时,最好不要只留一堆截图和工具输出,而是整理成可读的资产地图。
| 输出物 | 内容 |
|---|---|
| 资产表 | 域名、IP、端口、服务、技术栈、环境、归属、状态 |
| 入口点表 | URL、方法、参数、认证方式、角色、功能、风险备注 |
| API 表 | 端点、版本、参数、来源、是否需要登录、是否有文档 |
| 架构草图 | 用户端、CDN/WAF、反向代理、应用、API、存储、第三方服务 |
| 风险清单 | 敏感信息、测试环境、旧版本、管理面、未授权接口、源码配置泄露 |
一个好的信息收集结果,应该让后续测试者不用重新摸路:打开文档就能知道目标长什么样、从哪里进、哪些点值得优先验证,以及每条判断来自哪里。