news 2026/7/1 7:32:42

子域名枚举实战:Inventory字典在资产发现中的高级应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
子域名枚举实战:Inventory字典在资产发现中的高级应用

1. 项目概述:从“扫目录”到“挖子域”的思维跃迁

在漏洞赏金的实战中,很多朋友,尤其是刚入门的猎人,常常会陷入一个误区:拿到一个目标,第一反应就是打开扫描器,挂上通用字典,对着根域名一顿猛扫。这种“广撒网”式的目录爆破,在如今防护日益完善的Web应用面前,效率已经大打折扣。真正的突破口,往往藏在更前置、更广阔的战场上——那就是子域名枚举。一个未被主站安全团队充分覆盖的子域名,可能就是通往核心系统的后门,或是存放着敏感信息的测试环境。今天要聊的,就是一个能极大提升你子域名发现能力的“利器级”字典:来自gh_mirrors/wo/wordlists项目中的Inventory字典。这不是一个简单的单词列表,而是一个经过精心设计和实战验证的资产发现引擎,专门用于在模糊测试中,帮你“猜”出那些隐藏的、未被公开记录的子域名。

简单来说,这个字典的核心价值在于“智能生成”。它不像传统字典那样只是静态的单词堆砌(如admintestapi),而是内置了一套组合逻辑,能够动态生成高可能性的子域名模式。例如,它知道公司常用dev-stg-作为前缀,知道项目常用-api-cdn作为后缀,也知道将公司名、产品名、地理位置进行各种排列组合。当你用它对一个目标(比如example.com)进行子域名爆破时,它实际上是在进行一场高密度的、有依据的“猜测”,从而覆盖那些自动化工具可能遗漏,但实际却存在的资产。

这套字典尤其适合那些资产庞大、业务线复杂的企业目标。安全团队可能专注于wwwmailvpn等核心服务的防护,但对于成百上千个由不同业务部门临时搭建的子系统、测试站、第三方服务接入点,难免会有疏漏。而Inventory字典,就是帮你找到这些疏漏的“探针”。接下来,我会详细拆解这个字典的设计哲学、核心用法,以及如何将它融入你的自动化工作流,实现从“碰运气”到“精准打击”的进阶。

2. 核心思路:为什么是“Inventory”字典而非其他?

在深入实操之前,我们必须先理解为什么gh_mirrors/wo/wordlists项目中的Inventory字典值得你专门去研究和应用。市面上子域名字典很多,从著名的subdomains-top1million-5000.txtfierce-hostlist.txt,各有侧重。Inventory字典的独特之处在于其“资产清单”的设计思维。

2.1 传统字典的局限性

大多数通用子域名字典的生成逻辑基于两个来源:

  1. 公共数据集:从各种扫描项目、证书透明度日志(CT Log)、DNS记录中收集的全球子域名。
  2. 常见词汇:像admintestapimobile等高频技术或功能词汇。

它们的优点是覆盖面广,缺点是“噪声”大,且缺乏针对性。对一个特定的目标公司,mail.google.com这样的记录毫无意义。更重要的是,它们无法有效发现那些“非公开”但“符合内部命名规范”的资产。比如,一个公司内部可能用project-alpha-staging.example.com来命名一个测试环境,这种模式在通用字典里几乎不可能出现。

2.2 “Inventory”字典的生成逻辑

Inventory字典的构建思路更接近一个“资产建模”的过程。它通常会包含以下几个层次的词汇和规则:

  1. 环境与角色前缀:这是最核心的一层。它系统性地收集了软件开发、运维、部署中所有可能的环境标识。

    • 开发相关dev,develop,development,sandbox,lab
    • 测试相关test,testing,qa,staging,preprod,uat
    • 构建与CI/CDbuild,ci,jenkins,gitlab,drone
    • 内部工具tools,internal,intranet,portal,dashboard
    • 地理位置us-east,eu-west,cn,sg(常与数字组合,如us-east-1
  2. 服务与功能中缀/后缀:描述资产提供的服务类型。

    • 通用服务api,cdn,assets,static,img,js,download
    • 后端服务service,backend,svc,microservice
    • 管理界面admin,manager,console,control
    • 移动与客户端mobile,m,app,client
  3. 组合与连接符规则:这是“智能”的体现。字典不仅提供单词,还隐含了组合模式。

    • 短横线连接dev-api,staging-cdn,prod-us-east
    • 点号分隔:在某些生成工具中,会直接生成dev.api.example.com这样的完整子域名。
    • 数字序列:与前缀/后缀结合,如jenkins01,node-1,cluster-2a
  4. 目标上下文融合:高级用法中,工具(如amasssubfinder的某些配置)可以结合已知的目标信息(如公司名acme, 产品名rocket),将字典词汇与这些信息进行排列组合,生成像acme-staging-apirocket-dev-cdn这样的高价值候选词。

简单来说,Inventory字典是一个“模式库”而非“结果库”。它为你提供了构建潜在子域名所需的“乐高积木”和“拼接说明书”。当你用它进行爆破时,相当于派出了一个精通目标行业IT命名习惯的侦察兵,其发现隐藏资产的概率远高于漫无目的的扫射。

3. 工具链整合:将Inventory字典嵌入你的侦察流程

拥有好的字典只是第一步,如何高效地使用它才是关键。你不能手动拿着几十万行的字典去一个个尝试。下面我将介绍如何将Inventory字典与主流子域名枚举工具整合,构建一个自动化的侦察管道。

3.1 获取与准备字典文件

首先,你需要找到并获取这个字典。gh_mirrors/wo/wordlists是一个GitHub上的知名字典仓库。你可以直接克隆或下载。

git clone https://github.com/gh_mirrors/wo/wordlists.git cd wordlists

进入目录后,找到名为Inventory或类似命名的文件(有时可能位于子目录,如subdomains/下)。假设我们找到的文件路径是./subdomains/inventory.txt。使用前,建议先进行简单的预处理:

# 1. 查看字典大小和基本内容 wc -l ./subdomains/inventory.txt head -20 ./subdomains/inventory.txt # 2. (可选) 去重和排序,虽然原字典可能已处理,但养成好习惯 sort -u ./subdomains/inventory.txt -o ./subdomains/inventory_unique.txt # 3. 根据目标特点,可以手动增补一些词汇。例如,如果你知道目标公司叫“星辰科技”,可以添加: echo -e "star\nstarcraft\nstellardev\nstellartest" >> ./subdomains/inventory_custom.txt # 然后与原始字典合并 cat ./subdomains/inventory_unique.txt ./subdomains/inventory_custom.txt | sort -u > ./subdomains/inventory_final.txt

现在,你手头就有了一个针对性的强力字典inventory_final.txt

3.2 与主流工具结合使用

3.2.1 使用 Amass 进行智能枚举

Amass是子域名枚举的瑞士军刀,它本身就支持从字典文件进行暴力破解,并且其智能引擎可以很好地利用Inventory这种模式化字典。

# 基础暴力破解模式,指定我们的字典 amass enum -brute -d example.com -w ./subdomains/inventory_final.txt -o amass_brute.txt # 更强大的方式:结合被动枚举和主动爆破,并将字典用于单词组合 # 1. 先进行被动收集,获取一些种子子域名 amass enum -passive -d example.com -o amass_passive.txt # 2. 从被动结果中提取“单词”(如从 admin.staging.example.com 提取 admin, staging) # 这里需要一个简单的脚本或使用amass的`-aw`参数配合其他工具,但概念是融合目标自身词汇。 # 3. 使用包含目标词汇和Inventory字典的混合列表进行深度爆破 # 假设我们生成了一个混合字典 mixed_words.txt amass enum -brute -d example.com -w ./mixed_words.txt -o amass_deep.txt

注意:纯暴力破解对目标DNS服务器压力较大,且可能触发告警。务必在授权测试范围内进行,并控制速率(Amass 可用-max-dns-queries参数)。

3.2.2 使用 Subfinder 的暴力破解模块

Subfinder虽然以被动收集见长,但其-b参数允许指定字典进行暴力破解。

subfinder -d example.com -o subfinder_passive.txt # 使用 -w 指定字典进行暴力破解 subfinder -d example.com -w ./subdomains/inventory_final.txt -o subfinder_brute.txt

Subfinder的暴力破解相对轻量,适合作为快速补充。

3.2.3 使用 Gobuster 或 FFUF 进行DNS爆破

这是最直接的字典爆破方式。Gobusterdns模式非常适合此场景。

gobuster dns -d example.com -w ./subdomains/inventory_final.txt -o gobuster_dns.txt -t 50
  • -d: 指定目标域名。
  • -w: 指定字典文件。
  • -t: 线程数,根据网络情况和目标承受能力调整。
  • -o: 输出结果。

FFUF同样强大且灵活:

ffuf -w ./subdomains/inventory_final.txt -u http://FUZZ.example.com -o ffuf_results.json -of json

这里FFUF用于HTTP探测,但速度更快,能同时验证子域名是否存在以及Web服务是否存活。FUZZ是占位符,会被字典中的每一行替换。

3.3 构建自动化侦察脚本

一个成熟的赏金猎人不会每次手动敲命令。下面是一个简单的Bash脚本示例,它整合了被动收集、字典爆破和结果去重,并以Inventory字典为核心。

#!/bin/bash TARGET=$1 WORDLIST="./subdomains/inventory_final.txt" OUTPUT_DIR="./scans/$TARGET" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p $OUTPUT_DIR echo "[*] 开始对目标 $TARGET 进行子域名枚举 - $DATE" echo "----------------------------------------" # 1. 被动收集 (使用subfinder,你也可以加上amass passive) echo "[1/3] 执行被动收集..." subfinder -d $TARGET -silent -o $OUTPUT_DIR/passive_$DATE.txt echo "被动收集完成,找到 $(wc -l < $OUTPUT_DIR/passive_$DATE.txt) 个子域名。" # 2. 使用Inventory字典进行DNS爆破 (使用gobuster) echo "[2/3] 使用Inventory字典进行DNS爆破..." gobuster dns -d $TARGET -w $WORDLIST -quiet -o $OUTPUT_DIR/brute_$DATE.txt echo "字典爆破完成,找到 $(wc -l < $OUTPUT_DIR/brute_$DATE.txt) 个子域名。" # 3. 合并、去重、解析并探测HTTP/HTTPS服务 echo "[3/3] 合并结果并探测存活服务..." cat $OUTPUT_DIR/passive_$DATE.txt $OUTPUT_DIR/brute_$DATE.txt | sort -u > $OUTPUT_DIR/all_subdomains_$DATE.txt echo "去重后总子域名数: $(wc -l < $OUTPUT_DIR/all_subdomains_$DATE.txt)" # 使用httpx探测存活和标题 cat $OUTPUT_DIR/all_subdomains_$DATE.txt | httpx -silent -title -tech-detect -status-code -o $OUTPUT_DIR/alive_subdomains_$DATE.txt echo "存活探测完成,结果保存在 $OUTPUT_DIR/alive_subdomains_$DATE.txt" echo "----------------------------------------" echo "[*] 侦察流程结束。所有原始文件保存在 $OUTPUT_DIR"

这个脚本提供了一个基础框架。你可以根据需要添加更多工具(如amassassetfinder)、更复杂的字典处理逻辑(如根据目标名称生成自定义组合词)以及结果通知(如发送到Slack或Telegram)。

4. 实战技巧与避坑指南

字典和工具都有了,但在实战中,直接硬怼往往效果不佳,甚至可能“打草惊蛇”。下面分享一些我积累的、能显著提升成功率和隐蔽性的技巧。

4.1 字典的“精修”与“定制化”

不要直接使用原始字典。这是最重要的一条原则。

  1. 去重与排序:如前所述,这是基本操作。
  2. 根据目标行业裁剪:如果你的目标是金融公司,可以强化secureonlinebankingtrade等词汇;如果是游戏公司,则关注gamesdkplayercdn等。适当删减完全无关的词汇,能减少请求量。
  3. 融合目标情报
    • 从目标的官网、招聘信息、新闻稿中提取产品名、项目代号(如“Project Aurora”)、品牌名。
    • 从已发现的子域名中递归提取单词。例如发现devops.internal.example.com, 则把devopsinternal加入你的自定义字典。
    • 使用工具如altdns, 它可以基于已知子域名和提供的词汇列表,生成大量的排列组合(如前后缀添加),这与Inventory字典的思路异曲同工,可以结合使用。

4.2 速率控制与隐蔽性

大规模的DNS爆破很容易被防御系统识别并屏蔽。

  • 降低速率:在所有工具中设置较低的线程数(-t 20或更低)和延迟。gobuster dns-z参数禁用进度条,减少特征。
  • 使用公共DNS解析器:不要直接向目标的权威DNS服务器发起大量查询。使用1.1.1.18.8.8.8dns.google等公共DNS。大部分工具都支持指定解析器。
    gobuster dns -d example.com -w wordlist.txt -r 8.8.8.8:53 -t 10
  • 分布式与延迟:对于非常重要的目标,可以考虑将爆破任务分散到多个VPS,并使用随机延迟脚本,模拟人类操作。

4.3 结果验证与优先级排序

爆破会产生大量结果,其中包含很多无效的NXDOMAIN(不存在的域名)。你需要快速筛选出有效的。

  1. DNS解析验证:使用massdnspuredns等工具,用高质保的解析器列表对爆破结果进行快速解析验证,过滤掉无法解析的。
  2. HTTP/S存活探测:对解析成功的域名,使用httpxnucleihttp模板进行快速存活探测,获取状态码、标题、技术栈。这是筛选出“有趣”目标的关键一步。
  3. 优先级排序
    • 状态码200302403(可能隐藏后台),500(可能暴露错误信息)的都值得关注。
    • 标题和内容:包含admindashboardloginteststagingdebug等关键词的页面优先级最高。
    • 技术栈:识别出老旧框架(如Struts2)、未授权访问的API文档(如Swagger UI)、开发调试界面(如PHPMyAdmin, Jenkins)的,应立即标记为高危。

4.4 一个经典的踩坑案例

我曾在对一个大型互联网公司进行授权测试时,使用了未经裁剪的巨型通用字典进行子域名爆破。几分钟后,扫描IP被全线封禁,不仅侦察无法继续,还触发了客户的安全告警,需要额外沟通解释。

教训与改进

  1. 侦察前置:在爆破前,先用subfinderamass passivecrt.sh等被动方式尽可能收集信息。用这些信息来“喂养”和定制你的爆破字典。
  2. 从小规模开始:先使用精简的、高价值的字典(如精心修剪过的Inventory字典核心部分)进行试探性扫描,观察响应和是否触发防护。
  3. 设立监控点:在扫描的同时,用一个已知存在的子域名(如www.target.com)作为“金丝雀”,定时访问。如果这个也访问不了了,说明你的扫描行为已经被识别并采取了全局封禁,应立即停止。
  4. 沟通:在授权测试开始前,明确告知客户你的测试范围和方法,包括可能会进行子域名枚举,获得对方的理解和白名单(如果可能)。

5. 超越爆破:Inventory字典的进阶应用场景

Inventory字典的价值不止于子域名爆破。它的“资产模式”思维可以应用到更广的领域。

5.1 虚拟主机(vHost)发现

很多公司会在同一个IP上通过虚拟主机托管多个不同的网站或服务。这些vHost的名字往往就符合Inventory字典的模式。你可以用FFUFGobustervhost模式进行枚举。

# 使用FFUF发现vHost,假设目标IP是 192.168.1.100 ffuf -w ./subdomains/inventory_final.txt -H "Host: FUZZ.example.com" -u http://192.168.1.100 -fs 424 # -fs 过滤掉大小不符的响应(如默认页)

这能帮你找到那些没有独立子域名解析,但共享IP的内部网站。

5.2 云存储桶与对象枚举

针对云环境(如AWS S3, Google Cloud Storage, Azure Blob),资源命名也常遵循类似规范。你可以将字典用于枚举存储桶名称或内部文件路径。

# 假设目标可能使用S3,枚举存储桶名 ffuf -w ./subdomains/inventory_final.txt -u http://FUZZ.s3.amazonaws.com -mc 200,403 # 403表示桶存在但无权限,这本身就是一个重要发现!

5.3 内部网络服务猜测

在内网渗透测试中,对于发现的IP,你可以用类似的思维去猜测服务名或路径。例如,结合Inventory字典和常见端口,生成探测请求。

# 简单的例子:猜测内网中的Jenkins地址 for ip in $(cat internal_ips.txt); do for word in $(cat inventory_words.txt | grep -i "jenkins\|build\|ci"); do curl -s "http://$ip:8080/" | grep -q "Jenkins" && echo "[+] Found Jenkins at http://$ip:8080/" done done

5.4 与自动化扫描框架集成

你可以将基于Inventory字典的枚举模块,集成到像nuclei这样的自动化扫描框架的工作流中。例如,先使用自定义的字典枚举子域名和vHost,然后将存活的资产自动送入nuclei进行漏洞检测,实现从资产发现到漏洞初筛的全自动化。

6. 持续维护与迭代你的武器库

最后,Inventory字典不是一成不变的。IT世界的命名习惯也在缓慢演变(比如k8sistio等云原生词汇的兴起)。一个优秀的赏金猎人,其武器库也应该是活的。

  1. 定期更新:关注gh_mirrors/wo/wordlists等项目的更新,吸收新的词汇。
  2. 从每次测试中学习:将每次测试中发现的有效、有趣的新子域名模式(例如prd-eu-loggingcustomer-onboarding-api)记录下来,整理成你自己的“专属词库”。
  3. 分享与交流:在合规的社区内,与其他猎人交流高效的字典条目和组合模式。但注意,不要分享涉及具体客户或未公开漏洞的敏感信息。

说到底,gh_mirrors/wo/wordlistsInventory字典提供的是一个强大的、模式化的思维框架。它教会我们的,不是盲目地增加字典体积,而是如何像目标的系统管理员一样去思考,去预测资产的命名规律。当你能够将这种思维内化,并结合具体目标的情报进行深度定制时,你发现的就不仅仅是几个子域名,而是通往目标核心资产的隐蔽通道。这才是漏洞赏金猎人从“脚本小子”走向“战术专家”的关键一步。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 7:32:04

免费解锁显卡隐藏性能:3大技巧让你的电脑游戏体验飙升

免费解锁显卡隐藏性能&#xff1a;3大技巧让你的电脑游戏体验飙升 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿、画面撕裂而烦恼吗&#xff1f;今天我们来分享一个完全免费的系统优化…

作者头像 李华
网站建设 2026/7/1 7:25:46

别再死磕物理天线了!用MATLAB玩转虚拟阵列扩展:四阶累积量、外推、内插三大方法实战对比

虚拟阵列扩展技术实战&#xff1a;三大算法MATLAB实现与工程选型指南在雷达系统与无线通信领域&#xff0c;物理天线阵列的规模往往受限于成本、空间和硬件复杂度。当我们需要提升系统角度分辨率时&#xff0c;传统思路是增加物理天线数量——但这意味着更高的硬件投入和系统复…

作者头像 李华
网站建设 2026/7/1 7:24:40

审稿人视角:你的稳健性检验真的“稳健”吗?避开这5个常见误区

审稿人视角&#xff1a;你的稳健性检验真的“稳健”吗&#xff1f;避开这5个常见误区在学术研究的战场上&#xff0c;稳健性检验常常被视为论文的"护城河"——它本应是我们结论可靠性的最后防线&#xff0c;却往往沦为形式主义的牺牲品。作为经历过数十次同行评议的审…

作者头像 李华