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

子域名枚举实战:Inventory字典在资产发现中的高级应用 1. 项目概述从“扫目录”到“挖子域”的思维跃迁在漏洞赏金的实战中很多朋友尤其是刚入门的猎人常常会陷入一个误区拿到一个目标第一反应就是打开扫描器挂上通用字典对着根域名一顿猛扫。这种“广撒网”式的目录爆破在如今防护日益完善的Web应用面前效率已经大打折扣。真正的突破口往往藏在更前置、更广阔的战场上——那就是子域名枚举。一个未被主站安全团队充分覆盖的子域名可能就是通往核心系统的后门或是存放着敏感信息的测试环境。今天要聊的就是一个能极大提升你子域名发现能力的“利器级”字典来自gh_mirrors/wo/wordlists项目中的Inventory字典。这不是一个简单的单词列表而是一个经过精心设计和实战验证的资产发现引擎专门用于在模糊测试中帮你“猜”出那些隐藏的、未被公开记录的子域名。简单来说这个字典的核心价值在于“智能生成”。它不像传统字典那样只是静态的单词堆砌如admin、test、api而是内置了一套组合逻辑能够动态生成高可能性的子域名模式。例如它知道公司常用dev-、stg-作为前缀知道项目常用-api、-cdn作为后缀也知道将公司名、产品名、地理位置进行各种排列组合。当你用它对一个目标比如example.com进行子域名爆破时它实际上是在进行一场高密度的、有依据的“猜测”从而覆盖那些自动化工具可能遗漏但实际却存在的资产。这套字典尤其适合那些资产庞大、业务线复杂的企业目标。安全团队可能专注于www、mail、vpn等核心服务的防护但对于成百上千个由不同业务部门临时搭建的子系统、测试站、第三方服务接入点难免会有疏漏。而Inventory字典就是帮你找到这些疏漏的“探针”。接下来我会详细拆解这个字典的设计哲学、核心用法以及如何将它融入你的自动化工作流实现从“碰运气”到“精准打击”的进阶。2. 核心思路为什么是“Inventory”字典而非其他在深入实操之前我们必须先理解为什么gh_mirrors/wo/wordlists项目中的Inventory字典值得你专门去研究和应用。市面上子域名字典很多从著名的subdomains-top1million-5000.txt到fierce-hostlist.txt各有侧重。Inventory字典的独特之处在于其“资产清单”的设计思维。2.1 传统字典的局限性大多数通用子域名字典的生成逻辑基于两个来源公共数据集从各种扫描项目、证书透明度日志CT Log、DNS记录中收集的全球子域名。常见词汇像admintestapimobile等高频技术或功能词汇。它们的优点是覆盖面广缺点是“噪声”大且缺乏针对性。对一个特定的目标公司mail.google.com这样的记录毫无意义。更重要的是它们无法有效发现那些“非公开”但“符合内部命名规范”的资产。比如一个公司内部可能用project-alpha-staging.example.com来命名一个测试环境这种模式在通用字典里几乎不可能出现。2.2 “Inventory”字典的生成逻辑Inventory字典的构建思路更接近一个“资产建模”的过程。它通常会包含以下几个层次的词汇和规则环境与角色前缀这是最核心的一层。它系统性地收集了软件开发、运维、部署中所有可能的环境标识。开发相关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服务与功能中缀/后缀描述资产提供的服务类型。通用服务api,cdn,assets,static,img,js,download后端服务service,backend,svc,microservice管理界面admin,manager,console,control移动与客户端mobile,m,app,client组合与连接符规则这是“智能”的体现。字典不仅提供单词还隐含了组合模式。短横线连接dev-api,staging-cdn,prod-us-east点号分隔在某些生成工具中会直接生成dev.api.example.com这样的完整子域名。数字序列与前缀/后缀结合如jenkins01,node-1,cluster-2a。目标上下文融合高级用法中工具如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.txtSubfinder的暴力破解相对轻量适合作为快速补充。3.2.3 使用 Gobuster 或 FFUF 进行DNS爆破这是最直接的字典爆破方式。Gobuster的dns模式非常适合此场景。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 字典的“精修”与“定制化”不要直接使用原始字典。这是最重要的一条原则。去重与排序如前所述这是基本操作。根据目标行业裁剪如果你的目标是金融公司可以强化secureonlinebankingtrade等词汇如果是游戏公司则关注gamesdkplayercdn等。适当删减完全无关的词汇能减少请求量。融合目标情报从目标的官网、招聘信息、新闻稿中提取产品名、项目代号如“Project Aurora”、品牌名。从已发现的子域名中递归提取单词。例如发现devops.internal.example.com 则把devops和internal加入你的自定义字典。使用工具如altdns 它可以基于已知子域名和提供的词汇列表生成大量的排列组合如前后缀添加这与Inventory字典的思路异曲同工可以结合使用。4.2 速率控制与隐蔽性大规模的DNS爆破很容易被防御系统识别并屏蔽。降低速率在所有工具中设置较低的线程数-t 20或更低和延迟。gobuster dns有-z参数禁用进度条减少特征。使用公共DNS解析器不要直接向目标的权威DNS服务器发起大量查询。使用1.1.1.18.8.8.8或dns.google等公共DNS。大部分工具都支持指定解析器。gobuster dns -d example.com -w wordlist.txt -r 8.8.8.8:53 -t 10分布式与延迟对于非常重要的目标可以考虑将爆破任务分散到多个VPS并使用随机延迟脚本模拟人类操作。4.3 结果验证与优先级排序爆破会产生大量结果其中包含很多无效的NXDOMAIN不存在的域名。你需要快速筛选出有效的。DNS解析验证使用massdns、puredns等工具用高质保的解析器列表对爆破结果进行快速解析验证过滤掉无法解析的。HTTP/S存活探测对解析成功的域名使用httpx或nuclei的http模板进行快速存活探测获取状态码、标题、技术栈。这是筛选出“有趣”目标的关键一步。优先级排序状态码200302403可能隐藏后台500可能暴露错误信息的都值得关注。标题和内容包含admindashboardloginteststagingdebug等关键词的页面优先级最高。技术栈识别出老旧框架如Struts2、未授权访问的API文档如Swagger UI、开发调试界面如PHPMyAdmin Jenkins的应立即标记为高危。4.4 一个经典的踩坑案例我曾在对一个大型互联网公司进行授权测试时使用了未经裁剪的巨型通用字典进行子域名爆破。几分钟后扫描IP被全线封禁不仅侦察无法继续还触发了客户的安全告警需要额外沟通解释。教训与改进侦察前置在爆破前先用subfinder、amass passive、crt.sh等被动方式尽可能收集信息。用这些信息来“喂养”和定制你的爆破字典。从小规模开始先使用精简的、高价值的字典如精心修剪过的Inventory字典核心部分进行试探性扫描观察响应和是否触发防护。设立监控点在扫描的同时用一个已知存在的子域名如www.target.com作为“金丝雀”定时访问。如果这个也访问不了了说明你的扫描行为已经被识别并采取了全局封禁应立即停止。沟通在授权测试开始前明确告知客户你的测试范围和方法包括可能会进行子域名枚举获得对方的理解和白名单如果可能。5. 超越爆破Inventory字典的进阶应用场景Inventory字典的价值不止于子域名爆破。它的“资产模式”思维可以应用到更广的领域。5.1 虚拟主机vHost发现很多公司会在同一个IP上通过虚拟主机托管多个不同的网站或服务。这些vHost的名字往往就符合Inventory字典的模式。你可以用FFUF或Gobuster的vhost模式进行枚举。# 使用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 done5.4 与自动化扫描框架集成你可以将基于Inventory字典的枚举模块集成到像nuclei这样的自动化扫描框架的工作流中。例如先使用自定义的字典枚举子域名和vHost然后将存活的资产自动送入nuclei进行漏洞检测实现从资产发现到漏洞初筛的全自动化。6. 持续维护与迭代你的武器库最后Inventory字典不是一成不变的。IT世界的命名习惯也在缓慢演变比如k8sistio等云原生词汇的兴起。一个优秀的赏金猎人其武器库也应该是活的。定期更新关注gh_mirrors/wo/wordlists等项目的更新吸收新的词汇。从每次测试中学习将每次测试中发现的有效、有趣的新子域名模式例如prd-eu-loggingcustomer-onboarding-api记录下来整理成你自己的“专属词库”。分享与交流在合规的社区内与其他猎人交流高效的字典条目和组合模式。但注意不要分享涉及具体客户或未公开漏洞的敏感信息。说到底gh_mirrors/wo/wordlists的Inventory字典提供的是一个强大的、模式化的思维框架。它教会我们的不是盲目地增加字典体积而是如何像目标的系统管理员一样去思考去预测资产的命名规律。当你能够将这种思维内化并结合具体目标的情报进行深度定制时你发现的就不仅仅是几个子域名而是通往目标核心资产的隐蔽通道。这才是漏洞赏金猎人从“脚本小子”走向“战术专家”的关键一步。