第7章 阶段6:HTTP 探测与价值评估
本篇定位:子域名挖掘流程的第六阶段。前五步从 DNS 层面确认了"有没有这个子域"。但 DNS 存在不等于有价值——一个子域可能解析成功,HTTP 探测返回 404、403、502——这些状态码的挖掘意义完全不同。这一步把"DNS 存活的子域"筛选为"HTTP 层面有价值的目标"。
阅读建议:如果你做过批量 HTTP 探测,可以跳到 7.5 价值分级看分级标准。如果是新手,按顺序读——7.1 到 7.4 是四道探测工序,7.5 把探测结果汇总成分级。
7.0 方法论框架
HTTP 探测在全局流程里的位置:
阶段5:DNS 清洗(可信子域 + IP 列表) ──→ 【阶段6:HTTP 探测与价值评估】 ──→ 阶段7:输出与监控 │ ├── 探测策略(协议、方法、顺序) ├── 状态码语义(判断服务状态) ├── 重定向链跟踪(发现新子域) ├── TLS 证书二次分析(发现新子域) └── 价值分级(高/中/低/信息/CDN 后)什么是 HTTP 探测
HTTP 探测(HTTP Probing),指的是对清洗后的子域名做 HTTP/HTTPS 请求,根据响应判断子域是否"存活"且"有价值"。
为什么在最后
| 清洗解决的问题 | 清洗没解决的问题 |
|---|---|
| DNS 层面是否存活 | HTTP 层面是否存活 |
| 是否命中通配符 | 服务返回什么状态码 |
| CNAME 链终点 | 重定向链指向哪里 |
| IP 是否 CDN | 证书 SAN 有没有新子域 |
| — | 这个子域值不值得打 |
关键认知:DNS 存在不等于有价值。一个子域名 DNS 解析成功,但 HTTP 探测可能返回 404(空站)、403(禁止访问/WAF)、502(后端故障)、301(重定向到别处)。HTTP 探测的价值是"从 DNS 存活筛选到 HTTP 有价值"。
四个环节概览
探测的本质
前五步解决"有没有这个子域",这一步解决"值不值得打"。价值分级是这一步的核心输出——不是所有子域都值得深入,分级帮你分配精力。
7.1 探测策略
前置知识
HTTP 请求方法回顾
HTTP 请求方法(HTTP Method)告诉服务器客户端要做什么:
| 方法 | 含义 | 和探测的关系 |
|---|---|---|
| GET | 请求资源 | 最常用,服务器返回完整页面 |
| HEAD | 只请求头 | 不返回 body,速度快——适合批量探测 |
| POST | 提交数据 | 不适合探测——可能触发业务逻辑 |
| OPTIONS | 查询支持的方法 | 部分服务器返回允许的方法 |
HTTP/HTTPS 回顾
基础知识05讲过 TLS 基础——HTTPS 是 HTTP over TLS,在 HTTP 下面加了一层加密。探测时要同时考虑 HTTP 和 HTTPS——有些子域只开 HTTP(没配证书),有些只开 HTTPS(HTTP 自动重定向到 HTTPS)。
是什么
决定用什么协议(HTTP/HTTPS)、什么方法(GET/HEAD)、什么顺序探测清洗后的子域列表。
为什么
不同策略的覆盖面和效率不同:
| 策略 | 覆盖 | 效率 | 遗漏风险 |
|---|---|---|---|
| http-first | 先 HTTP,自动重定向到 HTTPS | 中 | 部分只开 HTTPS 的可能漏(如果重定向关闭) |
| https-only | 只测 HTTPS | 高 | 只开 HTTP 的漏掉 |
| http-only | 只测 HTTP | 高 | 只开 HTTPS 的漏掉 |
怎么做
三种策略对比:
| 策略 | 怎么做 | 适合场景 |
|---|---|---|
| http-first | 先请求 HTTP(80),如果返回 3xx 重定向到 HTTPS,自动跟随 | 不确定目标开了什么,想全覆盖 |
| https-only | 只请求 HTTPS(443),忽略 HTTP | 确定目标都开了 HTTPS,或只关心 HTTPS |
| http-only | 只请求 HTTP(80),不测 HTTPS | 目标只开 HTTP,或历史快照分析 |
推荐策略:http-first——先 HTTP,自动重定向到 HTTPS。覆盖面最广。
技巧
| 技巧 | 做法 | 价值 |
|---|---|---|
| 自动跟随重定向 | 客户端配置自动跟随 3xx | 不漏掉 HTTPS 子域 |
| UA 伪装 | 用常见浏览器 UA | 避免被 WAF 按非浏览器 UA 拦截 |
| 超时控制 | 连接超时 5s,读取超时 10s | 避免慢响应拖慢批量探测 |
| HEAD 优先 | 批量探测先用 HEAD,快的先过 | 提高效率,再对存活的做 GET |
注意事项
| 事项 | 说明 |
|---|---|
| HTTPS 证书错误要忽略 | 自签证书或过期证书不代表服务不存在——忽略证书错误继续探测 |
| 部分子域只开 HTTP | 没配 HTTPS 的子域,https-only 策略会漏掉 |
| 部分子域只开 HTTPS | 强制 HTTPS 的子域,http-only 策略会漏掉 |
| HEAD 可能被拒 | 部分服务器不接受 HEAD 请求——返回 405,要切 GET 重试 |
7.2 状态码实战语义
前置知识
HTTP 状态码分类回顾
HTTP 状态码(Status Code)是服务器响应的第一行数字,表示请求结果:
| 分类 | 含义 | 典型状态码 |
|---|---|---|
| 1xx | 信息 | 101(协议切换) |
| 2xx | 成功 | 200、201、204 |
| 3xx | 重定向 | 301、302、307 |
| 4xx | 客户端错误 | 401、403、404、405 |
| 5xx | 服务端错误 | 500、502、503 |
是什么
从 HTTP 状态码判断子域的挖掘价值——是正常服务、管理后台、还是空站。
为什么
状态码暴露了服务状态:
| 状态码 | 意味着 | 挖掘价值 |
|---|---|---|
| 200 | 正常服务 | 高——有可探测的接口和页面 |
| 401 | 需要认证 | 高——有登录入口,可尝试爆破 |
| 403 | 禁止访问 | 高——可能是管理后台,也可能是 WAF |
| 404 | 不存在 | 低——可能是空站,也可能是默认 404 页面 |
| 500 | 服务器内部错误 | 中——后端有异常,可能暴露调试信息 |
| 502 | 网关错误 | 中——后端服务故障,可能暴露真实后端 |
| 301/302 | 重定向 | 中——重定向链可能暴露新子域 |
怎么做
2xx(成功):
| 状态码 | 含义 | 处理 |
|---|---|---|
| 200 | 正常响应 | 高价值——记录页面标题、响应体大小 |
| 201 | 资源创建成功 | 可能是 API 接口 |
| 204 | 无内容 | 可能是 API 接口,返回空 body |
3xx(重定向):
| 状态码 | 含义 | 处理 |
|---|---|---|
| 301 | 永久重定向 | 记录 Location 头,提取目标子域 |
| 302 | 临时重定向 | 记录 Location 头,提取目标子域 |
| 307 | 保持方法重定向 | 同 302 |
4xx(客户端错误):
| 状态码 | 含义 | 处理 |
|---|---|---|
| 401 | 需要认证 | 高价值——有登录入口,记录 WWW-Authenticate 头 |
| 403 | 禁止访问 | 高价值——可能是管理后台或 WAF,要重试 |
| 404 | 不存在 | 低价值——但要看是不是自定义 404 页面 |
| 405 | 方法不允许 | 换 GET 重试 |
5xx(服务端错误):
| 状态码 | 含义 | 处理 |
|---|---|---|
| 500 | 内部错误 | 中价值——可能暴露调试信息、堆栈跟踪 |
| 502 | 网关错误 | 中价值——后端故障,可能暴露真实后端 IP |
| 503 | 服务不可用 | 低价值——服务维护中 |
技巧
| 技巧 | 做法 | 价值 |
|---|---|---|
| 401/403 重试 | 用不同 UA 重试 | 区分 WAF 拦截和真管理后台 |
| 404 不一定没用 | 看响应体是不是自定义 404 | 有些 404 页面暴露了框架信息 |
| 5xx 可能是真实后端 | 502/503 时看响应头 Server | 后端故障时可能暴露真实服务器信息 |
| 多方法探测 | GET 返回 405 时换 POST/PUT/DELETE | 发现隐藏的 API 接口 |
注意事项
| 事项 | 说明 |
|---|---|
| WAF 干扰 | WAF 可能对所有非浏览器 UA 返回 403——要换 UA 重试 |
| CDN 缓存干扰 | CDN 缓存了 404 页面——实际后端可能不是 404 |
| 状态码可能变化 | 第一次 503 的子域,重试可能变 200——服务恢复了 |
| 默认页面 | 新部署的服务可能返回 200 但内容是默认欢迎页 |
7.3 重定向链跟踪
前置知识
HTTP 重定向机制
HTTP 重定向(Redirection)是服务器告诉客户端"你要的资源不在这里,去那个地址"。机制是服务器返回 3xx 状态码,在响应头Location字段里写上新地址。客户端按Location重新请求——可能又是一轮 3xx——形成链条。
重定向链概念
重定向链(Redirect Chain)是指一连串的 3xx 重定向:A → B → C → D。链条的起点是原始 URL,终点是最终返回非 3xx 的页面。链条中间的每一跳可能是一个新子域。
关键认知:重定向链是 HTTP 探测里"被动发现新子域"的机会。原始子域
old.example.com可能重定向到new.example.com——new是之前没发现过的子域。跟踪链条的每一跳,从 Location 头里提取子域名,是 HTTP 探测的副产物。
是什么
跟踪 3xx 重定向链,从链条中间节点的 Location 头里提取新子域名。
为什么
重定向链可能暴露新子域——A 重定向到 B,B 是未发现的子域。常见场景:旧域名重定向到新域名、HTTP 重定向到 HTTPS、未认证重定向到登录页、子域名重定向到主站。
怎么做
第一步:自动跟随重定向
配置 HTTP 客户端自动跟随 3xx 重定向,记录每一跳:
| 跳数 | URL | 状态码 | Location |
|---|---|---|---|
| 1 | http://old.example.com | 301 | https://new.example.com |
| 2 | https://new.example.com | 302 | https://www.example.com/login |
| 3 | https://www.example.com/login | 200 | —(终点) |
第二步:记录每一跳的 URL
从每一跳的 Location 头里提取 URL,解析出子域名:
| 跳数 | Location 头 | 提取的子域 |
|---|---|---|
| 1 | https://new.example.com | new.example.com(新发现) |
| 2 | https://www.example.com/login | www.example.com(已有) |
第三步:从中间节点提取子域名
把发现的新子域加入已有列表,进入阶段4进阶发现做递归。
技巧
| 技巧 | 做法 | 价值 |
|---|---|---|
| 多级重定向跟踪 | 跟踪到最终非 3xx 页面 | 只看第一跳会漏掉后面的 |
| JavaScript 跳转检测 | 看响应体有没有location.href或meta refresh | HTTP 客户端不跟 JS 跳转,要单独检测 |
| 认证重定向 | 未登录重定向到登录页 | 登录页域名可能是新子域 |
| 对比新旧子域 | 重定向链里的子域和已有列表对比 | 只提取新子域 |
注意事项
| 事项 | 说明 |
|---|---|
| 循环重定向 | A→B→A 的循环——要设最大跳数(通常 10 跳) |
| JavaScript 跳转 | HTTP 客户端不执行 JS——location.href跳转检测不到 |
| 登录重定向干扰 | 未登录全部重定向到登录页——登录页子域反复出现 |
| CDN 重定向 | CDN 根据地理位置重定向到不同节点——不是新子域 |
7.4 TLS 证书二次分析
前置知识
TLS 证书回顾
基础知识05讲过 TLS 基础——HTTPS 握手时服务器返回证书,证书里有 SAN(Subject Alternative Name)列表,列出这张证书覆盖的所有域名。
SAN 二次发现概念
阶段2被动发现用 CT Logs 查证书 SAN——查的是公开证书日志里历史签发的证书。这里做的是 HTTPS 握手时实时拿证书——查的是当前服务器实际使用的证书。两者数据来源不同:
| 对比 | CT Logs(阶段2) | TLS 握手(阶段6) |
|---|---|---|
| 数据来源 | 公开证书日志 | 实时握手获取 |
| 覆盖 | 所有签发过的证书 | 服务器当前用的证书 |
| 时间维度 | 历史(包括已过期的) | 当前 |
| 发现价值 | 大范围覆盖 | 小范围,但更实时 |
CT Logs 覆盖历史所有证书,TLS 握手只拿当前证书——为什么要再查?因为有些证书不在 CT Logs 里(自签证书、内部 CA 签发的证书、未提交到 CT 的证书),只有 HTTPS 握手时才暴露。
自签证书与证书过期
| 证书类型 | 说明 | 挖掘价值 |
|---|---|---|
| CA 签发 | 公开 CA 签发,在 CT Logs 里 | 阶段2 已覆盖 |
| 自签证书 | 服务器自己签的,不在 CT Logs 里 | 阶段2 查不到——只有 TLS 握手能发现 |
| 内部 CA 签发 | 组织内部 CA 签发,不公开 | 阶段2 查不到——TLS 握手能发现 |
| 过期证书 | 证书已过期,但服务还在用 | 证书 SAN 仍可提取 |
关键认知:TLS 证书二次分析的核心价值是发现"CT Logs 没有的证书"。自签证书和内部 CA 签发的证书不在公开日志里,只有 HTTPS 握手时才暴露——这些往往是内部服务,价值更高。
是什么
在 HTTP 探测时分析 HTTPS 握手返回的 TLS 证书,从 SAN 列表里发现新子域。
为什么
| 证书来源 | 阶段2 CT Logs | 阶段6 TLS 握手 |
|---|---|---|
| 公开 CA 签发 | ✓ | ✓ |
| 自签证书 | ✗ | ✓ |
| 内部 CA 签发 | ✗ | ✓ |
| 过期证书 | ✓(历史有) | ✓(仍在用) |
TLS 握手能发现 CT Logs 覆盖不到的证书——自签证书和内部 CA 证书。
怎么做
第一步:抓取 HTTPS 响应的证书
对每个开 HTTPS 的子域做 TLS 握手,抓取服务器返回的证书。
第二步:提取 SAN 列表
从证书的 Subject Alternative Name 字段提取所有域名:
| 子域 | 证书 SAN |
|---|---|
api.example.com | api.example.com,admin.example.com,internal.example.com |
第三步:对比已有子域列表
| SAN 里的域名 | 已有列表 | 处理 |
|---|---|---|
api.example.com | 已有 | 跳过 |
admin.example.com | 没有 | 新发现,加入列表 |
internal.example.com | 没有 | 新发现,加入列表 |
技巧
| 技巧 | 做法 | 价值 |
|---|---|---|
| 自签证书更真实 | 自签证书往往是内部服务 | 内部服务价值高 |
| 证书过期≠下线 | 过期证书的子域可能仍在用 | 不要因过期就丢弃 |
| SNI 影响 | 不带 SNI 的握手可能返回默认证书 | 带正确 SNI 握手拿真实证书 |
| 通配符证书识别 | SAN 只有*.example.com的不暴露具体子域 | 跳过通配符证书 |
注意事项
| 事项 | 说明 |
|---|---|
| 通配符证书不暴露具体子域 | SAN 只有*.example.com——和 CT Logs 一样不暴露 |
| CDN 证书干扰 | CDN 节点返回 CDN 的证书,不是目标的——SAN 是 CDN 的域名 |
| 部分服务不发证书 | 只开 HTTP 的服务没有证书 |
| 证书可能随时更换 | 证书有有效期,过段时间可能换了新证书 |
7.5 价值分级体系
前置知识
攻击面概念
攻击面(Attack Surface)是指一个系统暴露给攻击者的所有入口点。子域名是攻击面的一部分——每个子域可能暴露不同的入口:登录页(可爆破)、API 接口(可测注入)、管理后台(高权限)、静态资源(低价值)、调试页面(信息泄露)。价值分级就是评估每个子域暴露了什么类型的攻击面。
是什么
根据探测结果(状态码 + CNAME + IP 归属 + 标题)对子域做价值分级,帮你分配精力。
为什么
不是所有子域都值得深入。100 个 DNS 存活的子域里,可能只有 20 个是高价值目标。分级帮你把精力集中在高价值目标上,不在低价值目标上浪费时间。
怎么做
五级分级:
| 等级 | 定义 | 典型特征 |
|---|---|---|
| 高价值 | 管理后台、API 接口、认证服务 | 200 + 标题含 admin/console/dashboard;401/403 |
| 中价值 | 业务功能页面、内部服务 | 200 + 标题含业务关键词;500(可能泄露调试信息) |
| 低价值 | 静态资源、CDN 缓存 | 200 + 响应体小 + 静态文件;CNAME 指向 CDN |
| 信息价值 | 空站、已下线、自定义 404 | 404;502/503;200 但内容是默认页 |
| CDN 后资产 | IP 归属 CDN,看不到真实后端 | CNAME 指向 CDN;IP 归属 CDN ASN |
判定矩阵(状态码 × CNAME 类型 × 标题关键词 → 等级):
| 状态码 | CNAME 类型 | 标题关键词 | 等级 |
|---|---|---|---|
| 200 | 无 CNAME(自有 IP) | admin/console/dashboard | 高 |
| 200 | 无 CNAME(自有 IP) | api/swagger/graphql | 高 |
| 401/403 | 无 CNAME(自有 IP) | 任意 | 高 |
| 200 | 无 CNAME(自有 IP) | 业务关键词 | 中 |
| 500 | 无 CNAME(自有 IP) | 任意 | 中 |
| 200 | CDN | 任意 | 低或 CDN 后 |
| 404 | 任意 | 任意 | 信息 |
| 502/503 | 无 CNAME | 任意 | 中(后端故障) |
| 任意 | 悬挂 DNS | 任意 | 高(可接管) |
技巧
| 技巧 | 做法 | 价值 |
|---|---|---|
| 多维度综合分级 | 状态码 + CNAME + IP 归属 + 标题 + 响应体大小 | 单一维度会误判 |
| 标题关键词匹配 | 维护高价值关键词表(admin/api/console/swagger) | 快速识别高价值目标 |
| 响应体大小对比 | 和默认 404 页面大小对比 | 识别自定义 404 |
| CDN 判断要准 | IP 归属 ASN 判断,不能只看 CNAME | 部分 CDN 用自有 CNAME |
注意事项
| 事项 | 说明 |
|---|---|
| CDN 判断要准确 | IP 归属 CDN ASN 才是 CDN 后资产——CNAME 不一定指向 CDN |
| 动态服务状态码变化 | 第一次 503 的子域,重试可能变 200——服务恢复了 |
| 自定义 404 | 返回 200 但内容是"not found"——要对比响应体 |
| 分级是快照 | 当前是低价值不代表以后是——服务可能更新 |
7.6 阶段输出
输出1:带价值分级的子域列表
| 字段 | 说明 | 示例 |
|---|---|---|
| 子域名 | 探测过的子域名 | admin.example.com |
| 协议 | HTTP/HTTPS | HTTPS |
| 状态码 | HTTP 响应码 | 401 |
| 标题 | 页面标题 | Admin Login |
| CNAME 链 | CNAME 记录 | 无 |
| IP 归属 | IP 的 ASN | AS37963(自有) |
| 价值等级 | 高/中/低/信息/CDN 后 | 高 |
| 备注 | 补充信息 | 可能是管理后台 |
输出2:高价值目标清单
| 字段 | 说明 | 示例 |
|---|---|---|
| 子域名 | 高价值子域 | admin.example.com |
| 价值原因 | 为什么高价值 | 401 + 标题含 admin |
| 建议动作 | 下一步做什么 | 尝试登录爆破 |
| 风险提示 | 注意什么 | 可能有 WAF |
输出3:CDN 后资产清单
| 字段 | 说明 | 示例 |
|---|---|---|
| 子域名 | CDN 后的子域 | cdn.example.com |
| CDN 名称 | CDN 厂商 | Cloudflare |
| 真实 IP 状态 | 是否找到真实 IP | 未找到 |
| 建议动作 | 下一步做什么 | CDN 绕过尝试 |
输出4:新发现子域
| 字段 | 说明 | 示例 |
|---|---|---|
| 子域名 | 新发现的子域 | new.example.com |
| 发现方法 | 怎么发现的 | 重定向链 / TLS 证书 SAN |
| 来源子域 | 从哪个子域发现的 | old.example.com重定向链 |
| 处理 | 下一步 | 加入列表,进入阶段4递归 |
7.7 与其他阶段的衔接
输出流向
带价值分级的子域列表 ──→ 阶段7:输出与监控(归档) 高价值目标清单 ──→ 阶段7:输出与监控(重点跟踪) CDN 后资产清单 ──→ 后续 CDN 绕过章节 新发现子域 ──→ 阶段4:进阶发现(回路,做递归)新发现子域的回路
HTTP 探测可能发现新子域——重定向链和 TLS 证书 SAN 都是新子域的来源:
| 来源 | 怎么发现 | 回路 |
|---|---|---|
| 重定向链 | Location 头里的子域 | 回到阶段4进阶发现做递归 |
| TLS 证书 SAN | 证书 SAN 里的子域 | 回到阶段4进阶发现做递归 |
清洗没解决的问题
| 清洗解决了 | HTTP 探测解决 |
|---|---|
| DNS 是否存活 | HTTP 是否存活 |
| 是否通配符假阳性 | 是什么状态码 |
| CNAME 链终点 | 重定向链指向哪里 |
| IP 是否 CDN | 证书 SAN 有没有新子域 |
| — | 这个子域值不值得打 |
CDN 后资产的去向
CDN 后资产在 HTTP 探测阶段只能标注——IP 是 CDN 的,看不到真实后端。后续的 CDN 绕过方法(历史 DNS、邮件服务器、子域名接管等)留到专门的章节。
关键认知:HTTP 探测是流程里"从存报到有价值"的转折点。前五步收集的是"DNS 层面的资产清单",HTTP 探测把它变成"HTTP 层面的攻击面清单"。价值分级后的高价值目标清单,才是真正进入漏洞挖掘阶段的起点。
下一篇:第8章——踩坑实录,实战中的陷阱与预防。