子域名挖掘前置基础 05:Web 与网络层
本篇定位:前面四篇讲的都是 DNS 层——域名怎么解析、记录是什么、委派怎么运作。但子域名解析到 IP 之后,背后跑的是 Web 和网络服务。本篇讲子域名背后的 Web 与网络层——CDN、负载均衡、网络架构图、HTTP/HTTPS 与 TLS 基础。这些知识决定了你拿到的 IP 是不是目标真实服务器。
阅读建议:本篇只讲基础概念和原理。CDN 绕过技巧、TLS 证书挖掘价值这些"实战方法"留到后续子域名搜集方法章节。
一、CDN 介绍与 CDN 调度
子域名挖掘里有一个高频问题——为什么你nslookup拿到的 IP,往往不是目标的真实服务器?答案就是 CDN。
1.1 什么是 CDN
CDN(Content Delivery Network,内容分发网络)是通过全球分布的边缘节点缓存和加速内容交付的架构。
要理解 CDN,先理解没有 CDN 时的痛点:用户访问www.example.com,DNS 解析到源站 IP(比如在美国的一台服务器),全球用户都打到这台服务器——离得远的用户延迟高、服务器压力大、网络一旦中断所有人都访问不了。
CDN 的解法是在源站和用户之间加一层"缓存节点":
| 角色 | 位置 | 作用 |
|---|---|---|
| 源站 | 目标企业自己的服务器 | 真正的内容来源,CDN 的"上游" |
| 边缘节点 | CDN 服务商全球分布的节点 | 缓存源站内容,用户就近访问 |
| 用户 | 任意地理位置 | 访问时被调度到最近的边缘节点 |
工作流程是:用户请求 → 被调度到最近的边缘节点 → 边缘节点缓存命中就直接返回、未命中就回源站取一份缓存起来再返回。这样源站 IP 被隐藏在 CDN 后面,用户看到的是边缘节点的 IP。
关键认知:CDN 的本质是"中间缓存层"。源站 IP 被隐藏——这就是为什么子域名挖掘里,拿到一个走 CDN 的子域名 IP,不能直接当成目标真实 IP 去扫端口。
1.2 CDN 的调度核心:智能 DNS
CDN 怎么知道用户在哪儿、该返回哪个节点 IP?靠的是智能 DNS。
普通 DNS 查询返回的是固定 IP,不管你从哪查都一样。但 CDN 的 DNS 不一样——它返回哪个 IP,取决于查询者的来源 IP。这就是"智能"二字的含义:DNS 应答会根据查询者地理位置变化。
从挖掘者视角解读:
| 角色 | 作用 | 挖掘意义 |
|---|---|---|
| 智能 DNS(红) | 根据用户地理位置返回最近的边缘节点 IP | 你拿到的 IP 取决于你从哪查——北京查和纽约查不同 |
| 边缘节点(橙) | 缓存层,用户看到的 IP | 直接扫端口没意义,你扫的是 CDN 节点不是目标 |
| 源站(绿) | 真实后端服务器 | 找到源站 IP 是绕过 CDN 的核心目标 |
1.3 CDN 调度对子域名挖掘的影响
| 影响点 | 说明 |
|---|---|
| 地理位置差异 | 在北京查和纽约查同一个子域名,返回的 IP 不同 |
| 多 IP 结果 | 同一子域名在不同时间解析到不同 IP |
| 不能直接扫端口 | 扫的是 CDN 节点,不是目标 |
| 必要时多地域验证 | 用多个地理位置的 DNS 节点交叉查询 |
关键认知:识别 CDN 不是为了"绕过"这一步就搞定,而是为了给每个子域打上"是否走 CDN"的标记。这个标记决定了后续每个子域的处理方式——走 CDN 的不能直接扫端口,没走 CDN 的可以直接扫。
1.4 CDN 检测的基础信号(只讲概念)
如何判断一个子域名是否走了 CDN?基础信号有:
| 信号类型 | 说明 |
|---|---|
| CNAME 链含 CDN 关键词 | cloudflare、akamai、fastly、cloudfront、wangsu(网宿) |
| 多地域解析不同 IP | 在不同地理位置查同一域名,返回不同 IP |
| IP 归属是 CDN 服务商 | IP 归属查显示运营商是 CDN 而非目标企业 |
| 响应头含 CDN 特征 | cf-ray(Cloudflare)、x-akamai、x-amz-cf-id |
CDN 绕过的具体思路(历史 DNS、邮件服务器、SSL 证书等)留到后续"主动探测"章节展开。
二、负载均衡
CDN 是公网入口层的加速,再往里就是负载均衡。负载均衡决定了"一个域名背后可能挂了多少台服务器"。
2.1 什么是负载均衡
负载均衡(Load Balancing)是把进入的流量分发到多台后端服务器的技术。目的是分摊压力、提高可用性、做横向扩展。
要理解负载均衡,先理解没有它时的痛点:一台服务器扛不住高峰流量、一旦宕机服务就中断、没法动态扩容。负载均衡的解法是在服务器集群前面加一个"分发器"——所有请求先到分发器,由它按一定策略转发给后端某一台服务器。用户看到的只是分发器的 IP,后端服务器对用户不可见。
2.2 两种负载均衡模式
这两种模式的根本区别是工作在 OSI 模型的哪一层——四层只看网络层信息(IP+端口),七层会拆开 HTTP 请求看内容。
| 模式 | 工作层级 | 看什么做分发 | 挖掘意义 |
|---|---|---|---|
| L4(四层 LB) | 传输层 | 只根据 IP+端口转发,不解析 HTTP 内容 | 同一 IP 上可能承载多种协议(HTTP、MySQL、Redis 都可能) |
| L7(七层 LB) | 应用层 | 解析 HTTP 请求,根据 Host 头或 URL 路径分发 | 同一 IP+端口上可能托管多个子域名——IP 反查能发现更多子域 |
简单记忆:L4 只看信封(IP+端口),L7 拆开信封看内容(Host 头、URL)。L7 能基于 Host 头分发是关键——这意味着一个 IP 可以托管多个子域名,是 IP 反查发现新子域的原理基础。
2.3 常见负载均衡实现
| 类型 | 说明 | 典型实现 | 特点 |
|---|---|---|---|
| 硬件负载均衡 | 专用硬件设备 | F5 BIG-IP | 性能强、贵、企业级 |
| 软件负载均衡 | 跑在通用服务器上 | LVS、Nginx、HAProxy | 灵活、成本低、最常见 |
| 云负载均衡 | 云厂商提供 | 阿里云 SLB、AWS ELB/ALB | 弹性伸缩、按量付费 |
2.4 负载均衡的调度算法(基础)
分发器用什么策略选后端服务器?常见的几种:
| 算法 | 怎么选 | 对挖掘的影响 |
|---|---|---|
| 轮询 | 按顺序一台一台轮 | 多次请求可能打到不同后端 |
| 最少连接 | 选当前连接数最少的 | 高负载时倾向打到空闲服务器 |
| IP Hash | 同一来源 IP 固定打到同一台 | 同一 IP 的请求总到同一后端,行为稳定 |
| 加权 | 按权重比例分发 | 配置强的后端分得多 |
挖掘关注:负载均衡意味着同一域名背后有多台后端、同一域名多次请求可能返回不同内容。这是正常的,不是异常——做 HTTP 探测时要意识到这一点。
2.5 对子域名挖掘的意义
| 影响点 | 说明 |
|---|---|
| 一个域名对应多个 IP | 负载均衡会让你拿到多个 IP,都是 LB 的,不是后端的 |
| 一个 IP 承载多个子域 | L7 LB 下,一个 IP 可能托管多个子域名——IP 反查能发现更多子域 |
| 后端服务器不可见 | LB 后面的真实服务器 IP 从外部看不到,是正常的 |
关键认知:负载均衡让你看到的 IP 是 LB 的公网 IP,不是后端服务器的真实 IP。这和 CDN 一样——你拿到的是"入口",不是"目标"。
三、网络架构图:从用户到后端的全景
把 CDN 和负载均衡串起来,就是一个完整的网络架构。这一节用一张图展示从用户到后端的完整链路。
3.1 整体网络架构图
真实世界的 Web 系统不只有 CDN 和 LB,中间还可能有 WAF、反向代理等层。下面是一张更完整的链路图:
3.2 每一层的角色
| 层 | 作用 | 是否一定存在 | 你能看到的 |
|---|---|---|---|
| DNS 系统 | 域名→IP 翻译 | 一定 | 解析出的 IP |
| WAF | 检测拦截恶意请求 | 可选 | 有时通过响应头能识别 |
| CDN 节点 | 缓存、加速、隐藏源站 | 可选 | 你拿到的 IP 经常是这里的 |
| 负载均衡器 | 流量分发到后端 | 大型站点常有 | LB 的公网 IP |
| 反向代理 | 路由、限流、鉴权 | 常与 LB 合一 | 一般看不到 |
| 后端服务器集群 | 真正处理业务逻辑 | 一定 | 从外部看不到 |
3.3 为什么你拿到的 IP 往往不是目标真实 IP
关键认知:你
ping、nslookup看到的 IP 是 CDN 节点或负载均衡器的,不是目标后端服务器的。这就是为什么 IP 归属分析如此重要——你必须先判断"这个 IP 是 CDN 的还是目标的",否则后续的端口扫描、漏洞扫描全打在 CDN/LB 上,毫无意义。
3.4 不是所有网站都走全套链路
上面的架构图是"完整链路",但现实中不同规模的网站链路不同:
| 网站规模 | 典型链路 | 你拿到的 IP 性质 |
|---|---|---|
| 小网站/个人站 | 浏览器 → 后端服务器 | 真实服务器 IP,可直接扫端口 |
| 中型企业站 | 浏览器 → LB → 后端集群 | LB 的 IP,不是后端真实 IP |
| 大型站点 | 浏览器 → CDN → WAF → LB → 后端 | CDN 节点 IP,需要绕过找源站 |
| 云原生应用 | 浏览器 → CDN → 云 LB → K8s → Pod | CDN 或云 LB 的 IP |
关键认知:拿到一个子域的 IP 后,第一件事不是扫端口,而是判断"这个 IP 处于链路的哪一层"。不同层级的 IP,后续处理方式完全不同。
3.5 子域名挖掘里的"真实 IP"问题
子域名挖掘能发现子域名和解析 IP,但这些 IP 的"性质"各不相同:
| IP 性质 | 怎么判断 | 后续处理 |
|---|---|---|
| CDN 节点 | CNAME 含 CDN 关键词、IP 归属是 CDN | 不扫端口,要绕 CDN 找源站 |
| 负载均衡器 | IP 归属是云厂商、响应特征 | 可扫端口,但打的是 LB |
| 真实服务器 | IP 归属是目标企业、非 CDN | 高价值,直接扫端口 |
| 共享主机 | 一个 IP 上有多个域名 | IP 反查发现更多子域 |
四、HTTP/HTTPS 与 TLS 证书基础
子域名发现不只是 DNS 的事。一个子域名有 A 记录,不代表它上面跑着 Web 服务——可能只是一个邮件服务器、一个 VPN 入口。你需要做 HTTP 探测来判断"这个子域名上到底有没有服务、是什么服务"。
4.1 HTTP 与 HTTPS 的基本区别
| 协议 | 说明 | 端口 | 安全性 |
|---|---|---|---|
| HTTP | 超文本传输协议,明文传输 | 80 | 内容可被中间人看到、篡改 |
| HTTPS | HTTP + TLS 加密 | 443 | 内容加密,防窃听防篡改 |
两者的本质区别是有没有 TLS 这层加密。HTTP 的请求行、请求头、请求体全是明文,任何能抓到包的人都能看到你访问了什么、提交了什么。HTTPS 在 HTTP 下面加了一层 TLS,先把数据加密再传,中间人只能看到加密后的密文。
挖掘关注:子域名挖掘做 HTTP 探测时,同一个子域名要同时试 80 和 443 端口——有些站点只在 80 提供 HTTP,有些只在 443 提供 HTTPS,还有些 80 会 301 跳转到 443。
4.2 HTTPS 的大致流程
本篇只讲大致流程,不讲握手细节。TLS 握手涉及密钥交换、加密套件协商等,这些对子域名挖掘不是核心。我们关心的是"这个流程里有哪些信息可以收集"。
每一步发生了什么:
| 步骤 | 做什么 | 信息暴露 |
|---|---|---|
| 1. ClientHello | 浏览器告诉服务器"我要访问哪个域名"(SNI)、支持哪些加密套件 | SNI 明文传输——中间人能看到你要访问的域名 |
| 2. ServerHello + 证书 | 服务器返回选定的加密套件、服务器证书 | 证书含域名、SAN、颁发机构、有效期——这些都能看到 |
| 3. 密钥交换 | 双方协商出对称密钥 | 后续内容用这个密钥加密 |
| 4. 加密请求 | 浏览器发送加密后的 HTTP 请求 | 中间人看不到内容 |
| 5. 加密响应 | 服务器返回加密后的 HTTP 响应 | 中间人看不到内容 |
关键认知:HTTPS 加密的是步骤 4 和 5 的内容,但步骤 1 的 SNI 和步骤 2 的证书是明文传输的。这就是为什么你能从网络流量里抓到 TLS 证书信息——证书本身不是秘密。
4.3 TLS 流程里能收集的信息
| 信息 | 在哪 | 挖掘价值 |
|---|---|---|
| SNI | ClientHello 里 | 暴露客户端要访问的域名 |
| 证书域名 | 证书的 CN 字段 | 这个 IP 上跑着哪个域名的服务 |
| SAN | 证书的 Subject Alternative Name | 一张证书可能覆盖多个子域名 |
| 颁发机构 | 证书的 Issuer 字段 | Let’s Encrypt 说明自动化部署,自签名说明测试环境 |
| 有效期 | 证书的 Not Before / Not After | 刚签发说明活跃部署,过期未续签说明被遗忘的服务 |
4.4 SNI 是什么
SNI(Server Name Indication,服务器名称指示)是 TLS 握手时客户端告诉服务器"我要访问哪个域名"的扩展字段。
要理解 SNI 解决什么问题,先看没有它的情况:一台服务器(一个 IP)上托管了a.com和b.com两个 HTTPS 站点,每张证书不同。但 TLS 握手时服务器不知道你要访问哪个域名——它应该返回哪张证书?没法决定。早期 TLS 没办法解决,只能"一个 IP 配一张证书"。
SNI 的解法:客户端在 ClientHello 里带上"我要访问a.com",服务器据此返回a.com的证书。这样一个 IP 上就能托管多个 HTTPS 站点。
挖掘意义:SNI 让"一个 IP 托管多域名"成为可能。反过来,你拿一个 IP 去查所有指向它的域名(IP 反查),可能翻出同一台服务器上托管的、目标企业其他业务线的子域。
4.5 SAN 是什么
SAN(Subject Alternative Name,证书主体可选名称字段)是证书里列出"这张证书覆盖哪些域名"的字段。
要理解 SAN 解决什么问题,先看没有它的情况:一张证书只能绑定一个域名(CN 字段写的那个)。你有api.example.com、staging-api.example.com、admin-api.example.com三个子域要上 HTTPS,就要签三张证书、配三次。SAN 的解法:把多个域名都写进一张证书的 SAN 字段里,一张证书覆盖多个子域。
挖掘意义:一张证书的 SAN 里可能藏着多个你不知道的子域名。你查一张
api.example.com的证书,SAN 里可能写着staging-api.example.com、admin-api.example.com——这些是你之前不知道的子域名。这就是"证书透明度日志"挖掘子域名的原理。
4.6 HTTP 状态码的语义
不是背状态码含义,而是理解每个状态码对挖掘者意味着什么:
| 状态码 | 通用含义 | 对挖掘者的意义 |
|---|---|---|
| 200 | 正常响应 | 服务存在,可继续探测 |
| 301/302 | 重定向 | 重定向链可能暴露新的子域名 |
| 401 | 未授权 | 需要登录认证——往往是登录页或受限接口,价值高 |
| 403 | 禁止访问 | 有内容但你没权限——往往是管理后台、内部系统,价值最高 |
| 404 | 不存在 | 这个路径没有服务,但也可能是 WAF 拦截的假信号 |
| 502/503 | 后端故障 | 服务可能临时下线,但域名仍在,值得监控 |
关键认知:401/403 之所以价值高,是因为它说明"这里有东西,只是不让你看"——这和 404"确实没有"完全不同。401/403 往往指向管理后台或内部接口,是后续重点突破目标。另外 301/302 重定向链可能暴露新的子域名:比如
app.example.com重定向到sso.example.com做登录——这个sso子域名可能不在你之前的列表里。
五、本篇小结
| 概念 | 一句话 |
|---|---|
| CDN | 源站和用户之间的缓存层,让你拿到的 IP 不是目标真实 IP |
| CDN 调度 | 智能 DNS 根据用户地理位置返回最近的边缘节点 IP |
| 负载均衡 | 在服务器集群前加分发器,你看到的是 LB 的 IP |
| L4 vs L7 | L4 只看 IP+端口,L7 看 HTTP 内容(含 Host 头) |
| 网络架构 | 浏览器 → DNS → WAF → CDN → LB → 反代 → 后端,真实 IP 藏最里 |
| 不同规模链路不同 | 小站直连后端,大站走全套链路,IP 性质不同 |
| HTTP/HTTPS | HTTP 明文、HTTPS 加密,子域名要 HTTP 探测判断有没有服务 |
| TLS 证书 | SNI 和证书明文传输,SAN 可能覆盖多个子域名 |
| SNI | 让一个 IP 托管多域名,IP 反查能发现更多子域 |
| 状态码 | 401/403 价值最高(“有但不让你看”),301/302 可能暴露新子域 |
下一篇我们讲云与基础设施——云架构、WAF、ASN。
附:本篇关键术语速查
| 术语 | 简明解释 |
|---|---|
| CDN | 内容分发网络,源站和用户之间的缓存层 |
| 源站 | CDN 背后的真实后端服务器 |
| 边缘节点 | CDN 的缓存节点,用户看到的 IP 是这里的 |
| 回源 | CDN 缓存未命中时,向源站发请求 |
| 智能 DNS | CDN 根据用户地理位置返回最近节点 IP 的 DNS |
| 负载均衡 | 在服务器集群前加分发器,分发流量到多台后端 |
| L4 负载均衡 | 工作在传输层,只看 IP+端口转发 |
| L7 负载均衡 | 工作在应用层,看 HTTP 内容(含 Host 头)转发 |
| 调度算法 | LB 选后端服务器的策略(轮询、最少连接、IP Hash 等) |
| 反向代理 | 位于 LB 和后端之间的中间层,做路由、限流、鉴权 |
| HTTP | 明文 Web 协议,端口 80 |
| HTTPS | HTTP + TLS 加密,端口 443 |
| TLS | 传输层安全协议,HTTPS 的加密基础 |
| SNI | TLS 握手时客户端告诉服务器要访问哪个域名,明文传输 |
| SAN | 证书覆盖的域名列表字段,一张证书可覆盖多个子域 |
| 证书透明度 | 公开记录所有签发证书的日志系统 |
| 状态码 | HTTP 响应码,标识请求结果 |