☰
Fuzz字典实战指南:分类、制作与高效使用技巧
2026/10/19 10:12:27 网站建设 项目流程

简介:一份面向Web安全测试的fuzz字典合集,覆盖目录扫描、SQL注入、XSS、SSRF、文件扩展名、参数名等常见测试场景,适合渗透测试人员、安全运维工程师及CTF练习者结合Burp Suite、sqlmap、Wfuzz、webdirscan等工具使用。压缩包共192个文件,以123个txt字典文件为主,辅以21个Python辅助脚本、17张示意图以及markdown说明文档,脚本可用于自定义字典生成或测试流程辅助,图片和文档便于快速理解不同用例的适用位置,整体大小约24.86MB。目前已有1436人学习下载,在安全测试群体中具备一定参考价值。字典由其他团队整理搬运,量较大且场景覆盖全面,可免去自行收集与拼接的重复工作;使用时建议选择空闲时段运行,以确保字典能充分跑完并观察输出结果。压缩包内另含xlsx表格、rar归档、pdf说明等文件,可进一步了解字典来源或扩展使用方法。

1. 先说清楚:fuzz字典到底是什么玩意

做安全测试、接口排查、漏洞挖掘的朋友,对fuzz字典应该都不陌生。我最早接触这东西,是从目录扫描开始的,拿着一本字典去扫目标站点的目录结构,看看有没有敏感路径、备份文件、管理后台之类的东西。后来慢慢发现,fuzz字典的用途远不止扫目录这么简单,参数名模糊测试、接口枚举、报错信息探测、SQL注入和XSS的payload组合,全都依赖一本好字典。

说白了,fuzz字典就是一堆精心组织过的“输入样本”,你用这些样本去喂给目标系统,观察它的反应,然后从反应里判断哪里可能有漏洞、哪里配置不当、哪里存在暴露面。字典的质量,直接决定你的测试覆盖率。工具再强,字典一塌糊涂,结果就是瞎忙半天啥也没测出来。

这篇文章不是给你一个“下载链接完事”的敷衍整理,而是把字典背后的分类逻辑、制作方法、使用技巧、常见坑一次性讲清楚。适合刚入门的测试新手,也适合用了一段时间但一直“字典荒”的进阶选手。不管你是想直接拿来就用,还是想学会自己造字典,这篇文章都能帮到你。

2. 字典到底分几类?先搭好认知框架

很多人的字典存在一个巨大的问题:什么都有,但什么都测不全。这不能怪字典本身,而是因为fuzz字典从来不是“一本”字典,而是一整套按用途拆分的字典集合。我习惯把字典按用途分成五类,这样一个清晰的框架能让你在遇到具体场景时,知道该拿哪本出来用。

2.1 目录与路径类字典:最基础也最常用

这一类字典的核心价值是发现目标系统上“不该暴露”的资源。能扫出/admin、/backup、/.git、/phpmyadmin这种路径,往往意味着后续有进一步利用的空间。目录字典的构造思路主要有三种:

  • 基于常见CMS和框架的默认路径,比如WordPress的/wp-content、ThinkPHP的/runtime、Spring Boot的/actuator。
  • 基于备份文件的命名习惯,比如web.zip、www.tar.gz、1.sql、index.php.bak。
  • 基于自动化工具的历史数据沉淀,比如gobuster、dirsearch 自带字典的汇总。

实战里我发现,目录字典的价值不在于“大”,而在于“准”。一份包含几万条冷门路径的字典,和一份包含几百条高概率路径的字典,在真实目标上可能效果差不多。所以我更推荐把目录字典做成多级结构,先跑一份高频小字典快速摸底,再用大字典做深度覆盖,效率会高很多。

2.2 参数与接口类字典:最容易出成果的方向

很多测试人员忽略参数fuzz,但这恰恰是ROI最高的方向之一。试想一个场景:目标系统有一个接口/api/user/info,正常参数是id,你用它传入一个数字能查出用户信息。但如果你用参数字典去fuzz,跑出uid、username、mobile、email这些隐藏参数,可能就能直接越权查别人的数据。这种漏洞在真实业务里太常见了。

参数字典的构造来源包括:

  • 常见Web框架的默认参数,比如page、limit、offset、callback、debug。
  • 从已公开的接口文档、Swagger导出信息中抽取参数名。
  • 用JS文件分析工具,从目标站点的JavaScript文件里提取参数名。
  • 日常渗透测试中的经验积累,比如is_admin、role、permission这类和权限相关的参数名。

我自己的经验是,针对单个目标深度测试时,结合JS文件分析出来的参数名去fuzz,远比拿通用字典硬跑有效。通用字典只能帮你“广撒网”,想捞到大鱼,还是得自己动手做定制化参数表。

2.3 漏洞探测类字典:payload只是字典的另一种形态

提到payload,很多人觉得那是SQLMap、XSS平台那些工具自动生成的,不算“字典”。但从fuzz的视角看,payload本质就是字典里的一条条特殊样本。你需要准备的核心payload字典包括:

  • SQL注入探测特征串:'、"、)、1 AND 1=1、1 AND 1=2这类能触发数据库报错或逻辑差异的样本。
  • XSS探测特征串:<script>alert(1)</script>、<img src=x onerror=alert(1)>这类能验证前端过滤和输出编码的样本。
  • 路径穿越与文件读取特征串:../../../../etc/passwd、....//....//....//etc/passwd这类编码绕过样本。
  • 命令注入特征串:;id、|id、`id`、$(id)这类能执行系统命令的样本。
  • 其他类型:LDAP注入、XPATH注入、模板注入、XXE、SSRF,都有各自的特征串集合。

有个容易踩的坑:payload字典里大量内容是重复的。不同漏洞类型之间有很多“万能串”,比如一个简单的单引号,既是SQL注入探测的重要样本,也是某些后端解析器报错的关键输入。如果不去重,字典会膨胀得很厉害,扫描速度会明显下降。我的做法是建一个“全量库”存去重后的所有样本,再按漏洞类型维护一份带标签的索引,需要跑哪类测试就提取哪类。

2.4 账号口令类字典:不只是弱口令那么简单

从热词里能看到“wifi密码字典包”“wifi密码字典文件下载”这类搜索,说明口令字典的需求量很大。结合我自己的使用场景,口令字典主要分两大类:一是系统弱口令,二是应用业务口令。

系统弱口令字典,比如admin/admin、root/123456、test/test这种,主要用来测路由器、摄像头、数据库、中间件、SSH、RDP 这类设备的默认口令和弱口令。应用业务口令则要根据目标的具体场景定制,电商类平台常用user/123456、mobile/13800138000这种,论坛类平台可能有admin/bbs123、moderator/passw0rd这类。

口令字典一个很重要的原则是“组合优于单跑”。不要只跑单个用户名字典和单个密码字典,推荐的做法是把用户名和密码合并成“用户名:密码”格式,用一份现成的组合字典直接爆破,能省掉很多无效请求。我维护的字典里,专门有一份“top 10000弱口令组合”格式的文件,就是每行一个username:password,中间用冒号隔开,可以直接喂给Hydra、超级弱口令检查工具这类程序。

2.5 特殊扩展类字典:容易被忽略但很有用

这部分包括一些特殊年份、特殊字符串、自定义编码的字典,比如:

  • 年份字典:2023、2024、2025,以及123456、666666、888888这类重复数字。
  • 键盘路径字典:qwerty、1qaz2wsx、qazwsxedc。
  • 拼音与姓氏字典:zhangwei、liqiang、wangfang这类中国人常用的名字拼音组合。
  • 生日字典:19900101、800101这类格式的日期组合。
  • 随机字符串字典:用于检测系统是否对超长输入、特殊字符输入有异常处理。

别小看这些“杂项”字典,很多时候你前面所有常规字典都跑完了没结果,最后就是这些非常规组合中的一个命中了目标。我在一次授权测试里,某后台管理密码爆破跑了四五个常规字典都没成功,最后用键盘路径字典里的1qaz@WSX直接进去了,这个字典项就是从特殊扩展类里来的。

3. 字典不是“凑出来”的,是“养出来”的

直接下载别人整理好的大字典,拿着就去扫。刚开始我确实这么干过,但后来发现很多大而全的字典里充斥着大量无效条目,有的字典甚至从上世纪就没人维护了里面全是index.php、default.asp这类老古董。真正好用的字典,是自己持续积累、持续优化的结果。

3.1 公开渠道的字典资源,怎么挑怎么用

网上流传比较广的fuzz字典项目,比如SecLists、PayloadsAllTheThings、fuzzdb、danielmiessler的字典集合,都是很好的起点。但有一点必须强调:不要直接把整个仓库clone下来扔到工具里跑,因为东西太多太杂,跑起来慢不说,误报率还特别高。

我用公开字典的习惯是这样的:先把项目整体clone到本地,建立索引说明每一份文件是干什么用的。然后按照自己的测试场景去翻看每份字典的内容,把里面真正有用的条目抽取出来,合并进自己的主字典。举个例子,SecLists里大概有一千多个字典文件,真正适用于我日常Web测试的,也就是其中的一百多个,其他很多是用于网络设备、工控系统、云平台的特殊场景。

对齐一下:直接使用大而全的字典,可能测试覆盖率是很高,但所需要的时间成本同样高。更好的做法是准备多套字典组合,比如“快扫小字典”和“深度大字典”,先用小的快速摸底,再用大的做深入覆盖,把时间用在刀刃上。

3.2 从工具日志里沉淀自己的“私有字典”

我的字典库来源最大头,其实不是从网上下载的,而是自己在实际测试过程中积累的。每一次、每一个目标的扫描结果,我都会定期整理,哪些路径命中过敏感目录,哪些参数名成功触发了异常,哪些弱口令真的登录成功了,这些信息全部沉淀下来,慢慢就成了一本极具个人特色的专属字典。

这一步很关键:别人给你的字典是“别人的经验”,你自己沉淀的字典才是“你自己的武器”。而且这种字典有很强的时效性,比如某段时间内某个特定框架爆出了新目录遍历漏洞,你把这个新路径加进字典,后续再遇到同框架的目标,就能比别人更快一步发现入口。

3.3 小脚本的威力:按需生成组合字典

有些字典是没法靠“手工收集”完成的,需要代码来生成。这里我分享一个自己经常用的字典生成脚本思路,它可以根据你提供的词根,自动组合生成一批候选词:

#!/usr/bin/env python3 import itertools words = [] with open("base_words.txt", "r", encoding="utf-8") as f: for line in f: word = line.strip() if word: words.append(word) separators = ["", "-", "_", ".", "@", "#"] suffixes = ["", "123", "123456", "2023", "2024", "!", "666", "888"] result = set() for word in words: for sep, suffix in itertools.product(separators, suffixes): result.add(word + sep + suffix) result.add(sep + word + suffix) with open("generated_dict.txt", "w", encoding="utf-8") as f: for item in sorted(result): f.write(item + "\n") print(f"generated {len(result)} items")

这段脚本的原理其实很简单:你准备一批基础词,比如公司名、人名、项目代号,然后脚本自动把常见的连接符和尾巴跑一遍,生成一份组合字典。像admin_2024、test-123456、1qaz@wsx这种形式,都是通过类似方法生成的。脚本跑的越多,你的字典质量越有保障。

4. 字典用对地方,效果翻倍的实用技巧

字典本身是死的,怎么用它才是关键。同一个目标,用同一个字典,换不同的人去操作,最终结果可能完全不一样。下面分享几个我在实际使用中总结的技巧,能有效提升你的fuzz效率。

4.1 按场景拆分字典,精确打击

我有好几套字典文件,分别对应不同的使用场景:

  • dir_small.txt:2000条左右的高频目录路径,用于快速扫描和初步摸底。
  • dir_full.txt:5万条以上的完整目录路径,用于专项深度扫描。
  • param_web.txt:Web常见参数名集合,用于GET/POST参数fuzz。
  • param_api.txt:API接口常见参数名集合,比如access_token、api_key、signature。
  • payload_sqli.txt:SQL注入特征串集合。
  • payload_xss.txt:XSS特征串集合。
  • pass_top1000.txt:最常用的1000个弱口令。
  • user_pass_top10000.txt:1万条常见的用户名密码组合。

使用前先判断目标是什么类型的系统,再选择对应的字典。比如目标是一个Spring Boot微服务接口,那你用dir_small.txt根本扫不出东西,用param_api.txt去fuzz接口参数才有意义。目标是个老PHP站点,那dir_small.txt里的路径大概率能命中一大片。

4.2 控制并发与速度,避免漏报和封禁

很多人拿字典去跑目标,上来就把并发拉到100、200,跑得是快,但有两个问题:一是目标WAF或风控很快会触发封禁,导致后半段测试全部无效;二是过大的并发会让目标系统响应变慢,防火墙看到异常流量后自动加入黑名单,你后续的正向测试也做不了了。

我的经验是:先在低并发下跑一遍小字典,观察目标响应情况,确认没有封禁后再逐渐调大并发跑完整字典。如果目标是生产环境,更要控制节奏。宁可跑慢一点,也不要把目标弄崩或者触发封禁,一旦封禁,整个测试就中断了。

另外,扫描时设置超时时间也很重要,默认的10秒超时在目标响应慢时会拖慢整体进度,我一般调到3-5秒。响应码的处理也要注意,不是只有200才算发现,很多系统对不存在的路径返回200但内容长度有差异,对存在的路径返回403或500,所以状态码、响应长度、响应时间三个指标要交叉对比。

4.3 巧用Burp Suite跑字典,比命令行更直观

说到fuzz,不得不提Burp Suite。Intruder模块可以轻松把字典文件导入进去,对指定参数进行批量fuzz。我常用的一个策略是:先用浏览器访问目标接口,把请求包发到Intruder,标记要fuzz的参数位置,导入字典,设置好线程数和超时,然后观察每个payload的响应包长度、状态码、关键词变化。

还有一个很多人没注意到的点:Burp的Intruder跑完之后,可以根据响应包长度排序,快速定位“异常长度”的响应。比如所有正常响应长度都在1000字节左右,突然有一个响应是500字节或3000字节,这个就有可能是特殊参数或特殊payload触发了不同逻辑,应该重点人工检查。这个技巧帮我发现过不少隐藏接口和参数。

4.4 字典去重和排序,优化你的字典文件

字典文件的质量,直接影响扫描效率和准确率。很多从网上下载的字典没有经过清洗,里面充斥着重复条目、空行、乱码、超长字符串,还有一些包含空格和特殊符号的条目,某些工具解析时会出错。我拿到一份新字典,第一件事就是清洗:

# 去重并保持顺序 awk '!seen[$0]++' dict_raw.txt > dict_clean.txt # 删除空行和只包含空白字符的行 sed -i '/^[[:space:]]*$/d' dict_clean.txt # 按字母顺序排序 sort dict_clean.txt -o dict_clean.txt # 统计行数 wc -l dict_clean.txt

另外,字典条目的排序也有讲究。我的经验是:把出现概率最高的条目放在字典最前面。比如目录扫描,/admin、/login、/api、/backup这些一定要放在文件开头。因为很多扫描器的行为是“遇到第一个命中的目录,就会停止对后续目录的扫描”,至少我的自定义脚本是这样处理的。字典前面的条目越“命率高”,扫描越早出成果。

5. 常见问题排查:字典fuzz踩坑实录

5.1 为什么跑了半天,一个结果都没有?

这是最常见的场景。字典也下了,工具也配了,跑了大几个小时,结果全是一堆无效请求。我第一反应通常是:

  • 先确认目标系统是否能正常访问,手动浏览器打开目标,看一看响应码和响应内容,排除是网络问题还是目标本来就不可达。
  • 再确认字典格式对不对,检查一下文本编码,UTF-8和GBK混用会出现乱码,某些带中文的字典项目如果编码不对,发出去的payload完全是乱码,目标自然不会有正常反应。
  • 最后确认是不是被WAF拦截了,如果目标有Web防火墙,你发出去的请求可能全部返回了403或302,看起来像什么都没扫到,实际上是请求被拦截了。

5.2 字典文件太大,扫描器直接卡死或报错

有些“史上最全”字典动辄几百MB甚至上GB,很多工具无法一次性读取,或者读取后内存直接爆炸。这种时候不要硬跑,先把字典拆分或做抽样。

我一个常见的做法是:先用head -n 5000 dict_full.txt > dict_small.txt取前面5000条做快速试探,如果这些高频条目都没命中,再考虑接跑完整字典。如果你用的是脚本而不是现成工具,可以考虑“按行读取,分批发送”的方式,每次读1000行,处理完再读下一批,这样内存占用就很低。

5.3 编码问题:为什么某些条目扫描时变成乱码?

字典文件里的中文、特殊字符、emoji(如果有的话)在不同系统间流转时,很容易出现编码不一致的问题。Windows下编辑的文件默认可能是GBK,拿到Linux上跑就变乱码。排查方法很简单:

# 用file命令查看字典文件编码 file dict.txt # 统一转成UTF-8 iconv -f GBK -t UTF-8 dict_gbk.txt > dict_utf8.txt

特殊字符保存为UTF-8时也可能触发问题,比如某些payload包含URL编码格式的字符如%27、%3C,这类字典条目在扫描时要确认工具是否会自动做URL编码,如果自动编码了,可能二次编码导致payload失效,需要配置工具关闭自动编码再试。

5.4 误报太多,不知道怎么筛选真实结果

即使字典很好用,扫描出来的结果也一定有大量误报。我的策略是:不盲目相信任何工具的报告,所有扫描结果都要回到原始请求和响应上去人工验证。关键判断指标有三个:响应状态码是否在预期范围内、响应内容长度是否异常、响应体中是否包含特定关键词。

比如目录扫描出一个/backup.zip,可是HTTP状态码是403或405,这有可能是目标防火墙统一返回的,不代表文件真实存在。真正有效的做法是手动在浏览器里访问它,如果下载下来一个文件,并且文件内容能读,那才是100%确认。如果是参数的fuzz,发现某个参数名引发了5xx错误,要手动用Burp重放一次请求,对比有该参数和无该参数的响应差异,确认不是随机故障。

6. 最后分享一点个人心得

从最早只知道下一份“万能字典”到处跑,到现在能根据目标类型灵活搭配、按需生成定制化字典,这个过程我踩过不少坑,也积累了不少经验。最开始我也迷信“大而全”,总想着手里的字典越多越好,但实际测试下来,效果反而不理想。后来我才慢慢明白,一份好字典的核心不是“数量多”,而是“覆盖面准确”。

我的建议是:与其把时间花在“找字典”上,不如把时间花在“整理字典”上。拿到任何一份新字典,先花一点时间看结构、做分类、去重清洗,然后在实际测试中持续补充你自己发现的“新路径”“新参数”“新payload”,让字典成为你的私人武器。

如果你现在手头还没有一套像样的字典体系,可以从模仿开始:先准备一套基础的高频目录字典、一套常用的参数名字典、一套经典的payload字典,再配合本文提到的小脚本,慢慢积累和迭代。用不了半年,你就会发现,自己的字典比网上随便下载的“史上最全”好用得多。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询