
1. 项目概述定位Kali Linux的密码字典作为渗透测试和安全研究的从业者我们经常把Kali Linux比作一个“瑞士军刀”式的工具箱。里面琳琅满目的工具固然重要但真正决定“开锁”效率的往往是那些不起眼的“钥匙”——也就是密码字典。很多新手甚至一些有经验的朋友在拿到Kali准备进行密码破解、暴力枚举或者社工字典生成时第一个卡壳的问题就是“我知道要用字典但字典文件到底在哪” 这个问题看似简单却直接关系到后续所有工作的起点。找不到字典就像战士上了战场发现没带子弹再好的工具也成了摆设。今天我们就来彻底解决这个问题。Kali Linux作为基于Debian的顶级安全发行版其强大之处不仅在于集成了数百个安全工具更在于它为你预先部署好了一系列经过实战检验的密码字典。这些字典并非随意堆放而是有组织、有分类地存放在系统的特定目录中。了解它们的存放位置、内容构成以及如何高效地使用是每一位安全研究者必须掌握的基本功。无论你是想进行WPA/WPA2握手包破解、各类服务如SSH, FTP, RDP的暴力破解还是进行自定义字典的扩展都从这里开始。2. 核心字典仓库位置与结构解析当你打开Kali Linux的终端那些预装的字典文件主要集中存放在两个核心目录下/usr/share/wordlists和/usr/share/seclists。这两个目录构成了Kali字典生态的基石但它们的设计哲学和内容侧重有所不同。2.1/usr/share/wordlists经典与核心字典库这个目录是Kali Linux传统上的字典主仓库许多老牌工具如John the Ripper, Aircrack-ng套件默认或历史习惯上会指向这里。它的结构相对直观。目录结构示例/usr/share/wordlists/ ├── dirb/ │ ├── common.txt │ ├── extensions_common.txt │ └── ... ├── dirbuster/ │ ├── directory-list-2.3-medium.txt │ └── ... ├── fasttrack.txt ├── fern-wifi/ │ └── common.txt ├── metasploit/ │ └── ... ├── nmap.lst ├── rockyou.txt.gz ├── sqlmap.txt └── wfuzz/ └── ...核心文件详解rockyou.txt.gz这是安全领域最著名、使用最广泛的密码字典之一。它源自2009年一家名为RockYou的公司的数据泄露事件包含了超过3200万个真实用户密码。在Kali中它通常以压缩格式.gz存放。你需要先解压才能使用gunzip /usr/share/wordlists/rockyou.txt.gz解压后得到的rockyou.txt文件体积庞大约130MB是进行通用密码破解的首选。它包含了从简单数字序列到复杂短语的各种密码反映了真实的用户密码设置习惯。dirb/与dirbuster/目录这两个目录下的字典专门用于Web目录和文件枚举。dirb字典通常更精简而dirbuster包含的列表更全面例如directory-list-2.3-medium.txt包含了数千个常见的目录和文件名是进行Web路径爆破的利器。fasttrack.txt一个相对精简但针对性强的字典包含了许多常见默认密码、弱密码和简单变体适合在需要快速尝试时使用。nmap.lstNmap脚本引擎NSE中某些脚本如http-auth-finder可能会用到的用户名密码列表。注意/usr/share/wordlists下的内容可能会因Kali的版本和安装选项而略有不同。有些字典可能需要额外安装软件包如wordlists包才会完全出现。2.2/usr/share/seclists现代化与综合性字典集如果说/usr/share/wordlists是经典武器库那么/usr/share/seclists就是现代化、模块化的综合军火库。SecLists项目是一个由安全社区维护的庞大集合内容远超传统密码字典涵盖了用户名、密码、目录路径、数据模式、模糊测试载荷等。在较新的Kali版本中它通常作为默认安装的一部分是更推荐使用的资源。目录结构示例部分/usr/share/seclists/ ├── Discovery/ │ ├── DNS/ │ ├── Web-Content/ │ └── ... ├── Fuzzing/ │ ├── SQLi/ │ └── ... ├── Passwords/ │ ├── Common-Credentials/ │ │ ├── 10-million-password-list-top-100.txt │ │ ├── 10-million-password-list-top-1000.txt │ │ ├── 10-million-password-list-top-1000000.txt │ │ └── best110.txt │ ├── Leaked-Databases/ │ │ ├── rockyou.txt │ │ └── ... │ ├── Default-Credentials/ │ │ └── default-passwords.txt │ └── ... ├── Usernames/ │ ├── Top-usernames-shortlist.txt │ └── ... └── ...核心子目录解析Passwords/这是密码字典的核心区域。Common-Credentials/包含从“top 100”到“top 1000000”的分级密码列表方便你根据场景选择字典大小在效率和覆盖率之间取得平衡。best110.txt是一个极简但命中率不低的精选列表。Leaked-Databases/这里存放着来自各种泄露事件的密码集当然也包括解压后的rockyou.txt。你可能会发现多个版本的泄露数据。Default-Credentials/收集了路由器、摄像头、网络设备、应用程序等的默认用户名和密码对于物联网IoT安全测试和内部网络渗透至关重要。Usernames/密码破解通常是“用户名密码”的组合攻击。这个目录提供了常见的用户名列表如Top-usernames-shortlist.txt可以与密码字典组合使用。Discovery/Web-Content/包含了比dirbuster更丰富、分类更细致的Web路径字典如针对特定CMSWordPress, Joomla、API路径、备份文件等的专用列表。Fuzzing/包含用于模糊测试的各种载荷如SQL注入、XSS、命令注入的测试字符串在Web应用测试中非常有用。实操心得在实际工作中我通常会优先从/usr/share/seclists中寻找资源。它的分类更科学更新更及时可以通过apt update apt upgrade seclists更新。对于密码破解我会根据目标情况选择字典快速扫描用Common-Credentials/下的top-1000或best110深度破解则使用Leaked-Databases/rockyou.txt或更大的列表。对于Web目录扫描Discovery/Web-Content/下的字典是我的首选。3. 字典的查找、验证与调用实战知道了字典在哪下一步就是如何快速找到并确认它们可用以及如何在工具中正确调用。3.1 使用命令行工具快速定位与探索在终端中我们可以使用一些简单的命令来高效地浏览和查找字典。列出目录内容# 查看 /usr/share/wordlists 下的主要文件和目录 ls -la /usr/share/wordlists/ # 查看 /usr/share/seclists 下的分类目录 ls -la /usr/share/seclists/使用find命令进行搜索如果你记得字典的部分名字find命令是神器。# 在整个 /usr/share 目录下查找包含“rockyou”的文件 find /usr/share -name *rockyou* -type f 2/dev/null # 在 seclists 中查找所有 .txt 密码文件 find /usr/share/seclists/Passwords -name *.txt -type f | head -20使用locate命令更快但需要更新数据库# 首先更新 locate 数据库可能需要sudo sudo updatedb # 然后搜索 locate rockyou.txt | grep /usr/share预览字典内容在决定使用一个大字典前先看看它的内容风格和大小是明智的。# 查看文件大小 ls -lh /usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt # 查看文件前10行 head -10 /usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt # 查看文件后10行 tail -10 /usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt # 统计文件总行数即密码数量 wc -l /usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt3.2 在常用安全工具中指定字典路径不同的工具指定字典参数的方式不同但原理相通将工具的字典参数指向文件的绝对路径或相对路径。Hydra (网络服务破解)# 破解SSH服务使用指定的用户名单和密码字典 hydra -L /usr/share/seclists/Usernames/Top-usernames-shortlist.txt -P /usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000.txt ssh://192.168.1.100 # 破解HTTP表单登录 hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.1.100 http-post-form /login.php:username^USER^password^PASS^:FincorrectJohn the Ripper (哈希破解)# 使用单破解模式默认会使用 /etc/john/john.conf 中定义的规则和字典 john --wordlist/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt hashes.txt # 使用指定的规则文件对字典进行变形 john --wordlist/usr/share/wordlists/fasttrack.txt --rules hashes.txtHashcat (强大的哈希破解)# 使用字典模式-a 0破解MD5哈希 hashcat -m 0 -a 0 target_hash.txt /usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-100000.txt # 结合规则进行更智能的破解 hashcat -m 0 -a 0 target_hash.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.ruleAircrack-ng (WiFi握手包破解)# 破解WPA/WPA2握手包 aircrack-ng -w /usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt captured_handshake.capGobuster/Dirb (目录枚举)# Gobuster 目录爆破 gobuster dir -u http://target.com -w /usr/share/seclists/Discovery/Web-Content/common.txt # Dirb 目录扫描 dirb http://target.com /usr/share/wordlists/dirb/common.txt实操心得在命令行中输入长路径容易出错。我常用的技巧是使用Tab键自动补全。例如输入hydra -P /usr/share/s后按Tab系统会自动补全为seclists/再继续按Tab可以遍历其子目录。另一个技巧是使用变量或别名来缩短常用字典路径。可以在~/.bashrc文件中添加alias rockyouecho /usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt alias top1000echo /usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000.txt这样在终端中直接输入hydra -P $(top1000) ...即可调用。4. 字典的管理、优化与自定义扩展仅仅会使用预装字典是不够的。专业的测试需要根据目标特性定制字典并管理好这些字典文件。4.1 字典的维护与更新更新SecLists由于SecLists是一个独立的项目你可以通过包管理器更新它。sudo apt update sudo apt upgrade seclists这能确保你获得最新的泄露密码集合和模糊测试载荷。安装额外的字典包Kali仓库中还有其他字典包。# 搜索与字典相关的包 apt search wordlist | grep -i wordlist # 例如安装一个可能包含本地化字典的包 # sudo apt install wfrench # 举例法语字典4.2 字典的优化处理技巧原始字典往往包含大量重复项、空行或不符合要求的条目直接使用会降低破解效率。去重与排序一个字典中重复的密码只会浪费CPU时间。# 对字典进行排序并去重结果保存为新文件 sort /path/to/your_wordlist.txt | uniq /path/to/wordlist_clean.txt # 如果想同时删除空行 grep -v ^$ /path/to/your_wordlist.txt | sort | uniq /path/to/wordlist_clean.txt大小写转换与规则应用许多密码是大小写敏感的。你可以生成一个包含大小写变体的字典。# 使用John the Ripper的规则引擎预生成变体更高效 # 首先创建一个只包含基础单词的小文件如 base.txt john --wordlistbase.txt --rules --stdout mutated_wordlist.txt # 使用简单的脚本进行首字母大写等变换 cat base.txt | awk {print toupper(substr($0,1,1)) tolower(substr($0,2))} capitalized.txt字典合并与分割# 合并多个字典 cat dict1.txt dict2.txt dict3.txt combined_dict.txt # 然后记得去重 # 分割大字典便于分阶段攻击或分布式破解 split -l 1000000 huge_dict.txt segment_ # 每100万行分割成一个文件4.3 根据目标信息生成自定义字典这是提升成功率的关键。利用收集到的目标信息公司名、人名、日期、特定术语生成高度相关的字典。使用crunch工具生成模式化字典crunch是Kali自带的字典生成器可以根据字符集和长度生成所有组合。# 生成所有6位数字密码000000-999999 crunch 6 6 0123456789 -o num_6.txt # 生成8-10位由小写字母和数字组成的密码 crunch 8 10 abcdefghijklmnopqrstuvwxyz0123456789 -o alpha_num_8-10.txt # 基于一个基础词和常见后缀如年份、特殊符号生成字典 echo “companyname” base.txt crunch 1 1 -p 2020 2021 2022 2023 ! # $ % base.txt suffixes.txt # 然后使用工具组合 base.txt 和 suffixes.txt使用Cewl爬取网站生成字典从目标网站中爬取单词生成基于其内容的字典。# 爬取目标网站深度为2最小单词长度5保存结果 cewl http://target-company.com -d 2 -m 5 -w target_words.txt # 可以结合参数忽略某些文件或获取更多元数据 cewl http://target-company.com -d 2 --with-numbers -a -w target_words_full.txt使用rsmangler进行深度单词变形rsmangler可以对一个基础单词列表进行极其复杂的变形大小写、前后缀、leet语转换、日期附加等。# 首先确保安装 # sudo apt install rsmangler # 准备一个基础单词文件如 target_keywords.txt rsmangler --file target_keywords.txt --output mangled_words.txt生成的mangled_words.txt文件可能会非常庞大但针对性极强。实操心得我通常会建立一个字典工作流。首先用cewl收集目标关键词其次用crunch根据已知规则如公司成立年份生成模式密码然后将收集到的关键词与rsmangler结合生成深度变形字典最后将所有生成的字典与rockyou.txt这类通用字典的精选部分如前10万条合并、去重、排序形成最终的“目标专属字典”。这个过程可以脚本化极大提升效率。5. 常见问题排查与高阶技巧在实际操作中你可能会遇到各种问题。这里记录了一些典型场景和解决方法。5.1 问题排查速查表问题现象可能原因解决方案运行工具时提示 “字典文件未找到” 或 “No such file or directory”1. 文件路径输入错误。2. 字典文件未解压如 rockyou.txt.gz。3. 字典文件被移动或删除。4. 在非Kali系统或定制化系统中路径不同。1. 使用ls命令确认文件是否存在并用Tab键补全路径。2. 对.gz文件使用gunzip解压。3. 使用find或locate命令重新搜索文件。4. 查阅所用工具的文档或使用dpkg -L package-name查看软件包安装的文件列表。使用字典破解时速度极慢或系统卡顿1. 字典文件过大如完整的 rockyou.txt超出内存处理能力。2. 硬盘I/O成为瓶颈特别是使用机械硬盘。3. 破解规则rules过于复杂。1. 使用字典的子集如 top-10000。使用head -n 10000 big_dict.txt small_dict.txt提取。2. 考虑将字典放在SSD上或使用hashcat的--optimized-kernel-enable等优化选项。3. 简化规则或分阶段攻击先简单字典再复杂规则。工具如 Hydra报告 “无效密码” 或 所有尝试都被拒绝但确认服务可用1. 字典格式问题如包含Windows换行符^M。2. 目标服务有账号锁定策略或复杂的验证码。3. 网络连接不稳定或超时设置过短。1. 使用dos2unix命令转换字典文件格式dos2unix wordlist.txt。2. 在Hydra中使用-t参数减少并发线程增加-w等待时间或尝试绕过锁定策略非技术手段。对于验证码可能需要其他方法。3. 调整超时参数如Hydra的-W。seclists目录为空或不存在1. Kali安装时未选择默认工具集或是最小化安装。2. 系统是其他Linux发行版未安装SecLists。1. 手动安装SecLists包sudo apt update sudo apt install seclists。2. 也可以从GitHub克隆项目sudo git clone https://github.com/danielmiessler/SecLists.git /usr/share/seclists。自定义字典在工具中不生效1. 字典文件权限问题不可读。2. 字典内容包含特殊字符工具解析出错。3. 字典路径包含空格或特殊字符未用引号括起。1. 使用chmod r my_wordlist.txt赋予读取权限。2. 使用cat -A my_wordlist.txt检查不可见字符清理文件。3. 使用绝对路径并用引号包裹-P “/home/kali/My Lists/pass.txt”。5.2 高阶技巧与最佳实践字典的“分层攻击”策略不要一上来就用最大的字典。采用分层策略第一层超精简字典10-100条包含最可能的密码如password,123456,admin,目标公司名目标年份等。第二层精选通用字典1万-10万条如seclists/Passwords/Common-Credentials下的top-10000。第三层大型泄露字典百万级如rockyou.txt。第四层自定义生成字典基于目标信息生成的字典。第五层规则变形攻击在已有字典基础上使用John或Hashcat的规则进行智能变形。 这种策略能在最短时间内获得最大概率的成功。利用hashcat的“组合攻击”模式如果你有一个常见的用户名列表和一个常见的密码列表可以尝试所有组合。# 模式 -a 1 (组合攻击) hashcat -m 0 -a 1 hashes.txt usernames.txt passwords.txt这比分别尝试每个用户名效率高得多。字典缓存与内存化对于需要反复使用的超大字典可以考虑将其加载到内存文件系统如/dev/shm中以大幅提升读取速度。cp /usr/share/wordlists/rockyou.txt /dev/shm/ hashcat -m 0 -a 0 hash.txt /dev/shm/rockyou.txt注意/dev/shm是临时内存空间重启后数据会丢失。关注字典的编码特别是从Windows环境复制或下载的字典可能使用UTF-16或GBK编码而Linux工具默认期望UTF-8。使用iconv命令转换iconv -f GBK -t UTF-8 gbk_dict.txt utf8_dict.txt建立个人字典库随着项目积累你会生成很多针对不同行业、不同技术栈的有效字典。建议建立一个结构化的个人字典库并做好注释。~/my_wordlists/ ├── generic/ │ ├── top1000.txt │ └── common_chinese.txt ├── by_industry/ │ ├── healthcare_keywords.txt │ └── finance_glossary.txt ├── by_tech/ │ ├── router_defaults.txt │ └── iot_common_passwords.txt └── scripts/ ├── generate_from_cewl.py └── merge_and_dedup.sh定期维护和更新这个库它的价值会随着时间的推移而剧增。