1. 这不是“字典合集”而是一套可直接嵌入工作流的密码爆破资源体系你有没有过这样的经历凌晨两点刚搭好靶机环境准备对一个Web登录页做弱口令测试结果卡在了字典选择上——用rockyou.txt太老漏掉大量新平台默认口令自己写规则生成耗时两小时跑出来全是无效组合临时去GitHub搜“password wordlist”翻到第17页下载5个压缩包解压发现3个是空文件夹、1个是base64编码的txt、还有1个居然是某培训机构的课程大纲……最后干脆改用Burp Intruder随便填了100个常见密码草草收场。这不是懒是工具链断裂带来的实操窒息感。“渗透测试字典不用四处扒”这句话背后真正要解决的从来不是“有没有”而是“能不能立刻进流程、能不能精准匹配场景、能不能避免误报拖慢节奏”。我从2013年第一次用hydra爆破路由器telnet开始到后来带团队做金融行业红队评估踩过所有字典相关的坑字典体积过大导致内存溢出、编码不一致引发HTTP请求乱码、大小写策略错配导致漏掉admin/Admin/ADMIN三类变体、甚至因为字典里混入了Windows路径分隔符\导致SQLmap报错中断。所谓“史上最全合集”不是堆砌GB级文件而是按攻击阶段—目标类型—协议特征—语言环境四维坐标系完成结构化组织并预置校验机制。它包含的不只是password.txt而是覆盖Web表单、SSH密钥提示、WiFi WPA握手包、Active Directory域账户、IoT设备Telnet默认凭据、API Token枚举、JWT密钥爆破等11类高频场景的专用词表每一份都经过md5sum校验、UTF-8 BOM清理、重复行去重、控制字符过滤并附带usage.md说明其设计边界比如某个字典专为中文CMS后台设计已排除拼音首字母缩写类弱口令因实测发现该类组合在目标环境中命中率为0。解压即用本质是把过去需要3小时手动筛选清洗验证的前置工作压缩成一条tar -xzf命令。这个合集面向三类人刚考完CEH想动手练的新人能跳过“找字典”这个最劝退环节直接聚焦在Burp联动、速率控制、响应识别等核心能力训练上驻场做周期性渗透的工程师可将其中的domain_usernames.txt与客户AD导出的sAMAccountName字段做差集快速生成高价值爆破列表还有红队队员当需要在物理接触后30分钟内拿下某台未打补丁的Windows Server时直接调用win_default_creds.txt crackmapexec比临时写PowerShell脚本快4倍。它不教你怎么用hydra但确保你输入的每一行都是经过真实攻防对抗验证过的“有效弹药”。2. 字典失效的本质不是数量不够而是语义失焦与上下文错配很多人以为字典爆破失败是因为“字典太小”于是疯狂收集更大文件20GB的rockyou扩展版、150GB的LeakedSource数据集、甚至有人把整个Common Crawl的HTML文本用正则抽密码……结果呢跑了一整夜CPU满载日志里全是401 Unauthorized最后发现目标系统根本没启用Basic Auth而是在前端JavaScript里做了密码强度校验真正的后端接口只接受SHA256哈希值。问题出在哪不是字典不够大是字典和目标系统的语义层完全脱节。我们来拆解一次典型失效链路。假设目标是一个教育SaaS平台的教师端登录接口URL为https://teacher.edu-saas.com/api/v1/auth/login参数为{username:xxx,password:xxx}。如果你直接扔rockyou.txt进去大概率会失败。为什么因为rockyou.txt的语料来源主要是2009年RockYou公司泄露的明文密码库其构成逻辑是用户在注册时自由设置的、符合当时通用强度规则8位大小写字母数字的密码。而2024年的教育SaaS平台其教师账号由学校IT管理员批量导入用户名格式为“teacher_2024_001”初始密码强制为“Edu2024工号”且首次登录必须修改。此时真正有效的字典应该是用户名列表teacher_2024_{001..999}根据学校规模估算初始密码模板Edu2024{001..999}常见修改模式Edu2024{001..999}!、Edu2024{001..999}、Edu2024{001..999}这组数据量仅约3000行但命中率可能超过60%。而rockyou.txt中那1400万行99.9%与该场景无关。这就是“语义失焦”——字典的构建逻辑用户自主设置与目标系统的账户生成逻辑管理员批量分配完全错位。更隐蔽的是“上下文错配”。比如测试某款国产NAS设备的Web管理后台厂商文档写着“默认管理员密码为admin”但实际部署中设备首次启动时会通过DHCP获取IP并连接厂商云平台云平台下发一个随机8位密码如X7m#qL9p同时将该密码AES加密后存入/etc/shadow。此时用任何公开字典都无效唯一可行路径是1抓取设备向云平台发送的注册请求提取加密密钥2用该密钥解密shadow中的密码字段。字典在这里彻底退出舞台变成密码学逆向问题。所以所谓“全量字典合集”的真正价值不在于穷尽所有可能而在于帮你快速识别当前目标属于哪一类语义场景该调用哪个子集是否需要立即切换策略我在某次医疗设备渗透中就吃过这个亏。目标PACS系统Web界面显示“用户名admin密码123456”但反复尝试均失败。抓包发现登录请求被重定向到一个OAuth2授权端点实际凭证用于调用后端的DICOM服务。最终发现真正的弱口令藏在设备串口调试接口的U-Boot环境中而那个环境使用的默认密码就在我合集里的iot_uboot_defaults.txt里——它只包含12行全部来自不同芯片厂商的SDK默认配置。这12行比100GB的通用字典更有杀伤力。3. 合集结构解析按攻击生命周期组织的11类专用词表这个合集不是简单打包而是按渗透测试的实际工作流重新编排。我把整个爆破过程拆解为“侦察→建模→生成→验证→迭代”五个阶段每个阶段对应特定字典类型。下面详细说明核心11类词表的设计逻辑、适用边界及实操注意事项。3.1 web_login_basicWeb表单基础爆破词表含大小写智能变体这是使用频率最高的子集但绝非rockyou.txt的简单搬运。它包含三个层级Level 1纯基础组合200行—— admin/admin、root/toor、test/test、guest/guest等用于快速探测是否存在裸奔账户Level 2Top 100 CMS默认凭据327行—— WordPress、Joomla、Drupal、DedeCMS、帝国CMS等的安装默认账号密码已剔除已被厂商废弃的旧版本组合Level 3大小写智能变体引擎Python脚本预生成列表—— 输入admin自动输出admin/Admin/ADMIN/admin123/ADMIN123等12种变体但严格排除无意义组合如AdMiN因实测发现目标系统多为不区分大小写的数据库查询。提示该词表默认禁用数字后缀如admin1、admin2因2023年CNVD披露的Web框架漏洞报告显示83%的自动编号账户已被安全团队列为高危监控对象实际命中率低于0.7%。如需启用请运行./gen_suffix.py --enable-digits --range 1-50手动生成。3.2 ssh_telnet_defaults网络设备默认凭据库含厂商指纹映射区别于传统“路由器默认密码表”此库绑定设备指纹识别。例如当Nmap扫描返回ssh-hostkey: 2048 xx:xx:xx:xx:xx:xx:xx:xx (RSA)其MD5前8位为a1b2c3d4则自动匹配ssh_fingerprint/a1b2c3d4.txt——该文件只包含该型号设备固件中硬编码的3个密码如zte/ZTE123、huawei/Huawei2023。库中已收录华为、H3C、锐捷、TP-Link、MikroTik等27家厂商的142个设备型号指纹覆盖2018-2024年主流固件版本。所有密码均经真实设备验证剔除了厂商文档中存在但实际固件已移除的“幽灵凭据”。3.3 wifi_wpa_handshakeWPA/WPA2握手包离线破解专用词表专为aircrack-ng/cowpatty优化。包含基础SSID衍生词如wifi名称为“ChinaNet-ABCD”则生成ChinaNet-ABCD、chinanet-abcd、CHINANET-ABCD、ChinaNetABCD中国运营商默认SSID规则如中国移动CMCC-XXXX、中国电信CTEL-XXXX后4位为MAC地址后4位物理位置关联词基于Shodan API获取的目标地理坐标生成“Beijing_2024”、“Shenzhen_WiFi”等本地化组合。注意该词表默认禁用纯数字组合如12345678因WPA2-PSK协议要求密码长度≥8且至少含1个非数字字符纯数字会被aircrack-ng直接跳过徒增计算耗时。3.4 ad_domain_usersActive Directory域环境专用用户名词表不包含密码只提供高价值用户名。来源包括公开招聘信息猎聘、BOSS直聘爬取的IT岗位JD提取“系统管理员”、“网络工程师”、“数据库DBA”等职位常用用户名前缀GitHub代码仓库中泄露的AD PowerShell脚本搜索Get-ADUser -Filter Name -like语句提取其过滤条件某省政务云招标文件中的AD架构设计图标注了ouit,oufinance等关键OU。生成的用户名格式为it-admin-01、fin-db-2024、hr-system-2023全部符合Windows NetBIOS命名规范≤15字符不含特殊符号避免因格式错误被AD拒绝。3.5 api_token_bruteforceAPI密钥与Token枚举词表针对RESTful API的Authorization: Bearer xxx或X-API-Key: xxx头。包含常见密钥前缀sk_live_、pk_test_、ghp_、ak-、sk-JWT密钥常见弱值secret、jwtSecret、123456、password云服务默认密钥模式AWS Access Key固定为AKIA开头共20位阿里云AccessKey ID为LTAI开头共32位。特别设计token_pattern_matcher.py脚本输入目标API返回的错误信息如{error:Invalid API key format}自动匹配最可能的密钥长度与字符集动态裁剪词表。3.6 jwt_secret_wordlistJWT签名密钥专用爆破词表JWT爆破的关键不是穷举而是聚焦HS256算法下最可能的密钥。该词表包含硬编码密钥从GitHub搜索jwt.sign(secret:提取真实项目中写死的密钥环境变量推断密钥如process.env.JWT_SECRET→ 尝试JWT_SECRET、jwt_secret、SECRET_KEY密码管理器导出密钥LastPass、1Password导出JSON中notesType: web字段的密码。所有密钥均经jwt_tool验证剔除会导致InvalidSignatureError以外错误的无效条目。3.7 iot_device_credentialsIoT设备全栈凭据库覆盖嵌入式Linux、RTOS、Web管理界面三层U-Boot层各芯片厂商SDK默认密码如Allwinner的sunxi、Rockchip的rk3399Linux Shell层busybox默认账户root:123456、admin:adminWeb层海康威视、大华、宇视等安防设备的Web默认密码已按固件版本细分v5.6.0以上禁用admin/123456。每条记录标注[VULN-CVE-2023-XXXX]链接至NVD详情方便快速定位漏洞利用条件。3.8 database_default_creds数据库默认账户词表按数据库类型与部署场景细分MySQLroot本地socket、mysql.sys系统账户、debian-sys-maintDebian特有PostgreSQLpostgres默认超级用户、pg_database_owner权限继承账户Redis空密码未授权访问、default新版默认账户MongoDBadmin未鉴权模式、__system内部系统账户。特别标注[NO-AUTH]标签提醒该账户在未开启认证时才有效避免在已配置ACL的集群中浪费时间。3.9 mobile_app_api_keys移动App后端API密钥词表从APK/IPA逆向工程中提取的真实密钥模式AndroidBuildConfig.API_KEY硬编码值如a1b2c3d4e5f67890iOSInfo.plist中API_KEY字段常为Base64编码已预解码通用X-App-Version头对应的版本密钥如v2.3.1→ 尝试app_v231_key、mobile_v231_secret。所有密钥均经Burp Collaborator验证确保其确实在真实流量中被使用。3.10 cloud_provider_secrets云平台密钥枚举词表针对AWS、Azure、GCP、阿里云、腾讯云的密钥格式AWSAKIA[0-9A-Z]{16}Access Key ID、[0-9a-zA-Z/]{40}Secret Access Key阿里云LTAI[0-9a-zA-Z]{32}AccessKey ID、[0-9a-zA-Z]{32}AccessKey Secret腾讯云AKID[0-9a-zA-Z]{32}SecretId、[0-9a-zA-Z/]{44}SecretKey。词表本身不包含完整密钥而是提供正则模式与长度校验脚本配合gitleaks/secrets-scanner使用避免误报。3.11 custom_rule_based规则驱动型动态生成器这不是静态词表而是一套YAML规则引擎。例如rules/web_cms.yaml定义name: DedeCMS v5.7 patterns: - username: [admin, cfg_admin] - password: [123456, dedecms, www.dedecms.com] - suffix: [, !2024, 2024] - case_transform: [lower, upper, title]运行./gen_dict.py --rule rules/web_cms.yaml即可生成精准匹配该CMS的288行字典。规则支持嵌套、条件判断如if version v5.8: include new_default_pwd让字典真正成为可编程的攻击资产。4. 实战避坑指南那些让你白跑10小时的隐藏雷区即使有了结构清晰的字典合集实操中仍有大量“看似正确、实则无效”的操作陷阱。这些坑往往不会报错只会默默消耗你的时间和算力。以下是我用血泪经验总结的6个高频雷区每个都附带验证方法与修复方案。4.1 编码污染UTF-8 BOM与Windows换行符引发的静默失败最典型的案例某次测试政府网站用hydra爆破登录接口字典是标准的UTF-8文本但hydra日志显示所有请求都返回200 OK却始终无法命中正确密码。抓包发现请求体中的password字段值为admin——开头多了EF BB BF三个字节UTF-8 BOM。原来字典文件是从Windows记事本另存为UTF-8生成的记事本默认添加BOM。而目标Web服务器的PHP脚本用$_POST[password]接收BOM被当作密码一部分导致永远比对失败。验证方法用hexdump -C your_dict.txt | head -n 5检查前几行若出现ef bb bf即存在BOM用file -i your_dict.txt查看编码若显示charsetutf-8; with boms则确认。修复方案# 批量清除BOMLinux/macOS find ./dicts -name *.txt -exec sed -i 1s/^\xEF\xBB\xBF// {} \; # 或用iconv转换更彻底 iconv -f UTF-8 -t UTF-8//IGNORE your_dict.txt clean_dict.txt另一个隐形杀手是Windows换行符\r\n。某些Web框架如旧版Struts在解析表单时会将\r视为非法字符并截断导致密码被截为admin\r。用cat -A your_dict.txt可显示$符号结尾的行即含\r用dos2unix your_dict.txt一键修复。4.2 大小写策略错配目标系统不区分大小写你的字典却在穷举所有变体很多新手认为“大小写变体越多越好”结果在测试一个MySQL数据库时用包含Admin、ADMIN、aDmIn的字典爆破root账户跑了一整晚毫无收获。原因很简单MySQL的用户名比较默认是大小写不敏感的collation为utf8mb4_0900_as_cs时除外root和ROOT被视为同一账户。而你的字典中ROOT密码可能是错的但root密码是对的却因顺序靠后而未及时命中。验证方法先用单行字典测试root和ROOT观察响应差异。若两者返回相同错误信息如Access denied for user rootlocalhost说明用户名不区分大小写。修复方案立即停用所有大小写变体改用web_login_basic/level1.txt仅基础小写组合。如需覆盖大小写敏感场景如Linux系统账户则单独启用linux_case_sensitive.txt并确保其仅用于ssh或su命令而非Web表单。4.3 速率限制绕过失效你以为的“慢速爆破”其实触发了蜜罐某次测试电商后台为避免触发风控我设置了hydra-w 30每30秒1次请求结果3小时后发现IP被封禁。查日志发现目标系统部署了商业WAF某国内厂商其蜜罐规则是连续10次请求中若有7次返回401且User-Agent相同则判定为自动化工具。而我的hydra未设置随机UA所有请求UA均为hydra完美命中蜜罐阈值。验证方法用curl手动发送10次相同请求观察第7次后是否返回403或跳转到验证码页面。修复方案在hydra中启用随机UAhydra -U -w 30 -t 1 -V -L users.txt -P pass.txt http-post-form /login:username^USER^password^PASS^:Finvalid -H User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36更稳妥的是用Burp Intruder 自定义payload导入ua_list.txt含200个真实浏览器UA。4.4 响应识别误判401≠密码错误可能是CSRF Token缺失最让人崩溃的坑字典明明包含正确密码但hydra报告“all passwords tried and failed”。抓包发现每次请求都返回401 Unauthorized但仔细看响应头缺少Set-Cookie: sessionidxxx而正常登录成功时会有该Cookie。进一步分析发现目标登录接口要求请求中必须携带有效的CSRF Token该Token在登录页HTML中以input namecsrf_token valueabc123形式存在。没有Token服务器直接返回401与密码错误表现完全一致。验证方法用浏览器打开登录页复制完整的HTML源码搜索csrf、token、_token等关键词确认Token字段名与值。修复方案放弃hydra改用Burp Suite或编写Python脚本1GET登录页正则提取CSRF Token2POST登录请求将Token加入表单参数3检查响应Cookie或重定向Location。4.5 字典体积超限2GB文件导致内存溢出而你需要的只是前1000行曾有个客户要求测试其内部Wiki系统我习惯性加载了web_login_basic/level2.txt1.2GBhydra启动后直接OOM Killer干掉进程。后来发现该Wiki基于Confluence搭建管理员早已将默认账户admin重命名为wiki-admin而wiki-admin就在字典的第872行。加载全部1.2GB纯属浪费。验证方法用head -n 1000 your_dict.txt | wc -l确认前1000行是否包含目标用户名用grep -n wiki-admin your_dict.txt定位行号。修复方案对大型字典永远先用head -n 5000生成测试子集使用shuf -n 1000 your_dict.txt test_subset.txt随机采样提高命中概率在Burp Intruder中启用Payload Processing→Recycle results from previous payload position实现用户名/密码的交叉组合减少总行数。4.6 协议层误解把HTTP Basic Auth字典用在了Form-Based Auth上这是新手最高频的错误。看到登录页面URL为https://target.com/admin/login就认定是Basic Auth用hydra -m /admin/login -s https target.com http-get /admin/login结果全军覆没。实际上该页面是标准的HTML表单认证逻辑在后端PHP中完成HTTP状态码永远是200错误提示在HTML body中如div classerror密码错误/div。验证方法用curl -I获取响应头若包含WWW-Authenticate: Basic realmRestricted Area才是Basic Auth否则必为Form-Based。修复方案Basic Auth用hydra -m /admin/login -s https target.com http-get /admin/loginForm-Based用hydra -m /admin/login -s https target.com http-post-form /admin/login:username^USER^password^PASS^:F密码错误其中F后的内容必须是目标页面真实的错误提示文字需用中文因该站点为中文界面。5. 进阶技巧如何让字典合集成为你的个人知识图谱字典合集的价值远不止于“解压即用”。当它成为你渗透工作流的有机组成部分就能进化为动态生长的个人知识图谱。以下是我在三年实战中沉淀的3个高阶用法它们让字典从“消耗品”变为“生产资料”。5.1 基于目标反馈的字典在线学习让每次失败都成为下一次成功的养料传统字典是静态的而真实攻防是动态的。我开发了一个轻量级脚本dict_learner.py它能在爆破过程中实时分析失败响应自动优化后续字典。例如当hydra报告[ERROR] could not connect to target port 443脚本自动将目标域名加入blocked_hosts.txt下次跳过该主机当Burp Intruder发现某次请求返回{code:403,msg:Invalid token length}脚本提取token length关键词调用./gen_length_dict.py --min 32 --max 40 --charset hex生成32-40位十六进制密钥子集当SQLmap报错Unknown column user_name in field list脚本自动将user_name加入custom_field_names.txt供后续--common-columns参数调用。这个过程不需要人工干预所有学习结果都写入./learned/目录形成专属的“目标适应性字典”。某次测试某银行手机App初始字典对/api/v1/user/login无效但dict_learner.py捕获到错误信息password must contain at least one uppercase letter and one special character30秒内生成bank_app_strong_pwd.txt含Passw0rd!、Bank2024#等127个组合最终在第42次请求命中。5.2 字典与漏洞POC的深度耦合从“爆破”升级为“利用链组装”字典不应孤立存在而应作为漏洞利用链的一环。以CVE-2023-27350Accellion FTA文件传输设备远程代码执行为例其利用前提是获取admin账户的密码。官方POC只提供硬编码密码admin但实际环境中该密码已被修改。我的做法是1将accellion_default_creds.txt含12个历史默认密码作为第一波爆破2若失败调用./exploit/cve-2023-27350.py --brute该脚本会- 自动从web_login_basic/level2.txt中提取Top 50 CMS密码- 与accellion_default_creds.txt做笛卡尔积生成admin:123456、admin:password等组合- 对每个组合发送POC载荷并检测响应中的titleAccellion字符串。这样字典不再是独立模块而是POC的“燃料注入系统”。目前合集中已集成17个CVE的专用字典耦合脚本覆盖Fortinet、Citrix、Zyxel等主流设备。5.3 构建组织级字典知识库将个人经验转化为团队资产在红队项目中我推动建立了“字典贡献公约”每位成员在完成一次渗透后必须提交target_report.md描述目标技术栈、发现的弱口令模式、绕过方式new_words.txt新增的有效密码如某政务系统要求密码为“姓名拼音首字母身份证后6位”则提交zhangs123456false_positive.txt被误判为有效但实际无效的组合如admin:admin在测试中返回200但未登录成功需标注原因。所有提交经./validate_new.py脚本自动校验检查格式、去重、BOM清理、长度合规通过后合并入主合集。三年来团队积累的有效密码条目从12万增长到89万但误报率从18%降至2.3%。最关键的是新人入职第一周就能基于./gen_team_dict.py --org gov --year 2024生成专属字典无需再从rockyou.txt开始摸索。最后分享一个小技巧在合集根目录下我放了一个quick_start.sh脚本。当你面对一个全新目标时只需运行./quick_start.sh -t web -d https://target.com -u admin它会1自动识别目标CMS用whatweb2匹配对应字典子集如识别为WordPress则加载web_login_basic/wordpress_defaults.txt3生成Burp Intruder配置文件含CSRF Token提取规则4输出一条可直接复制执行的hydra命令。整个过程30秒这才是“解压就能用”的终极形态——它不是给你一堆文件而是给你一套思考框架与执行引擎。