子域名挖掘前置基础 04:DNS 数据与记录
本篇定位 :前两篇讲了 DNS 怎么把域名翻译成 IP。本篇讲 DNS 里存了什么数据------记录类型、不同分级 DNS 服务器各存什么、树形结构与 Zone Delegation、通配符。这些是子域名挖掘最核心的基础知识,因为挖掘的本质就是在这些数据里找子域名。
阅读建议:本篇内容偏概念,但每个概念都直接关联挖掘方法。读的时候多想"这条知识在挖掘里能怎么用"。
一、DNS 记录类型:每种记录的情报价值
DNS 服务器存的数据,叫记录。不同类型的记录有不同的用途,对子域名挖掘也有不同的情报价值。不要去背每种记录的定义,而要从"这条记录能告诉我什么"的角度理解。
1.1 主要记录类型一览
| 记录类型 | 全称 | 作用 | 情报价值 |
|---|---|---|---|
| A | Address | 域名 → IPv4 地址 | 指向哪个 IP,判断是否走 CDN/云 |
| AAAA | IPv6 Address | 域名 → IPv6 地址 | 同 A,但是 IPv6 |
| CNAME | Canonical Name | 域名 → 另一个域名的别名 | 情报之王------暴露第三方服务依赖、潜在接管 |
| NS | Name Server | 域名 → 管理它的权威 NS | 揭示管理边界、子域是否独立 Zone |
| MX | Mail Exchange | 域名 → 邮件服务器 | 暴露邮件基础设施 |
| TXT | Text | 任意文本 | SPF 的 IP 段、Google/MS 验证、DMARC |
| SOA | Start of Authority | 区域权威起点 | 管理员邮箱、序列号(推断更新频率) |
| SRV | Service Record | 服务定位 | 暴露 SIP、XMPP、LDAP 等内部服务 |
| PTR | Pointer | IP → 域名(反向解析) | 从 IP 反查域名 |
| CAA | Certification Authority Authorization | 指定可签发证书的 CA | 暴露证书签发策略 |
1.2 各记录的挖掘价值详解
A / AAAA 记录
A 记录是最常见的------域名指向 IP。从挖掘者视角,A 记录的价值不在"这个 IP 是多少",而在"这个 IP 是什么性质":
| IP 性质 | 怎么判断 | 挖掘意义 |
|---|---|---|
| CDN 节点 | IP 归属查是 CDN 服务商 | 不能直接扫端口,要绕 CDN 找源站 |
| 云主机 | IP 归属查是云厂商 | 可能是目标自建,可扫端口 |
| 真实服务器 | IP 归属查是目标企业 | 高价值,直接扫端口 |
| 共享主机 | 一个 IP 上有多个域名 | IP 反查能发现更多子域 |
CNAME 记录(情报之王)
CNAME(Canonical Name,别名记录)告诉解析器"这个域名其实是另一个域名的马甲"。CNAME 暴露的信息量最大:
| CNAME 指向 | 推断出的架构 | 挖掘意义 |
|---|---|---|
*.cloudfront.net |
用了 CloudFront CDN | 走 CDN,要绕过 |
*.elb.amazonaws.com |
后端是 AWS 负载均衡 | 云架构,可能云资产延伸 |
*.s3.amazonaws.com |
对象存储 | 可能存在 Bucket 权限错配 |
*.github.io |
GitHub Pages 托管 | 可能存在子域名接管 |
*.vercel.app |
Vercel 托管 | 可能存在子域名接管 |
| 已弃用的 SaaS 域名 | 目标停止订阅但没删 DNS | 子域名接管漏洞 |
关键认知:每条 CNAME 都是一条架构线索。子域名挖掘工具通常会把 CNAME 链完整记录下来,作为判断目标架构的关键依据。
NS 记录(管理边界)
NS 记录揭示"这个域名归谁管"。从挖掘者视角:
| NS 情况 | 意义 |
|---|---|
| 子域 NS 和主域不同 | 由不同团队管理,安全配置可能有差异 |
| 子域 NS 指向外部服务商 | 用了第三方 DNS(如 CDN、云厂商) |
| 多个 NS 不同 | 不同子域用不同 DNS,暗示组织结构 |
关键认知:如果一个子域的 NS 和主域不同,说明它由不同团队管理,安全配置可能有差异------这种"边界地带"往往是防护薄弱处。
MX 记录(邮件基础设施)
MX 记录指定谁负责处理发往该域名的邮件。从挖掘者视角,MX 可能指向不在主域名下的邮件服务器子域,比如 mail-guardian.example.net------一个你完全不知道的域名。
TXT 记录(服务使用)
TXT 记录里藏了大量"服务使用证明":
| TXT 内容 | 暴露的信息 |
|---|---|
v=spf1 ip4:1.2.3.0/24 |
SPF 记录里的 IP 段,暴露发信服务器范围 |
google-site-verification=... |
用了 Google 服务 |
MS=... |
用了 Microsoft 服务 |
_dmarc |
DMARC 的 report URI 可能指向监控子域 |
SOA 记录(管理员信息)
SOA 里的邮箱地址和序列号能让你推断 DNS 更新频率------序列号跳跃式增长说明配置在频繁变动。
SRV 记录(内部服务)
SRV 记录里可能藏着 SIP、XMPP、LDAP 等内部服务的地址,这些子域往往是直接暴露内网服务的入口。
1.3 记录类型的 mindmap
#mermaid-svg-j4Xe3gkpS3mAQjft{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-j4Xe3gkpS3mAQjft .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-j4Xe3gkpS3mAQjft .error-icon{fill:#552222;}#mermaid-svg-j4Xe3gkpS3mAQjft .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-j4Xe3gkpS3mAQjft .marker{fill:#333333;stroke:#333333;}#mermaid-svg-j4Xe3gkpS3mAQjft .marker.cross{stroke:#333333;}#mermaid-svg-j4Xe3gkpS3mAQjft svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-j4Xe3gkpS3mAQjft p{margin:0;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge{stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .section--1 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section--1 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section--1 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section--1 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section--1 text{fill:#ffffff;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth--1{stroke-width:17;}#mermaid-svg-j4Xe3gkpS3mAQjft .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-0 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-0 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-0 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-0 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-0 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-0{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-0{stroke-width:14;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-1 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-1 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-1 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-1 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-1 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-1{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-1{stroke-width:11;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-2 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-2 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-2 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-2 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-2 text{fill:#ffffff;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-2{stroke-width:8;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-3 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-3 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-3 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-3 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-3 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-3{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-3{stroke-width:5;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-4 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-4 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-4 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-4 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-4 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-4{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-4{stroke-width:2;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-5 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-5 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-5 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-5 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-5 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-5{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-5{stroke-width:-1;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-6 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-6 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-6 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-6 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-6 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-6{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-6{stroke-width:-4;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-7 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-7 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-7 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-7 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-7 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-7{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-7{stroke-width:-7;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-8 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-8 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-8 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-8 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-8 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-8{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-8{stroke-width:-10;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-9 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-9 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-9 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-9 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-9 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-9{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-9{stroke-width:-13;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-10 rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-10 path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-10 circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-10 polygon,#mermaid-svg-j4Xe3gkpS3mAQjft .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-10 text{fill:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .node-icon-10{font-size:40px;color:black;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .edge-depth-10{stroke-width:-16;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled circle,#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:lightgray;}#mermaid-svg-j4Xe3gkpS3mAQjft .disabled text{fill:#efefef;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-root rect,#mermaid-svg-j4Xe3gkpS3mAQjft .section-root path,#mermaid-svg-j4Xe3gkpS3mAQjft .section-root circle,#mermaid-svg-j4Xe3gkpS3mAQjft .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-j4Xe3gkpS3mAQjft .section-root text{fill:#ffffff;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-root span{color:#ffffff;}#mermaid-svg-j4Xe3gkpS3mAQjft .section-2 span{color:#ffffff;}#mermaid-svg-j4Xe3gkpS3mAQjft .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-j4Xe3gkpS3mAQjft .edge{fill:none;}#mermaid-svg-j4Xe3gkpS3mAQjft .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-j4Xe3gkpS3mAQjft :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} DNS 记录类型
A / AAAA
::解析到哪个 IP
::判断是否走 CDN/云
CNAME
::别名指向
::暴露第三方服务依赖
::潜在子域名接管
NS
::管理边界
::子域是否独立 zone
MX
::邮件基础设施
::可能指向非主域的邮件服务器
TXT
::SPF 的 IP 段
::Google/MS 服务验证
::DMARC report URI
SOA
::管理员邮箱
::序列号推断更新频率
SRV
::SIP/XMPP/LDAP
::内部服务地址
二、不同分级 DNS 服务器的记录类型
上一节讲了"有哪些记录类型"。这一节讲"这些记录分别存在哪一级 DNS 服务器上"。理解这个,能帮你判断"去哪里查什么记录"。
2.1 各级 DNS 服务器存什么
| 服务器级别 | 存什么记录 | 例子 |
|---|---|---|
| 根服务器 | 所有 TLD 的 NS 指针 | .com 归 a.gtld-servers.net 管 |
| TLD 服务器 | 该 TLD 下所有二级域的 NS 指针 | example.com 归 ns1.example.com 管 |
| 权威服务器 | 自己管辖的 Zone 内所有记录 | example.com 的 A、CNAME、MX、TXT 等 |
| 递归解析器 | 缓存(不存权威数据,只暂存查过的) | 你刚查过的 api.example.com → 1.2.3.4 |
2.2 关键认知:记录存在哪一级
关键认知 :记录存在权威服务器上。根和 TLD 不存 A、CNAME 这些"最终记录",只存"指路用的 NS 记录"。递归解析器存的是缓存,不是权威数据。
这就意味着:
- 你想查
example.com的 A 记录 → 要问example.com的权威 NS - 你想查
example.com的 MX 记录 → 也要问example.com的权威 NS - 根和 TLD 都给不了你这些答案
2.3 各级 DNS 服务器的查询对应关系
#mermaid-svg-iEqUOjv1cWPC5U1j{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-iEqUOjv1cWPC5U1j .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iEqUOjv1cWPC5U1j .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iEqUOjv1cWPC5U1j .error-icon{fill:#552222;}#mermaid-svg-iEqUOjv1cWPC5U1j .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iEqUOjv1cWPC5U1j .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iEqUOjv1cWPC5U1j .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iEqUOjv1cWPC5U1j .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iEqUOjv1cWPC5U1j .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iEqUOjv1cWPC5U1j .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iEqUOjv1cWPC5U1j .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iEqUOjv1cWPC5U1j .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iEqUOjv1cWPC5U1j .marker.cross{stroke:#333333;}#mermaid-svg-iEqUOjv1cWPC5U1j svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iEqUOjv1cWPC5U1j p{margin:0;}#mermaid-svg-iEqUOjv1cWPC5U1j .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-iEqUOjv1cWPC5U1j .cluster-label text{fill:#333;}#mermaid-svg-iEqUOjv1cWPC5U1j .cluster-label span{color:#333;}#mermaid-svg-iEqUOjv1cWPC5U1j .cluster-label span p{background-color:transparent;}#mermaid-svg-iEqUOjv1cWPC5U1j .label text,#mermaid-svg-iEqUOjv1cWPC5U1j span{fill:#333;color:#333;}#mermaid-svg-iEqUOjv1cWPC5U1j .node rect,#mermaid-svg-iEqUOjv1cWPC5U1j .node circle,#mermaid-svg-iEqUOjv1cWPC5U1j .node ellipse,#mermaid-svg-iEqUOjv1cWPC5U1j .node polygon,#mermaid-svg-iEqUOjv1cWPC5U1j .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-iEqUOjv1cWPC5U1j .rough-node .label text,#mermaid-svg-iEqUOjv1cWPC5U1j .node .label text,#mermaid-svg-iEqUOjv1cWPC5U1j .image-shape .label,#mermaid-svg-iEqUOjv1cWPC5U1j .icon-shape .label{text-anchor:middle;}#mermaid-svg-iEqUOjv1cWPC5U1j .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-iEqUOjv1cWPC5U1j .rough-node .label,#mermaid-svg-iEqUOjv1cWPC5U1j .node .label,#mermaid-svg-iEqUOjv1cWPC5U1j .image-shape .label,#mermaid-svg-iEqUOjv1cWPC5U1j .icon-shape .label{text-align:center;}#mermaid-svg-iEqUOjv1cWPC5U1j .node.clickable{cursor:pointer;}#mermaid-svg-iEqUOjv1cWPC5U1j .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-iEqUOjv1cWPC5U1j .arrowheadPath{fill:#333333;}#mermaid-svg-iEqUOjv1cWPC5U1j .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-iEqUOjv1cWPC5U1j .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-iEqUOjv1cWPC5U1j .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iEqUOjv1cWPC5U1j .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-iEqUOjv1cWPC5U1j .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iEqUOjv1cWPC5U1j .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-iEqUOjv1cWPC5U1j .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-iEqUOjv1cWPC5U1j .cluster text{fill:#333;}#mermaid-svg-iEqUOjv1cWPC5U1j .cluster span{color:#333;}#mermaid-svg-iEqUOjv1cWPC5U1j 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-iEqUOjv1cWPC5U1j .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-iEqUOjv1cWPC5U1j rect.text{fill:none;stroke-width:0;}#mermaid-svg-iEqUOjv1cWPC5U1j .icon-shape,#mermaid-svg-iEqUOjv1cWPC5U1j .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iEqUOjv1cWPC5U1j .icon-shape p,#mermaid-svg-iEqUOjv1cWPC5U1j .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-iEqUOjv1cWPC5U1j .icon-shape .label rect,#mermaid-svg-iEqUOjv1cWPC5U1j .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iEqUOjv1cWPC5U1j .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-iEqUOjv1cWPC5U1j .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-iEqUOjv1cWPC5U1j :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 存: 所有 TLD 的 NS
返回: .com TLD 的 NS
存: .com 下所有二级域的 NS
返回: example.com 的 NS
存: example.com 的所有记录
返回: api 的 A 记录
查询: api.example.com 的 A 记录
根服务器
.com TLD 服务器
example.com 权威 NS
2.4 对子域名挖掘的意义
| 想查什么 | 去哪查 |
|---|---|
| 目标域名的 NS | 问 TLD(或递归解析器,它有缓存) |
| 目标域名的 A/CNAME/MX/TXT | 问目标域名的权威 NS |
| 子域是否存在 | 问目标域名的权威 NS(直接查,绕过缓存) |
| 目标域名有哪些子域 | 权威 NS 不直接给列表,要靠字典爆破、CT Logs 等 |
关键认知 :权威服务器不直接告诉你"我有哪些子域名"------DNS 协议没有"列表"功能。你必须用字典爆破、证书透明度日志、搜索引擎等手段去发现。这就是为什么子域名挖掘是一门"发现"的艺术,而不是"查询"的功夫。
三、DNS 树形结构与 Zone Delegation
DNS 本质上是一棵层级分明的树,根在顶部,越往下越具体。整棵树由"授权边界"切分成一个个 Zone(区域)。
3.1 DNS 的树形结构
DNS 的树不是"域名的树",而是"DNS 服务器 + Zone的树"------每一层服务器管一个 Zone,委派就是切分 Zone 的边界。
┌─────────────────────────────────────────────┐
│ 根 DNS 服务器(Root Servers) │
│ Zone: 根(存所有 TLD 的 NS 指针) │
└──────────────────────┬──────────────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌────────────┐ ┌────────────┐ ┌────────────┐
│ .com TLD │ │ .cn TLD │ │ .org TLD │
│ 服务器 │ │ 服务器 │ │ 服务器 │
│ Zone: .com │ │ Zone: .cn │ │ Zone: .org │
└──────┬─────┘ └────────────┘ └────────────┘
│
│ 存: example.com 的 NS 指针
▼
┌─────────────────────────────────────────────┐
│ example.com 权威服务器(ns1.example.com) │
│ Zone: example.com │
│ ├─ www → A 记录 (未委派,在父 Zone 内) │
│ ├─ blog → A 记录 (未委派,在父 Zone 内) │
│ ├─ api → A 记录 (未委派,在父 Zone 内) │
│ └─ dev → NS 记录 ★ 委派边界 ★ │
└──────────────────────┬──────────────────────┘
│ 委派:控制权移交给子域自己的 NS
▼
┌─────────────────────────────────────────────┐
│ dev.example.com 权威服务器(ns1.devteam.net) │
│ Zone: dev.example.com(独立 Zone) │
│ ├─ git.dev → A 记录 │
│ └─ ci.dev → A 记录 │
└─────────────────────────────────────────────┘
如何读这张图 :每个方框是一台 DNS 服务器 + 它管辖的 Zone。箭头是"指路关系"------上层不存下层具体记录,只存 NS 指针。带 ★ 的是委派边界 :
dev从父 Zone 切离,成为独立 Zone,由自己的权威服务器管理。父域权威服务器对dev下面有什么一无所知,只负责说"去问 ns1.devteam.net"。
3.2 关键概念:Zone(区域)
Zone 是 DNS 管理权限的基本单位------一块连续的管理边界,由一组权威服务器负责,内容存放在一个**区域文件(Zone File)**里。
- 一个 Zone 可以是一个域名及其所有子域名(未委派时)
- 一旦某个子域名被委派 出去,它就从父 Zone 中"切离",成为独立的新 Zone
树是逻辑结构,Zone 是管理切片 。一棵树可以被切成任意多个 Zone,切分点就是委派边界。
3.3 Zone Delegation(区域委派)是什么
Zone Delegation = 父域把某个子域名的解析控制权,通过 NS 记录"移交"给另一组权威服务器。
委派完成后:
| 变化 | 说明 |
|---|---|
| 子域成为独立 Zone | 由自己的权威服务器管理 |
| 父域权威不再存子域具体记录 | 只保留一条指向子域权威服务器的 NS 记录 |
3.4 委派的具体例子
假设 example.com 的 Zone 文件原本长这样:
; example.com 的区域文件(委派前)
example.com. IN NS ns1.example.com.
example.com. IN A 1.2.3.4
www IN A 1.2.3.4
api IN A 5.6.7.8
dev IN A 9.9.9.9
现在把 dev.example.com 委派给开发团队的 DNS 服务器:
; example.com 的区域文件(委派后)
example.com. IN NS ns1.example.com.
example.com. IN A 1.2.3.4
www IN A 1.2.3.4
api IN A 5.6.7.8
; ↓↓↓ 委派边界 ↓↓↓
dev.example.com. IN NS ns1.devteam.net. ; 子域的权威服务器
此时:
dev.example.com成为一个独立 Zone ,由ns1.devteam.net管理example.com的权威服务器不再知道dev.example.com下有什么记录(如git.dev.example.com)- 递归查询走到父域权威时,收到的是一条 NS 委托记录,要转向去问子域的权威服务器
3.5 委派对子域名挖掘的意义(核心)
| 意义 | 说明 |
|---|---|
| 制造"权威数据源切换" | 委派后子域数据只在子域权威上,要分别查每一级权威 |
| NS 记录是高价值枚举线索 | 一条 NS 记录 = 一个被委派的子域 |
| Zone Transfer 受委派边界限制 | AXFR 只能拿当前 Zone,委派出去的不在其中 |
| 决定枚举的递归深度 | 发现一个子域有 NS,要把它当新主域重新挖 |
| 可能隐藏"信息孤岛" | 不同部门各自管理子域,常成为安全盲区 |
3.6 委派下的子域名枚举策略
example.com
├── www.example.com (父 Zone 内,一次性可枚举)
├── api.example.com (父 Zone 内)
├── dev.example.com (委派 Zone → 需问 ns1.devteam.net)
│ ├── git.dev.example.com (子 Zone 内)
│ └── ci.dev.example.com (子 Zone 内)
└── corp.example.com (委派 Zone → 需问 ns.corp.net)
└── vpn.corp.example.com (子 Zone 内)
关键认知 :枚举工具必须跟随 NS 委派链递归深入,只问父域权威服务器会漏掉所有已委派子域下的内容。这就是为什么子域名挖掘工具要做"递归挖掘"------发现一个子域有 NS 记录,就把它当成新主域重新挖一遍。
四、DNS 记录的通配符
讲完委派,再讲一个子域名挖掘的"头号陷阱"------通配符 DNS。
4.1 什么是通配符 DNS
通配符 DNS(Wildcard DNS)是用 *.example.com 这条记录匹配所有未明确列出的子域名。
原理:当权威 NS 收到一个它没有明确记录的子域名查询时,如果存在 *.example.com 这条通配符记录,它会返回通配符记录的结果。换句话说,你拿任何随机字符串拼上去都能解析成功。
4.2 通配符的例子
假设 example.com 的区域文件里有:
*.example.com. IN A 1.2.3.4
那么:
api.example.com(如果没明确记录)→ 解析到1.2.3.4random123abc.example.com(不存在)→ 也解析到1.2.3.4任何东西.example.com→ 都解析到1.2.3.4
4.3 为什么这是头号陷阱
不只产生假阳性那么简单------它会"污染"你后续的所有分析环节:
| 污染环节 | 后果 |
|---|---|
| 字典爆破 | 跑出 50000 个子域名,全是假的 |
| HTTP 探测 | 浪费大量时间探测不存在的服务 |
| 端口扫描 | 可能触发目标的入侵检测 |
| 资产清单 | 全是垃圾数据,掩盖真正有价值的发现 |
4.4 识别通配符的思路
关键认知 :识别通配符的思路是"用不存在的东西验证存在"------生成 5 个完全随机、不可能真实存在的子域名(如
xyzrandom123abc.example.com)去做查询,如果全部返回相同 A 记录,就是通配符。
但要注意"部分通配符":有些目标只在特定层级(如 *.api.example.com)或特定记录类型上做通配符,主域层面查不出来。所以识别要分层做。
4.5 处理策略
不能简单粗暴地丢弃所有通配符结果。原因在于:有些服务在 DNS 层走通配符(所有子域解析到同一 IP),但在 HTTP 层根据 Host 头做了区分(不同子域返回不同内容)。你需要结合 HTTP 响应内容做二次判断------只有"DNS 解析相同且 HTTP 内容也相同"的,才是真正的假阳性。
通配符识别的具体技巧留到后续"子域名搜集方法"章节展开。本篇只讲基础概念。
五、本篇小结
| 概念 | 一句话 |
|---|---|
| 记录类型 | A、CNAME、NS、MX、TXT、SOA、SRV 等,各有情报价值 |
| CNAME | 情报之王,暴露第三方服务依赖 |
| NS | 揭示管理边界,是发现委派子域的直接证据 |
| 分级记录 | 根/TLD 存 NS 指针,权威服务器存具体记录 |
| Zone Delegation | 子域有独立权威服务器,要当成新主域重新挖 |
| 通配符 DNS | *.example.com 匹配所有未明确列出的子域,是头号陷阱 |
有了这些概念,下一篇我们讲子域名背后的 Web 与网络层------CDN、负载均衡、网络架构图、HTTP/HTTPS 与 TLS。
附:本篇关键术语速查
| 术语 | 简明解释 |
|---|---|
| A 记录 | 域名 → IPv4 地址 |
| AAAA 记录 | 域名 → IPv6 地址 |
| CNAME 记录 | 域名 → 另一个域名的别名 |
| NS 记录 | 域名 → 管理它的权威 NS |
| MX 记录 | 域名 → 邮件服务器 |
| TXT 记录 | 任意文本,常用于服务验证 |
| SOA 记录 | 区域权威起点,含管理员邮箱和序列号 |
| SRV 记录 | 服务定位记录,暴露内部服务 |
| PTR 记录 | IP → 域名(反向解析) |
| Zone | DNS 的独立管理单元 |
| Zone File | 权威服务器存的区域文件 |
| Zone Delegation | 父域把子域解析控制权移交给另一组 NS |
| 通配符 DNS | 用 *.example.com 匹配所有未列出的子域 |
| AXFR | 区域传送,一次性拷贝整个 Zone 的记录 |