recon-a-domain-passively
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRecon a domain passively
被动侦察一个域
Turn one domain into a defensible map of an organization's internet-facing estate
plus the owner behind it. The techniques live in other skills; what this workflow
contributes is the order, the inventory, and the stopping rule. Two
failure modes to avoid from the start: enumerating for hours and producing 400
hostnames with no attribution, dates or priority, which is not a map; and drifting
active without noticing, because one probe "just to check if it's up" ends the
passive claim. Decide the passive boundary before step 2, not during it.
将一个域转化为一张有证据支撑的地图,呈现组织的互联网暴露资产及其背后的所有者。相关技术存在于其他 skill 中;本工作流的贡献在于执行顺序、资产清单和停止规则。从一开始就要避免两种失败模式:枚举数小时后只产出 400 个主机名,却没有归属、日期或优先级,这不是一张地图;而是在未察觉的情况下逐渐转向主动探测,因为一次“只是确认它是否在线”的探测就会终结本次任务的被动声明。必须在步骤 2 之前而非执行到该步骤时才决定被动边界。
Ordering logic
执行顺序逻辑
Each stage feeds the next, and the sequence is cheapest-and-quietest first:
| Order | Stage | Why here |
|---|---|---|
| 1 | Registration and DNS | Defines the perimeter. Without the apex set and the registrant you do not know what is in scope |
| 2 | Name expansion | Archival sources only. Costs nothing, touches nothing, produces the candidate list everything else consumes |
| 3 | Resolution and inventory | Converts names to addresses, which is what infrastructure lookups take as input |
| 4 | Infrastructure and services | Needs stage 3's addresses. Third-party scan data only |
| 5 | Content, history, code, tech stack | Needs hostnames and org names from earlier stages as search terms, and reuses artifacts already collected |
| 6 | Owner attribution | The registrant, tenant and organization names surfaced above are the input |
Run stages 1–5 as a loop, not a line. Every stage produces new selectors that
belong back at stage 1 or 2. Stop looping when the stopping rule in step 7 is met.
每个阶段都会为下一阶段提供输入,顺序优先选择成本最低且最安静的方式:
| 顺序 | 阶段 | 原因 |
|---|---|---|
| 1 | 注册与 DNS | 定义边界。没有 apex 域集合和注册人,就不知道哪些内容在范围内 |
| 2 | 名称扩展 | 仅使用归档来源。零成本、不接触目标,并生成后续所有步骤都会使用的候选列表 |
| 3 | 解析与盘点 | 将名称转换为地址,基础设施查询以此为输入 |
| 4 | 基础设施与服务 | 需要步骤 3 的地址。仅使用第三方扫描数据 |
| 5 | 内容、历史记录、代码、技术栈 | 需要先前阶段获得的主机名和组织名称作为搜索词,并复用已收集的工件 |
| 6 | 所有者归属 | 上述阶段发现的注册人、tenant 和组织名称就是输入 |
将步骤 1–5 作为循环执行,而不是直线推进。每个阶段都会产生新的 selector,应返回步骤 1 或 2。满足步骤 7 的停止规则时停止循环。
Step 1 — Authorized scope
步骤 1——授权范围
State in writing: the subject (which domains and netblocks, and which adjacent ones
are explicitly excluded), the objective, the jurisdictions involved, and the
passive boundary — specifically whether DNS resolution, wordlist brute-forcing and
any HTTP contact with the target are permitted. Read
../../ETHICS.md. If being noticed matters, set up attribution
hygiene with before querying anything.
investigate-without-getting-madeDone when subject, objective, out-of-bounds list, jurisdiction and passive
boundary are written down, and you know which of the three grey activities you may
perform.
书面记录:调查对象(哪些域和网段在范围内,哪些相邻域被明确排除)、目标、涉及的司法管辖区,以及被动边界——具体说明是否允许 DNS 解析、字典暴力枚举,以及与目标进行任何 HTTP 接触。阅读 ../../ETHICS.md。如果需要避免被察觉,在查询任何内容之前,先使用 建立 attribution hygiene。
investigate-without-getting-made**完成标准:**已书面记录调查对象、目标、范围外清单、司法管辖区和被动边界,并且知道三项灰区活动中哪些可以执行。
Step 2 — Registration and DNS baseline
步骤 2——注册与 DNS 基线
Run on every in-scope apex. You want registrar, dates and
status, nameservers, the full record set, and the mail and SaaS fingerprints TXT, MX,
DKIM and CAA give up. Where registration is redacted, pull historical WHOIS in the
same pass.
who-owns-this-domainDone when every apex has a registration record with a retrieval timestamp,
a complete record set, and a list of named third-party vendors extracted from its
DNS.
对范围内每个 apex 域运行 。你需要获取 registrar、日期和状态、nameservers、完整记录集,以及邮件和 SaaS 指纹——TXT、MX、DKIM 和 CAA 都会暴露相关信息。注册信息被遮盖时,在同一次执行中提取历史 WHOIS。
who-owns-this-domain**完成标准:**每个 apex 域都有一条带检索时间戳的注册记录、一套完整记录,以及从其 DNS 中提取的具名第三方供应商列表。
Step 3 — Expand the name space
步骤 3——扩展名称空间
Run . Certificate Transparency and passive DNS first, because
they are free, historical and invisible. Feed it the organization names from step 2 as
well as the domains — a certificate-subject search finds sibling and acquired domains
nobody put in the brief.
find-hidden-subdomainsDone when you have a deduplicated candidate hostname list with the source and
first-seen date recorded per name, and any newly discovered apex domains have been
pushed back through step 2.
运行 。优先使用 Certificate Transparency 和 passive DNS,因为它们免费、具备历史信息且不会留下痕迹。向其输入步骤 2 得到的组织名称以及域——按 certificate subject 搜索可发现任务简报中未提及的兄弟域和已收购域。
find-hidden-subdomains**完成标准:**已获得去重的候选主机名列表,记录每个名称的来源和首次发现日期,并将新发现的 apex 域重新送回步骤 2。
Step 4 — Resolve and start the inventory
步骤 4——解析并开始盘点
Classify each candidate: resolves to an address, resolves to a third-party CNAME, or
does not resolve. Build the inventory now rather than at the end — retrofitting
provenance onto a list you already collected is how findings lose their timestamps.
The schema and per-row fields are in
reference/asset-inventory.md.
Done when every candidate is in one of the three buckets with a resolution
timestamp, every resolving host has an IP and an ASN, and every third-party CNAME
is attributed to a named vendor.
将每个候选项归入以下类别之一:解析出地址、解析到第三方 CNAME,或无法解析。现在就构建清单,而不是等到最后——事后给已收集的列表补录 provenance,正是发现丢失时间戳的原因。schema 和逐行字段见 reference/asset-inventory.md。
**完成标准:**每个候选项都已归入三个类别之一并带有解析时间戳,每个可解析主机都有 IP 和 ASN,每个第三方 CNAME 均归属到具名供应商。
Step 5 — Infrastructure and services
步骤 5——基础设施与服务
Run over the addresses and netblocks from step 4. Query scan
platforms only — no port scanning, no service probing. Use the certificate and
favicon pivots to catch hosts that share the target's infrastructure without sharing
its DNS, and note anything that looks unintentionally exposed.
find-exposed-serversDone when each in-scope IP has its observed ports and services with scan
dates, each netblock has an owner from its RIR record, and any infrastructure
found only through cert or favicon pivots has been added to the inventory and
attribution-graded.
针对步骤 4 的地址和网段运行 。只查询扫描平台——不进行端口扫描,也不探测服务。利用 certificate 和 favicon pivot,发现共享目标基础设施但不共享其 DNS 的主机,并记录任何看似意外暴露的内容。
find-exposed-servers**完成标准:**每个范围内的 IP 都有观察到的端口和服务以及扫描日期,每个网段都有来自 RIR record 的所有者,任何仅通过 certificate 或 favicon pivot 找到的基础设施都已加入清单并完成归因分级。
Step 6 — Content, history, code and tech stack
步骤 6——内容、历史记录、代码与技术栈
Three sources, in this order:
- for the estate as it used to be: retired hostnames, old staff pages, exposed paths, pre-CDN infrastructure references.
read-deleted-pages - for what is indexed now on the hosts you found — documents, directory listings, configs, forgotten portals.
google-like-a-spy - for the org names, GitHub organization slugs, cloud tenant labels and project IDs surfaced in steps 2 to 5.
secrets-in-git-history
If imagery matters — a logo reused across a network of sites, a stock photo posing as
an office — run . Shared images tie sites together when DNS
and registration do not.
find-the-original-imageThen assemble the tech stack from what you now hold: headers and cookies in archived
copies and scan records, certificate issuers, CNAME targets, JavaScript and asset
paths, CSP directives, favicon hashes, and the SaaS fingerprints from step 2. Where
you need a live page, read a third-party scan of it instead of fetching it.
Done when archived and indexed content is reviewed for the top-priority
hostnames, code exposure is documented or ruled out, new hostnames have gone back
through step 4, and the stack is documented per host with the artifact each
conclusion rests on and versions marked claimed rather than verified.
按以下顺序使用三个来源:
- :了解资产过去的状态——已下线的主机名、旧员工页面、暴露路径,以及引入 CDN 之前的基础设施引用。
read-deleted-pages - :查看当前在已发现主机上被索引的内容——文档、目录列表、配置文件和被遗忘的门户。
google-like-a-spy - :使用步骤 2 至 5 出现的组织名称、GitHub organization slug、云 tenant label 和 project ID。
secrets-in-git-history
如果图像线索很重要——例如某个 logo 在一组网站中被重复使用,或一张图库照片被冒充为办公室照片——运行 。当 DNS 和注册信息无法建立联系时,共享图像可以关联这些网站。
find-the-original-image然后基于目前掌握的信息整理技术栈:归档副本和扫描记录中的 headers 与 cookies、certificate issuer、CNAME target、JavaScript 和 asset path、CSP directive、favicon hash,以及步骤 2 中的 SaaS 指纹。需要实时页面时,读取第三方扫描结果,而不是亲自抓取。
**完成标准:**已审查优先级最高主机的归档内容和索引内容,代码暴露情况已被记录或排除,新主机名已重新经过步骤 4,并且每个主机的技术栈都有结论所依据的工件;对于版本,仅标记为 claimed,而不是 verified。
Step 7 — Decide whether the map is done
步骤 7——判断地图是否完成
Completeness is a judgement, so make it against criteria:
- Two consecutive new sources produced no new assets. Saturation, not exhaustion, is the signal.
- Every discovered name is resolved or classified, and every resolving host has an owner and an attribution grade.
- Naming conventions have no unexplained gaps: if and
web01are in the inventory, you have accounted forweb03.web02 - Every named vendor and tenant from step 2 has yielded assets or been ruled out.
- The objective from step 1 can be answered from the inventory.
A failing criterion tells you exactly which stage to re-enter.
Done when all five pass, or the remaining gaps are written up as stated
limitations rather than left implicit.
完整性是一种判断,因此应依据以下标准评估:
- 连续两个新来源都没有产生新资产。饱和,而非穷尽,才是信号。
- 每个已发现的名称都已解析或分类,每个可解析主机都有所有者和归因等级。
- 命名规范中不存在无法解释的缺口:如果清单中有 和
web01,就应说明web03的情况。web02 - 步骤 2 中每个具名 vendor 和 tenant 要么产出了资产,要么已被排除。
- 步骤 1 中设定的目标可以通过清单回答。
未通过的标准会准确告诉你应重新进入哪个阶段。
**完成标准:**五项标准全部通过,或者将剩余缺口明确写为已知限制,而不是将其隐去。
Step 8 — Hand off the owner
步骤 8——移交所有者分析
If the registrant, certificate subject, RIR reassignment or tenant label resolves
to a legal entity rather than an individual, the domain work is finished and a
corporate investigation starts: hand the entity name and jurisdiction to
, take registry and beneficial-ownership questions to
, and send recovered emails to . Do not
attempt corporate structure from DNS artifacts — DNS shows operators, not
shareholders.
x-ray-a-companywho-really-owns-itwhat-an-email-revealsDone when every owner-side selector is routed to the right skill or recorded as
a dead end with the reason.
如果注册人、certificate subject、RIR reassignment 或 tenant label 指向法律实体而非个人,域工作即告完成,企业调查随之开始:将实体名称和司法管辖区交给 ,将公司注册信息和受益所有权问题交给 ,并将恢复出的邮箱交给 。不要尝试仅根据 DNS 工件推断公司结构——DNS 展示的是运营方,而不是股东。
x-ray-a-companywho-really-owns-itwhat-an-email-reveals**完成标准:**每个所有者侧 selector 都已转交给正确的 skill,或已记录为死路并注明原因。
Step 9 — Report
步骤 9——报告
Run . Lead with the asset inventory, then the attribution
chain, then anything that appears unintentionally exposed, then the limitations
from step 7. Done when every claim traces to an inventory row with a source and
timestamp, and every finding carries a confidence grade.
write-the-intel-brief运行 。先展示资产清单,然后是归属链,再展示任何看似意外暴露的内容,最后说明步骤 7 中的限制。**完成标准:**每项主张都能追溯到带有来源和时间戳的清单行,并且每项发现都有置信等级。
write-the-intel-briefWhere this goes wrong
容易出错的地方
- Scope creep through pivots. Enumeration produces sibling domains endlessly and each looks like the next target. If it is not in the step 1 subject list it is a finding to report, not a workstream to start.
- Silent drift into active. Resolution, brute-forcing and HTTP probing sit on a spectrum, and tools blur it — passive collectors have active modes one flag away, and one careless flag ends the passive claim for the engagement.
- Inventory without attribution. Shared hosting, CDN addresses and bundled certs attach assets to your target that are not the target's, and an ungraded inventory row is a liability. Relatedly, a vulnerable SaaS tenant the target merely uses is a supply-chain finding and must be phrased as one.
- Stale data presented as current. Archives, CT and scan records are all historical, and undated findings are not findings.
- Stopping at the first quiet moment. No new results usually means one source saturated, not the estate mapped — which is what step 7 catches.
- Over-collection. Staff names from archived pages and SNMP contacts are personal data. Collect what the objective needs, nothing more.
- **通过 pivot 造成范围蔓延。**枚举会不断产出兄弟域,每个看起来都像下一个目标。如果某个域不在步骤 1 的调查对象清单中,它应当作为发现进行报告,而不是开启一条新的工作流。
- **在未察觉的情况下转向主动探测。**解析、暴力枚举和 HTTP 探测处于同一连续谱上,而工具往往会模糊界线——被动收集器往往距离主动模式只差一个 flag,一个不谨慎的 flag 就会终结整个委托的被动声明。
- **有清单但无归属。**共享托管、CDN 地址和捆绑证书会把并非目标所有的资产附加到目标上,而未分级的清单项会成为责任风险。同样,目标仅仅使用的、存在漏洞的 SaaS tenant 属于 supply-chain finding,必须按此类发现表述。
- **把陈旧数据当作当前状态呈现。**归档记录、CT 和扫描记录都属于历史数据,没有日期的发现不能算作有效发现。
- **在第一次安静时立即停止。**没有新结果通常只表示一个来源已经饱和,而不是资产组合已经被完整映射——步骤 7 会捕获这一问题。
- **过度收集。**归档页面中的员工姓名和 SNMP contact 属于个人数据。只收集目标所需的内容,不多收集任何信息。
Confidence grading
置信度分级
Grade the inventory and the attribution separately. A host can be a
confirmed live service and an unconfirmed asset of your target at once, and
conflating the two is the most common reporting error in domain recon.
- Confirmed asset — under a domain whose registration you verified, or on a netblock reassigned to the target by name, or serving a certificate the target demonstrably controls, and corroborated by a second independent source.
- Probable asset — one strong infrastructure fingerprint (shared DKIM key, same mail tenant label, same provider-assigned nameserver pair, distinctive favicon or body string) with nothing contradicting it.
- Unconfirmed — shared-hosting or CDN addresses, bundled-certificate names,
-only attribution, or an aggregator result whose underlying record you have not seen.
org:
Per-technique criteria in the technique skills override these where more specific.
分别对资产清单和归属进行分级。一个主机可以同时是已确认的在线服务和未确认的目标资产,而混淆二者是域侦察中最常见的报告错误。
- 已确认资产(Confirmed asset)——位于注册信息已验证的域之下,或位于通过名称重新分配给目标的网段上,或提供目标明确控制的 certificate,并且得到第二个独立来源的佐证。
- 可能资产(Probable asset)——具有一个强基础设施指纹(共享 DKIM key、相同邮件 tenant label、相同的提供商指定 nameserver pair、独特的 favicon 或 body string),且没有相反证据。
- 未确认(Unconfirmed)——共享托管或 CDN 地址、捆绑证书名称、仅基于 的归属,或尚未查看底层记录的聚合器结果。
org:
如果各技术 skill 中的具体标准更加详细,则以这些标准为准。
Worked example
实例
Engagement: a client is acquiring and wants its
internet-facing estate before signing. Scope: the apex plus any domain the
registrant demonstrably controls. Boundary: resolution allowed, no brute-forcing,
no HTTP contact.
meridian-freight.testStep 2: five-year-old registration, registrant redacted but country , a
Microsoft 365 tenant, and TXT tokens for a support desk, an identity provider and
a GitHub organization. That GitHub org name is the highest-value item in the entire
record set and it cost one lookup.
NLStep 3 returns 74 candidates, and a certificate-subject search surfaces
, which is not in the brief. Back through step 2:
same M365 tenant label in its MX, so same operator. Included, client notified.
meridian-logistics-group.testStep 4: 31 resolve, nine of those to third-party CNAMEs — relationships, not
assets. sits in a small Dutch hosting netblock distinct from
everything else, which makes it the lead of the engagement.
uat-portalStep 5: that UAT host had 443 and 3306 observed open five weeks earlier. Also
eleven hosts sharing a favicon hash, which looked like a hidden estate until the
hash turned out to belong to a stock CMS theme — the dead end, and exactly the
kind that inflates a report if you skip the check.
Step 6: a public repo in the GitHub org holds a CI config naming two internal
hostnames absent from DNS. They do not resolve; they still matter, because the
acquirer inherits those systems.
Step 7: third consecutive source adds nothing, accounted for, every vendor
chased. Complete, with one stated gap — the apex wildcard cert means subdomains
issued after it are invisible to CT. Step 8: Dutch registrant country plus the
sibling domain plus the group name in the cert subject point at a holding
structure, so it goes to .
web02x-ray-a-company委托内容:客户正在收购 ,希望在签署交易前了解其互联网暴露资产。范围:apex 域,以及注册人明确控制的任何域。边界:允许解析,不允许暴力枚举,不允许 HTTP 接触。
meridian-freight.test步骤 2:注册信息已有五年,注册人被遮盖,但国家为 ,存在一个 Microsoft 365 tenant,以及用于支持台、身份提供商和 GitHub organization 的 TXT token。这个 GitHub org 名称是整份记录中价值最高的项目,而且只查询一次便已获得。
NL步骤 3 返回 74 个候选项,certificate subject 搜索发现 ,它并不在任务简报中。返回步骤 2:它的 MX 中具有相同的 M365 tenant label,因此属于同一运营方。将其纳入范围,并通知客户。
meridian-logistics-group.test步骤 4:31 个名称可以解析,其中 9 个指向第三方 CNAME——这些属于关系,而不是资产。 位于一个与其他所有资产均不相同的小型荷兰托管网段中,因此成为本次委托的重点。
uat-portal步骤 5:五周前的扫描记录显示,该 UAT 主机的 443 和 3306 端口处于开放状态。另有 11 个主机共享同一个 favicon hash,看起来像是隐藏资产组合,直到确认该 hash 属于一个通用 CMS theme——这是一条死路,也正是跳过检查便会在报告中造成膨胀的那类结果。
步骤 6:GitHub org 中的一个公共仓库包含 CI config,其中列出了两个未出现在 DNS 中的内部主机名。它们无法解析,但仍然重要,因为收购方会继承这些系统。
步骤 7:连续第三个来源没有增加任何内容, 已得到说明,每个 vendor 都已追查。任务完成,但需说明一个缺口——apex 域的 wildcard certificate 意味着其后签发的子域名对 CT 不可见。步骤 8:荷兰注册人所在国家、兄弟域以及 certificate subject 中的集团名称共同指向一种控股结构,因此将其交给 。
web02x-ray-a-companyPivots out
延伸 pivot
| Selector | Goes to |
|---|---|
| Legal entity, group name, jurisdiction | |
| Emails and phone numbers | |
| Named employees from archives or metadata | |
| Developer handles from repositories | |
| Documents pulled from the estate | |
| Breach exposure for the domain's mailboxes | |
| The whole asset and entity set, for structure | |
| Selector | 转入 |
|---|---|
| 法律实体、集团名称、司法管辖区 | |
| 邮箱和电话号码 | |
| 来自归档或 metadata 的具名员工 | |
| 来自 repository 的开发者 handle | |
| 从资产组合中提取的文档 | |
| 域邮箱的 breach 暴露情况 | |
| 完整的资产与实体集合,用于结构分析 | |
Legal and ToS notes
法律与 ToS 注意事项
Passive collection from third-party datasets is lawful research in most
jurisdictions; the boundary is traffic to the target and access to non-public
systems. Registrant data recovered from historical WHOIS is personal data under
GDPR even though it was once public, so you need a lawful basis and must minimize.
Scan-platform and archive terms restrict bulk redistribution — cite findings, do
not republish datasets. A discovered exposure authorizes a report to the operator
or the relevant CERT and nothing else. And in due diligence, confirm you hold the
client's written authority for the scope you are running: "our client is buying
them" is not authorization from the target.
在大多数司法管辖区,从第三方数据集进行被动收集属于合法研究;边界在于是否向目标发送流量以及是否访问非公开系统。即使历史 WHOIS 曾公开,从中恢复的注册人数据在 GDPR 下仍属于个人数据,因此需要具备合法依据并最小化处理。扫描平台和归档服务的条款限制批量再分发——应注明发现的出处,不要重新发布数据集。发现暴露问题只授权向运营方或相关 CERT 报告,除此之外不得采取其他行动。在尽职调查中,确认你持有客户针对当前范围的书面授权:“我们的客户正在收购他们”并不构成目标方的授权。