Web 安全信息收集:要收集什么、分几个维度
本章定位 :这是信息收集章节的总览导引。在深入子域名挖掘、端口扫描、目录爆破这些具体技术之前,先回答两个最基础的问题------信息收集到底要收集什么?这些内容可以分成几个维度?本章只给框架和关系,不展开技术细节。
一、信息收集的本质
在讲"收集什么"之前,先讲"为什么要收集"。
一句话定义 :信息收集的本质,是持续缩小下一步攻击目标的搜索范围。
1.1 为什么不能直接挖漏洞
很多人对信息收集的印象是"还没开始挖漏洞时的准备工作",这是误解。信息收集贯穿整个渗透过程:
| 阶段 | 不做信息收集会怎样 |
|---|---|
| 开局 | 不知道目标有多少资产,盲目测试一个域名 |
| 中期 | 不知道发现了什么技术栈,无法对应已知漏洞 |
| 后期 | 找到一个口令却不知道能拿到什么权限 |
| 深入 | 进了一台服务器却不知道内网延伸到哪里 |
关键认知:信息收集不是"挖漏洞前的准备",而是"贯穿全程的导航"。每一步测试的结果,都反过来成为下一步信息收集的输入。
1.2 为什么要分维度
不分维度的信息收集会变成"散点收集"------抓到什么是什么,彼此没有关系。分维度的意义在于:
- 不遗漏:每个维度对应一类信息,按维度过一遍能保证覆盖
- 能连成攻击链:前一维度的输出往往是后一维度的输入
- 可衡量:工具按维度划分模块,覆盖度清晰可衡量
这就是为什么要把信息收集内容显式分维度------不是为了分类而分类,而是为了让收集到的信息能结构化、能互相衔接、能形成攻击链。
二、四大类总览
Web 安全信息收集的内容,可以归并成 4 大类、10 个维度。先看四大类建立框架,再在每一类下展开具体维度。
2.1 四大类一览
| 大类 | 回答的问题 | 包含的维度 |
|---|---|---|
| 资产范围类 | 目标有哪些资产、资产在哪 | 目标范围、域名与子域名、IP 与端口资产 |
| 应用入口类 | 应用长什么样、用什么搭的 | Web 应用入口、技术栈与组件、敏感信息泄露 |
| 权限业务类 | 应用怎么用、谁能用、规则是什么 | 账号体系与权限、业务逻辑信息 |
| 漏洞线索类 | 哪里可能有问题、背后还有什么 | 潜在漏洞线索、Web 背后的基础设施 |
2.2 四大类的递进关系
这四大类不是并列的,而是有递进关系:
资产范围类 → 应用入口类 → 权限业务类 → 漏洞线索类
│ │ │ │
│ │ │ └─ 哪里可能有问题
│ │ └─ 应用怎么用、谁能用
│ └─ 应用长什么样
└─ 目标有什么
- 资产范围类回答"目标在哪、有什么"------是信息收集的起点
- 应用入口类回答"应用长什么样、用什么搭的"------基于资产范围继续往里挖
- 权限业务类回答"应用怎么用、谁能用"------基于入口继续测权限和业务
- 漏洞线索类回答"哪里可能有问题、背后还有什么"------综合前面所有信息找漏洞线索
2.3 四大类与十维度的结构图
#mermaid-svg-5Dg0Q015DwSEOLl6{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5Dg0Q015DwSEOLl6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5Dg0Q015DwSEOLl6 .error-icon{fill:#552222;}#mermaid-svg-5Dg0Q015DwSEOLl6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5Dg0Q015DwSEOLl6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5Dg0Q015DwSEOLl6 .marker.cross{stroke:#333333;}#mermaid-svg-5Dg0Q015DwSEOLl6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5Dg0Q015DwSEOLl6 p{margin:0;}#mermaid-svg-5Dg0Q015DwSEOLl6 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5Dg0Q015DwSEOLl6 .cluster-label text{fill:#333;}#mermaid-svg-5Dg0Q015DwSEOLl6 .cluster-label span{color:#333;}#mermaid-svg-5Dg0Q015DwSEOLl6 .cluster-label span p{background-color:transparent;}#mermaid-svg-5Dg0Q015DwSEOLl6 .label text,#mermaid-svg-5Dg0Q015DwSEOLl6 span{fill:#333;color:#333;}#mermaid-svg-5Dg0Q015DwSEOLl6 .node rect,#mermaid-svg-5Dg0Q015DwSEOLl6 .node circle,#mermaid-svg-5Dg0Q015DwSEOLl6 .node ellipse,#mermaid-svg-5Dg0Q015DwSEOLl6 .node polygon,#mermaid-svg-5Dg0Q015DwSEOLl6 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5Dg0Q015DwSEOLl6 .rough-node .label text,#mermaid-svg-5Dg0Q015DwSEOLl6 .node .label text,#mermaid-svg-5Dg0Q015DwSEOLl6 .image-shape .label,#mermaid-svg-5Dg0Q015DwSEOLl6 .icon-shape .label{text-anchor:middle;}#mermaid-svg-5Dg0Q015DwSEOLl6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5Dg0Q015DwSEOLl6 .rough-node .label,#mermaid-svg-5Dg0Q015DwSEOLl6 .node .label,#mermaid-svg-5Dg0Q015DwSEOLl6 .image-shape .label,#mermaid-svg-5Dg0Q015DwSEOLl6 .icon-shape .label{text-align:center;}#mermaid-svg-5Dg0Q015DwSEOLl6 .node.clickable{cursor:pointer;}#mermaid-svg-5Dg0Q015DwSEOLl6 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5Dg0Q015DwSEOLl6 .arrowheadPath{fill:#333333;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5Dg0Q015DwSEOLl6 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5Dg0Q015DwSEOLl6 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5Dg0Q015DwSEOLl6 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5Dg0Q015DwSEOLl6 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5Dg0Q015DwSEOLl6 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5Dg0Q015DwSEOLl6 .cluster text{fill:#333;}#mermaid-svg-5Dg0Q015DwSEOLl6 .cluster span{color:#333;}#mermaid-svg-5Dg0Q015DwSEOLl6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5Dg0Q015DwSEOLl6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5Dg0Q015DwSEOLl6 rect.text{fill:none;stroke-width:0;}#mermaid-svg-5Dg0Q015DwSEOLl6 .icon-shape,#mermaid-svg-5Dg0Q015DwSEOLl6 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5Dg0Q015DwSEOLl6 .icon-shape p,#mermaid-svg-5Dg0Q015DwSEOLl6 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5Dg0Q015DwSEOLl6 .icon-shape .label rect,#mermaid-svg-5Dg0Q015DwSEOLl6 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5Dg0Q015DwSEOLl6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5Dg0Q015DwSEOLl6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5Dg0Q015DwSEOLl6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 信息收集内容
资产范围类
应用入口类
权限业务类
漏洞线索类
- 目标范围
- 域名与子域名
- IP 与端口资产
- Web 应用入口
- 技术栈与组件
- 敏感信息泄露
- 账号体系与权限
- 业务逻辑信息
- 潜在漏洞线索
- Web 背后的基础设施
下面逐类逐维度展开,每个维度只讲两件事:收集什么 + 为什么要收集。
三、第一类:资产范围类
这一类回答:"目标有哪些资产、资产在哪"。是信息收集的起点------先搞清"有什么",再谈"怎么测"。
3.1 维度 1:目标范围
收集什么:
| 类别 | 具体内容 |
|---|---|
| 域名资产 | 主域名、所有子域名 |
| IP 资产 | IP 段和 CIDR |
| 组织信息 | 企业名称、关联公司、品牌、备案主体 |
| 联系方式 | 官方邮箱后缀、手机号段 |
| 多端资产 | 移动 App、小程序、公众号 |
| 平台业务 | 开放平台、第三方业务、收购或关停的业务 |
为什么要收集:信息收集前必须先划边界。不划边界会收集到无关资产、测试授权外系统、遗漏重要关联业务。所有后续收集都要能映射回"是否属于目标"。
3.2 维度 2:域名与子域名
收集什么:
| 类别 | 具体内容 |
|---|---|
| 基础域名信息 | 根域名、子域名、泛解析、注册商、注册人、注册时间、DNSSEC |
| DNS 解析记录 | A、CNAME、NS、MX、TXT、SOA、SRV、PTR |
| 子域名用途 | 官网、管理后台、API、测试环境、运维平台、邮件系统、旧系统 |
| 历史记录 | 已下线业务、历史 IP、旧版后台、历史 CDN 回源、过期域名 |
为什么要收集:域名与子域名是 Web 信息收集中最基础、也是最重要的部分。子域名往往指向独立的服务、独立的资产、独立的攻击入口。子域名挖掘之所以是信息收集的第一步,正是因为它对应接入层------最外层、最被动、最容易批量采集。
3.3 维度 3:IP 与端口资产
收集什么:
| 类别 | 具体内容 |
|---|---|
| IP 归属信息 | 归属组织、运营商、国家/地区、机房、是否云主机、是否 CDN、是否 WAF |
| 常见关注端口 | Web 端口、数据库端口、缓存端口、文件传输端口、邮件端口、远程管理端口、运维中间件端口 |
| 端口对应服务 | 服务名称、版本、是否公网暴露、是否默认配置、是否存在管理界面 |
| 非 HTTP 高价值资产 | 数据库、运维平台、容器编排、消息队列、大数据组件 |
为什么要收集:域名只是入口,最终很多攻击链会落到 IP、端口和服务。公网数据库和中间件经常比 Web 应用更容易直接获得系统权限------这就是为什么端口扫描是信息收集里最"硬"的部分。
四、第二类:应用入口类
这一类回答:"应用长什么样、用什么搭的、有没有泄露"。基于资产范围类继续往里挖。
4.1 维度 4:Web 应用入口
收集什么:
| 类别 | 具体内容 |
|---|---|
| 目录和路径 | 后台、认证、用户中心、API、上传、备份、安装、测试、文档 |
| 敏感文件类型 | 备份文件、压缩包、配置文件、日志、源码包、数据库导出 |
| 重点 URL 参数 | id/file/url/cmd 等暗示后端行为的参数 |
| API 接口类型 | RESTful、GraphQL、SOAP、WebSocket、上传、回调、OAuth |
为什么要收集:这一步解决"目标到底有哪些页面、接口和功能"。URL 参数本身就是一张"后端功能清单"------参数名是后端逻辑的"自白书",直接暗示可能的漏洞类型。
4.2 维度 5:技术栈与组件
收集什么:
| 层级 | 常见组件 |
|---|---|
| Web 服务器 | Nginx、Apache、IIS、Tomcat、OpenResty |
| 后端语言 | Java、PHP、Python、Node.js、.NET、Go |
| 后端框架 | Spring、Struts、ThinkPHP、Laravel、Django、Express |
| 前端技术 | Vue、React、Angular、Next.js、jQuery |
| 中间件 | Weblogic、WebSphere、JBoss |
| 数据库 | MySQL、PostgreSQL、MongoDB、Redis |
| CMS | WordPress、Drupal、帝国、织梦 |
| 第三方服务 | CDN、WAF、对象存储、短信、支付、SSO |
为什么要收集 :技术栈识别的目的是缩小漏洞范围、判断是否存在已知漏洞、选择合适的测试方式 。一个 Server 头或一个 Cookie 名,往往就能精确定位到具体框架甚至版本,从而判断是否存在已知 CVE。
4.3 维度 6:敏感信息泄露
收集什么:
| 类别 | 具体内容 |
|---|---|
| 源码与前端信息 | JS 文件、Source Map、打包文件、注释、调试信息、硬编码地址 |
| 配置文件泄露 | .env、config.php、database.yml、application.properties |
| 版本控制泄露 | .git/、.svn/、.hg/ |
| 目录遍历 | 备份目录、日志目录、上传目录可浏览 |
| 错误页面与调试 | 绝对路径、SQL 语句、堆栈、内部 IP、框架版本 |
| 文档与接口信息 | Swagger、Postman 集合、在线文档、SDK 示例 |
| 历史泄露 | GitHub、Gitee、Wayback Machine、Paste 网站、招聘需求 |
为什么要收集 :泄露的敏感信息往往直接决定攻击难度。一个 .git/ 泄露能还原完整源码,一个 Source Map 能暴露全部接口,一个报错能定位技术栈------这些"意外金矿"经常让攻击成本断崖式下降。
五、第三类:权限业务类
这一类回答:"应用怎么用、谁能用、规则是什么"。基于应用入口继续测权限和业务。
5.1 维度 7:账号体系与权限
收集什么:
| 类别 | 具体内容 |
|---|---|
| 用户体系 | 普通用户、VIP、企业用户、内部员工、管理员、审计人员 |
| 注册与认证 | 是否开放注册、用户名规则、验证码类型、是否支持三方登录、是否多因素 |
| 会话管理 | Cookie 属性、Token 类型、刷新机制、单点登录范围、JWT 字段 |
| 权限结构 | 普通用户能否访问管理接口、ID 是否可枚举、接口是否校验资源归属 |
为什么要收集 :现代 Web 漏洞很多已经不是单纯的"代码漏洞",而是权限模型漏洞。越权、未授权、横向移动这些高频问题,根因都是权限模型设计缺陷。不收集权限信息,就找不到这类漏洞。
5.2 维度 8:业务逻辑信息
收集什么:
| 类别 | 具体内容 |
|---|---|
| 常见业务模块 | 登录注册、个人中心、订单交易、支付、充值提现、优惠券、积分、签到、抽奖、邀请 |
| 业务规则 | 哪些操作要登录/实名/付费、哪些可重复提交、退款限制、优惠券叠加、邀请奖励 |
为什么要收集:业务逻辑漏洞通常不是"程序出错",而是"规则可以被绕过"。必须把规则先收集完整,才能找到规则之间的缝隙。这就是为什么业务逻辑漏洞被叫做"最难自动化检测的漏洞"------它需要先理解规则。
六、第四类:漏洞线索类
这一类回答:"哪里可能有问题、背后还有什么"。综合前面所有信息找漏洞线索和延伸面。
6.1 维度 9:潜在漏洞线索
收集什么:
| 漏洞类型 | 线索特征 |
|---|---|
| 注入类 | SQL 参数、搜索框、排序参数、文件读取参数、命令执行参数 |
| 文件类 | 上传功能、文件解析、文件下载、压缩包处理、模板渲染 |
| 反序列化 | Java 对象参数、序列化 Content-Type、特定框架指纹、RPC 接口 |
| SSRF | URL 参数、图片抓取、网页预览、导入外部内容、Webhook |
| XSS | 搜索框、评论区、留言板、个人资料、富文本编辑器、URL 回显 |
| 越权 | 用户 ID、订单 ID、企业 ID、文件 ID、手机号参数 |
| 逻辑漏洞 | 验证码、支付金额、数量参数、订单状态、签名参数、优惠券码 |
为什么要收集:信息收集不直接等于挖漏洞,但会为漏洞测试提供线索。参数名、功能点、技术栈指纹,每一个都是漏洞线索------把它们收集齐,后续漏洞测试就有了明确靶标。
6.2 维度 10:Web 背后的基础设施
收集什么:
| 类别 | 具体内容 | 安全关注点 |
|---|---|---|
| CDN / WAF | 服务商、配置规则 | 绕过思路、回源 IP 发现 |
| 云主机 | 实例、安全组 | 实例角色权限、元数据服务 |
| 对象存储 | Bucket、域名绑定 | Bucket 权限、匿名访问 |
| 容器 / K8s | 镜像仓库、编排平台 | 镜像泄露、Dashboard 未授权 |
| CI/CD | 构建系统、流水线 | 凭据泄露、命令注入 |
| 微服务 / 网关 | 服务注册、网关配置 | 内部接口暴露 |
| 消息队列 / 缓存 | Redis、RabbitMQ、Kafka | 未授权访问、弱口令 |
| 云函数 / Serverless | 函数计算、事件触发 | 权限过大、环境变量泄露 |
| 运维 / 监控 / 日志 | 监控平台、日志系统 | 未授权访问、信息泄露 |
为什么要收集:现代 Web 往往不是单一站点,而是一整套云环境。核心问题是:这个网站只是入口,还是背后整个云环境都在目标范围内?这就是为什么信息收集要往云环境深挖------Bucket、云函数、K8s Dashboard 这些"非 Web 应用资产",往往比 Web 应用本身更容易直接拿到权限。
七、信息收集的流程与阶段
前面讲了"收集什么",这一节讲"什么时候收集什么"。信息收集不是一次性动作,而是随渗透过程持续进行。
7.1 信息收集整体流程
#mermaid-svg-tmLQrP29ct4IL0Z2{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-tmLQrP29ct4IL0Z2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tmLQrP29ct4IL0Z2 .error-icon{fill:#552222;}#mermaid-svg-tmLQrP29ct4IL0Z2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tmLQrP29ct4IL0Z2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tmLQrP29ct4IL0Z2 .marker.cross{stroke:#333333;}#mermaid-svg-tmLQrP29ct4IL0Z2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tmLQrP29ct4IL0Z2 p{margin:0;}#mermaid-svg-tmLQrP29ct4IL0Z2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tmLQrP29ct4IL0Z2 .cluster-label text{fill:#333;}#mermaid-svg-tmLQrP29ct4IL0Z2 .cluster-label span{color:#333;}#mermaid-svg-tmLQrP29ct4IL0Z2 .cluster-label span p{background-color:transparent;}#mermaid-svg-tmLQrP29ct4IL0Z2 .label text,#mermaid-svg-tmLQrP29ct4IL0Z2 span{fill:#333;color:#333;}#mermaid-svg-tmLQrP29ct4IL0Z2 .node rect,#mermaid-svg-tmLQrP29ct4IL0Z2 .node circle,#mermaid-svg-tmLQrP29ct4IL0Z2 .node ellipse,#mermaid-svg-tmLQrP29ct4IL0Z2 .node polygon,#mermaid-svg-tmLQrP29ct4IL0Z2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tmLQrP29ct4IL0Z2 .rough-node .label text,#mermaid-svg-tmLQrP29ct4IL0Z2 .node .label text,#mermaid-svg-tmLQrP29ct4IL0Z2 .image-shape .label,#mermaid-svg-tmLQrP29ct4IL0Z2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-tmLQrP29ct4IL0Z2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tmLQrP29ct4IL0Z2 .rough-node .label,#mermaid-svg-tmLQrP29ct4IL0Z2 .node .label,#mermaid-svg-tmLQrP29ct4IL0Z2 .image-shape .label,#mermaid-svg-tmLQrP29ct4IL0Z2 .icon-shape .label{text-align:center;}#mermaid-svg-tmLQrP29ct4IL0Z2 .node.clickable{cursor:pointer;}#mermaid-svg-tmLQrP29ct4IL0Z2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tmLQrP29ct4IL0Z2 .arrowheadPath{fill:#333333;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tmLQrP29ct4IL0Z2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tmLQrP29ct4IL0Z2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tmLQrP29ct4IL0Z2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tmLQrP29ct4IL0Z2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tmLQrP29ct4IL0Z2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tmLQrP29ct4IL0Z2 .cluster text{fill:#333;}#mermaid-svg-tmLQrP29ct4IL0Z2 .cluster span{color:#333;}#mermaid-svg-tmLQrP29ct4IL0Z2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tmLQrP29ct4IL0Z2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tmLQrP29ct4IL0Z2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-tmLQrP29ct4IL0Z2 .icon-shape,#mermaid-svg-tmLQrP29ct4IL0Z2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tmLQrP29ct4IL0Z2 .icon-shape p,#mermaid-svg-tmLQrP29ct4IL0Z2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tmLQrP29ct4IL0Z2 .icon-shape .label rect,#mermaid-svg-tmLQrP29ct4IL0Z2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tmLQrP29ct4IL0Z2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tmLQrP29ct4IL0Z2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tmLQrP29ct4IL0Z2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输出
输出
输出
输出
输出
输出
输入
输入
输入
输入
输入
开始
阶段1:范围界定
阶段2:资产发现
阶段3:应用探测
阶段4:深入分析
阶段5:漏洞线索整理
阶段6:基础设施延伸
目标范围清单
域名+IP+端口清单
目录+接口+指纹清单
权限+业务规则清单
漏洞线索清单
云环境+内网延伸清单
下一步:漏洞测试
流程图的关键在于虚线------前一阶段的输出会成为后一阶段的输入。这就是为什么信息收集要分阶段、按顺序做。
7.2 四阶段与维度映射
#mermaid-svg-LGpDXz40lk2NyIg3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LGpDXz40lk2NyIg3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LGpDXz40lk2NyIg3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LGpDXz40lk2NyIg3 .error-icon{fill:#552222;}#mermaid-svg-LGpDXz40lk2NyIg3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LGpDXz40lk2NyIg3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LGpDXz40lk2NyIg3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LGpDXz40lk2NyIg3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LGpDXz40lk2NyIg3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LGpDXz40lk2NyIg3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LGpDXz40lk2NyIg3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LGpDXz40lk2NyIg3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LGpDXz40lk2NyIg3 .marker.cross{stroke:#333333;}#mermaid-svg-LGpDXz40lk2NyIg3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LGpDXz40lk2NyIg3 p{margin:0;}#mermaid-svg-LGpDXz40lk2NyIg3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LGpDXz40lk2NyIg3 .cluster-label text{fill:#333;}#mermaid-svg-LGpDXz40lk2NyIg3 .cluster-label span{color:#333;}#mermaid-svg-LGpDXz40lk2NyIg3 .cluster-label span p{background-color:transparent;}#mermaid-svg-LGpDXz40lk2NyIg3 .label text,#mermaid-svg-LGpDXz40lk2NyIg3 span{fill:#333;color:#333;}#mermaid-svg-LGpDXz40lk2NyIg3 .node rect,#mermaid-svg-LGpDXz40lk2NyIg3 .node circle,#mermaid-svg-LGpDXz40lk2NyIg3 .node ellipse,#mermaid-svg-LGpDXz40lk2NyIg3 .node polygon,#mermaid-svg-LGpDXz40lk2NyIg3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LGpDXz40lk2NyIg3 .rough-node .label text,#mermaid-svg-LGpDXz40lk2NyIg3 .node .label text,#mermaid-svg-LGpDXz40lk2NyIg3 .image-shape .label,#mermaid-svg-LGpDXz40lk2NyIg3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-LGpDXz40lk2NyIg3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LGpDXz40lk2NyIg3 .rough-node .label,#mermaid-svg-LGpDXz40lk2NyIg3 .node .label,#mermaid-svg-LGpDXz40lk2NyIg3 .image-shape .label,#mermaid-svg-LGpDXz40lk2NyIg3 .icon-shape .label{text-align:center;}#mermaid-svg-LGpDXz40lk2NyIg3 .node.clickable{cursor:pointer;}#mermaid-svg-LGpDXz40lk2NyIg3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LGpDXz40lk2NyIg3 .arrowheadPath{fill:#333333;}#mermaid-svg-LGpDXz40lk2NyIg3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LGpDXz40lk2NyIg3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LGpDXz40lk2NyIg3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LGpDXz40lk2NyIg3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LGpDXz40lk2NyIg3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LGpDXz40lk2NyIg3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LGpDXz40lk2NyIg3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LGpDXz40lk2NyIg3 .cluster text{fill:#333;}#mermaid-svg-LGpDXz40lk2NyIg3 .cluster span{color:#333;}#mermaid-svg-LGpDXz40lk2NyIg3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LGpDXz40lk2NyIg3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LGpDXz40lk2NyIg3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-LGpDXz40lk2NyIg3 .icon-shape,#mermaid-svg-LGpDXz40lk2NyIg3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LGpDXz40lk2NyIg3 .icon-shape p,#mermaid-svg-LGpDXz40lk2NyIg3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LGpDXz40lk2NyIg3 .icon-shape .label rect,#mermaid-svg-LGpDXz40lk2NyIg3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LGpDXz40lk2NyIg3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LGpDXz40lk2NyIg3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LGpDXz40lk2NyIg3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 资产清单
入口与指纹清单
权限与规则
后渗透阶段
9.潜在漏洞线索
10.Web背后的基础设施
深入阶段
7.账号体系与权限
8.业务逻辑信息
探测阶段
4.Web应用入口
5.技术栈与组件
6.敏感信息泄露
初始阶段
1.目标范围
2.域名与子域名
3.IP与端口资产
7.3 各阶段的收集重点
| 阶段 | 主要收集 | 目的 |
|---|---|---|
| 初始阶段 | 域名、子域名、IP、端口、Web 服务、标题、指纹 | 确定资产总量 |
| 探测阶段 | 目录和文件、后台入口、参数、接口、技术栈、报错 | 找到可测试入口 |
| 深入阶段 | 用户体系、权限模型、业务逻辑、敏感参数、接口调用关系 | 寻找授权、业务逻辑漏洞 |
| 后渗透阶段 | 配置文件、环境变量、数据库连接、AccessKey、云凭证、内部地址 | 判断能否进入服务器、云环境或内网 |
核心结论:四大类的递进关系,正好对应四个阶段的执行顺序。这就是为什么维度要这样归类------它不仅是分类,也是执行顺序。
八、维度间的关系:数据如何流动
这一节用一张图展示维度之间的数据流------前一维度的输出如何成为后一维度的输入。这是信息收集能"连成攻击链"的关键。
8.1 维度间数据流图
#mermaid-svg-cy0yypd5388veTQy{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-cy0yypd5388veTQy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-cy0yypd5388veTQy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-cy0yypd5388veTQy .error-icon{fill:#552222;}#mermaid-svg-cy0yypd5388veTQy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cy0yypd5388veTQy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-cy0yypd5388veTQy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cy0yypd5388veTQy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cy0yypd5388veTQy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-cy0yypd5388veTQy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cy0yypd5388veTQy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cy0yypd5388veTQy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cy0yypd5388veTQy .marker.cross{stroke:#333333;}#mermaid-svg-cy0yypd5388veTQy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cy0yypd5388veTQy p{margin:0;}#mermaid-svg-cy0yypd5388veTQy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-cy0yypd5388veTQy .cluster-label text{fill:#333;}#mermaid-svg-cy0yypd5388veTQy .cluster-label span{color:#333;}#mermaid-svg-cy0yypd5388veTQy .cluster-label span p{background-color:transparent;}#mermaid-svg-cy0yypd5388veTQy .label text,#mermaid-svg-cy0yypd5388veTQy span{fill:#333;color:#333;}#mermaid-svg-cy0yypd5388veTQy .node rect,#mermaid-svg-cy0yypd5388veTQy .node circle,#mermaid-svg-cy0yypd5388veTQy .node ellipse,#mermaid-svg-cy0yypd5388veTQy .node polygon,#mermaid-svg-cy0yypd5388veTQy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cy0yypd5388veTQy .rough-node .label text,#mermaid-svg-cy0yypd5388veTQy .node .label text,#mermaid-svg-cy0yypd5388veTQy .image-shape .label,#mermaid-svg-cy0yypd5388veTQy .icon-shape .label{text-anchor:middle;}#mermaid-svg-cy0yypd5388veTQy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-cy0yypd5388veTQy .rough-node .label,#mermaid-svg-cy0yypd5388veTQy .node .label,#mermaid-svg-cy0yypd5388veTQy .image-shape .label,#mermaid-svg-cy0yypd5388veTQy .icon-shape .label{text-align:center;}#mermaid-svg-cy0yypd5388veTQy .node.clickable{cursor:pointer;}#mermaid-svg-cy0yypd5388veTQy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-cy0yypd5388veTQy .arrowheadPath{fill:#333333;}#mermaid-svg-cy0yypd5388veTQy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cy0yypd5388veTQy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cy0yypd5388veTQy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cy0yypd5388veTQy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-cy0yypd5388veTQy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cy0yypd5388veTQy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-cy0yypd5388veTQy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cy0yypd5388veTQy .cluster text{fill:#333;}#mermaid-svg-cy0yypd5388veTQy .cluster span{color:#333;}#mermaid-svg-cy0yypd5388veTQy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-cy0yypd5388veTQy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-cy0yypd5388veTQy rect.text{fill:none;stroke-width:0;}#mermaid-svg-cy0yypd5388veTQy .icon-shape,#mermaid-svg-cy0yypd5388veTQy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cy0yypd5388veTQy .icon-shape p,#mermaid-svg-cy0yypd5388veTQy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-cy0yypd5388veTQy .icon-shape .label rect,#mermaid-svg-cy0yypd5388veTQy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cy0yypd5388veTQy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-cy0yypd5388veTQy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-cy0yypd5388veTQy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 域名
子域名解析
开放端口
子域名URL
目录与接口
技术栈指纹
敏感文件
泄露的配置/凭证
登录入口
权限结构
功能点
业务规则
非HTTP端口
漏洞线索
云环境延伸
1.目标范围
2.域名与子域名
3.IP与端口资产
5.技术栈与组件
4.Web应用入口
9.潜在漏洞线索
6.敏感信息泄露
10.Web背后的基础设施
7.账号体系与权限
8.业务逻辑信息
8.2 数据流解读
看这张图要抓住几条主线:
主线 1:资产发现链
目标范围 → 域名子域名 → IP 端口 → 技术栈 → 漏洞线索
- 目标范围给出域名
- 域名解析得到 IP
- IP 扫出端口
- 端口和指纹识别技术栈
- 技术栈对应已知漏洞线索
主线 2:应用入口链
子域名 URL → Web 应用入口 → 敏感信息 → 基础设施
- 子域名给出可访问 URL
- URL 探测找到目录和接口
- 目录扫描发现敏感文件
- 敏感文件泄露基础设施信息
主线 3:权限业务链
Web 应用入口 → 登录入口 → 账号权限 → 业务逻辑 → 漏洞线索
- 应用入口暴露登录页
- 登录页引出账号体系
- 账号体系暴露权限结构
- 业务功能暴露业务规则
- 权限和规则共同指向逻辑漏洞
主线 4:循环回路
基础设施延伸 → 目标范围
- 基础设施延伸发现新的 IP 段、Bucket、子域名
- 这些新资产回到目标范围,重新开始一轮收集
关键认知 :信息收集不是线性的,而是有回路的有向图。每一次深挖都可能发现新资产,新资产又触发新一轮收集。这就是为什么信息收集叫"持续缩小搜索范围"------每一轮都在缩小,但不会一次结束。
九、总结心法
把前面所有内容收拢,信息收集最重要的不是"收集得越多越好",而是始终问自己下面五个问题:
9.1 五个自问
| 问题 | 对应的维度 |
|---|---|
| 这个信息是否扩大了攻击面? | 资产范围类 |
| 它指向哪个漏洞类型? | 漏洞线索类 |
| 能否进一步获取身份、权限或数据? | 权限业务类 |
| 它是否连接着云、容器或内网? | 基础设施维度 |
| 根据目前信息,下一步最值得测试什么? | 全维度综合 |