Kali Linux下使用John the Ripper破解Office与压缩文件密码实战

发布时间:2026/7/27 23:21:31
Kali Linux下使用John the Ripper破解Office与压缩文件密码实战 1. 项目概述为什么我们需要了解密码恢复技术在信息安全领域密码恢复Password Recovery或密码破解Password Cracking是一个既敏感又极具实用价值的话题。我从事网络安全工作多年经常遇到同事或客户因为忘记重要文档密码而束手无策的情况。一份关键的财务报告、一个包含历史数据的压缩包或者一份加密的项目计划书一旦密码丢失就可能意味着重要信息的永久封锁或巨大的时间成本。因此掌握一套合法、合规且高效的密码恢复方法对于IT从业者、安全研究人员乃至普通用户处理自己的数据都是一项宝贵的技能。Kali Linux作为业界领先的渗透测试和安全审计发行版内置了John the Ripper简称John这款久负盛名的密码安全审计工具。它并非为非法入侵而生其设计初衷是帮助系统管理员检测弱密码评估系统口令的安全性。今天我们就聚焦于一个非常具体的场景利用Kali Linux中的John工具集来尝试恢复或“破解”那些常见的、由我们自己创建但不幸遗忘密码的办公文档如Microsoft Office的.docx、.xlsx、.pptx和压缩文档如ZIP、RAR、7z的密码。请注意本文所有操作均假设你拥有对目标文件的合法操作权限例如处理自己遗忘密码的文件或在获得明确授权的安全评估范围内进行。任何未经授权的密码破解行为都是非法且不道德的。2. 核心工具与环境准备2.1 Kali Linux与John the Ripper简介Kali Linux是一个基于Debian的Linux发行版专为数字取证和渗透测试设计。它预装了数百种安全工具开箱即用省去了我们逐个安装配置的麻烦。对于密码破解任务它提供了近乎完美的环境。John the Ripper则是一款开源的密码破解软件支持多种加密算法和哈希类型。它的强大之处在于其模块化设计和高度的可定制性。John不仅支持传统的字典攻击和暴力破解还支持基于规则的智能攻击可以极大地提高破解效率。在Kali中John通常以john命令的形式存在并且其功能通过不同的“格式”format来支持各种文件类型。对于办公文档和压缩包我们需要使用特定的格式标识符来告诉John如何处理这些文件。2.2 环境准备与必要工具安装虽然Kali Linux预装了John但为了处理办公文档和压缩包我们通常需要一些额外的工具来先将这些文件转换为John能够理解的哈希格式。这个过程称为“提取哈希值”。首先确保你的Kali系统是最新的sudo apt update sudo apt upgrade -y接下来安装几个关键的工具zip2john/rar2john/office2john.py这些是John工具集的一部分用于从ZIP、RAR和Office文档中提取密码哈希。在较新的Kali中它们可能已经随john包安装。如果没有可以通过安装john的完整版本来获取sudo apt install john -y安装后你可以在/usr/share/john/目录下找到office2john.py等脚本。为了方便我们可以将其链接到系统路径或直接使用绝对路径调用。7z2john.pl用于提取7-Zip文件的哈希。它可能不默认包含在john包中。我们可以从John的GitHub仓库获取或者使用其他方法如hashcat的7z2hashcat。一个简单的方法是安装hashcat-utils它也包含许多有用的转换工具sudo apt install hashcat-utils -y安装后7z2john.pl通常位于/usr/share/hashcat-utils/目录下。它是一个Perl脚本需要Perl环境Kali已预装。注意不同版本的Kali或John这些工具的名称和位置可能略有差异。使用find或locate命令搜索*2john*是快速定位它们的好方法。例如find /usr -name *2john* 2/dev/null。3. 密码破解的核心原理与攻击模式在开始实操前理解John的工作原理至关重要。它本质上是一个“猜测-验证”引擎。它不会“解密”文件而是尝试无数个可能的密码用每个密码去生成一个哈希值然后与从目标文件中提取出来的那个正确的哈希值进行比对。如果两者匹配那么这个密码就是正确的。John支持几种主要的攻击模式我们将根据场景灵活运用字典攻击Dictionary Attack这是最常用、最高效的方法。它需要一个密码字典一个包含大量常见密码、短语、单词变体的文本文件。John会按顺序尝试字典中的每一个词。字典的质量直接决定了成功率。Kali自带了一些字典位于/usr/share/wordlists/例如著名的rockyou.txt需解压sudo gzip -d /usr/share/wordlists/rockyou.txt.gz。暴力破解Brute-force Attack尝试所有可能的字符组合。这是最彻底但也是最慢的方法因为随着密码长度和字符集的增加尝试次数呈指数级增长。通常作为最后的手段或用于已知密码格式如6位纯数字的情况。掩码攻击Mask Attack是暴力破解的智能变种。当你对密码的格式有一定了解时例如“已知以2024开头后跟4位小写字母”你可以定义一个掩码如2024?l?l?l?l让John只尝试符合该模式的密码从而大幅减少尝试空间提高效率。混合攻击Hybrid Attack结合字典和暴力破解。例如在字典中每个词的后面或前面添加几位数字或符号进行尝试。John的智能之处在于其“规则”Rules系统。它可以对字典中的单词进行各种变换如大小写转换、颠倒顺序、添加后缀/前缀、leet语替换如a换成e换成3等。这能从一个基础字典衍生出海量的密码变体极大地提高了命中弱密码的概率。4. 实战步骤从提取哈希到破解密码下面我们以最常见的ZIP和Office文件为例演示完整的破解流程。4.1 第一步提取密码哈希这是最关键的一步我们必须先从加密文件中提取出John能识别的哈希字符串。针对ZIP文件zip2john target.zip zip_hash.txt这条命令会分析target.zip文件将其中的加密哈希信息提取出来并保存到zip_hash.txt文件中。打开这个文件你会看到一串以$pkzip2$或类似开头的长字符串这就是ZIP文件的密码哈希。针对Office文件.docx .xlsx等python3 /usr/share/john/office2john.py document.docx office_hash.txt使用office2john.py脚本处理Office文档。注意现代Office文档2007及以上版本后缀为.docx.xlsx.pptx使用基于AES的强加密而旧版.doc.xls使用较弱的加密。脚本会自动识别并提取对应的哈希保存到office_hash.txt。哈希值通常以$office$*或$oldoffice$*开头。针对RAR文件rar2john archive.rar rar_hash.txtRAR格式的加密通常也比较强。提取的哈希以$RAR3$*或$RAR5$*开头分别对应RAR3和RAR5格式。针对7z文件perl /usr/share/hashcat-utils/7z2john.pl archive.7z 7z_hash.txt调用Perl脚本来处理7z文件。7z格式默认使用AES-256加密非常强。实操心得提取哈希的过程可能会因为文件损坏、不支持的加密算法或工具版本问题而失败。如果遇到错误首先检查文件是否完好其次确认使用的工具版本是否支持该文件类型。对于特别新的Office版本可能需要更新office2john.py脚本可以从John的GitHub项目页面获取最新版。4.2 第二步选择合适的攻击模式与字典哈希提取成功后我们就可以让John开始工作了。首先从字典攻击开始因为它最快。基本字典攻击john --wordlist/usr/share/wordlists/rockyou.txt zip_hash.txt--wordlist或-w指定使用的密码字典路径。最后是包含哈希的文件名。John会开始尝试rockyou.txt字典中的每一个密码。如果破解成功它会将结果输出到终端并默认保存到~/.john/john.pot文件中。你可以随时按CtrlC中断进程。使用规则增强字典攻击john --wordlist/usr/share/wordlists/rockyou.txt --rules zip_hash.txt添加--rules参数John会启用内置的规则集对字典中的每个单词进行智能变换尝试更多可能性。查看破解结果无论进程是否结束你都可以查看已破解的密码john --show zip_hash.txt这个命令会列出该哈希文件zip_hash.txt中所有已破解的密码及其对应的用户名对于多文件压缩包用户名可能是文件名。4.3 第三步进阶攻击策略如果字典攻击失败了我们还有更多策略。掩码攻击假设我们怀疑密码是8位纯数字例如生日。john --mask?d?d?d?d?d?d?d?d zip_hash.txt--mask定义掩码。?d表示一位数字0-9。其他常用掩码符号?l小写字母?u大写字母?s特殊符号?a所有可打印字符。例如密码格式是“大写字母6位数字感叹号”掩码可以写为--mask?u?d?d?d?d?d?d!增量模式纯暴力破解这是John最强大的暴力破解模式它会自动尝试所有字符组合并智能地先从短密码、常见字符开始。john --incremental zip_hash.txt--incremental模式非常耗时通常需要指定具体的字符集和长度限制否则可能永无止境。你可以使用预定义的增量模式如--incremental:Digits仅数字或自定义。恢复会话与多任务John支持会话恢复。如果你中断了破解进程再次运行相同的命令它会自动从上次停止的地方继续。 你还可以使用--sessionsession_name参数给任务命名方便管理多个破解任务。john --wordlistbig_dict.txt --sessionmy_task zip_hash.txt之后恢复该任务只需john --restoremy_task5. 性能优化与实战技巧密码破解是计算密集型任务效率至关重要。5.1 利用GPU加速John本身主要利用CPU。对于支持GPU加速的哈希类型如NTLM MD5可以使用john的--formatraw-md5等格式并配合--device1,2参数尝试指定GPU但John对GPU的支持不如另一款神器Hashcat。对于Office和ZIP的哈希CPU破解是主流方式。如果你的任务极其繁重考虑将哈希导出用Hashcat在GPU上运行可能会快几个数量级。不过本文聚焦JohnHashcat是另一个话题。5.2 字典的学问字典是字典攻击的灵魂。除了Kali自带的你可以合并字典cat dict1.txt dict2.txt combined_dict.txt排序去重sort combined_dict.txt | uniq final_dict.txt避免重复尝试。根据目标定制如果目标是某公司员工可以收集公司名、产品名、当地常见词汇等制作专属字典。使用密码生成工具如crunch、cewl爬取网站生成字典来创建针对性字典。5.3 规则自定义John的规则文件通常位于/etc/john/john.conf或~/.john/john.conf。你可以学习其语法创建自己的规则。例如一个简单的规则为每个单词尝试首字母大写并添加“123”后缀[List.Rules:MyRules] c $1 $2 $3在命令行中使用john --wordlistdict.txt --rulesMyRules hash.txt5.4 分布式破解如果单机性能不足John支持分布式破解。你需要将哈希文件和工作负载分割到多台机器上分别运行John并确保它们使用不同的--session名或--node参数来分配任务范围。这需要一些脚本和网络配置适合大型项目。6. 常见问题排查与注意事项在实际操作中你肯定会遇到各种问题。这里记录一些典型的“坑”和解决方法。问题1zip2john提取哈希失败提示“不是zip文件”或“加密方法不支持”。排查首先用file命令确认文件类型file target.zip。有时文件扩展名可能是误导。其次确认ZIP文件是否真的加密了可以用7z l -slt target.zip查看属性。最后某些使用非常见加密算法或极高压缩级别的ZIP可能不被支持。尝试使用7z2john.pl处理有时有奇效。问题2office2john.py运行时报Python语法错误或导入模块失败。排查这通常是Python环境或脚本版本问题。确保使用python3。如果提示缺少oletools模块需要安装pip3 install oletools。直接从John的GitHub仓库下载最新版的office2john.py脚本通常能解决大多数兼容性问题。问题3John运行后毫无进展CPU占用率很低。排查首先检查哈希格式是否正确。用john --listformats | grep -i zip查看John支持的格式并用john --formatxxx hash.txt指定格式。例如对于现代Office哈希可能需要明确指定john --formatoffice2016 hash.txt。使用--test参数可以测试破解速度john --test --formatoffice2016。问题4字典攻击很久都没结果如何判断是否有希望排查使用john --status可以查看当前任务的进度、尝试速度、已尝试密码数量等信息。如果速度极慢如每秒几个密码而字典有上亿条那可能需要考虑优化字典或转向掩码攻击。如果速度尚可但一直没结果很可能密码不在当前字典中需要更换或扩充字典。问题5破解出了密码但用密码仍然打不开文件。排查这是最令人沮丧的情况。首先用john --show再次确认破解出的密码。其次可能是文件本身已损坏。还有一种可能是文件使用了双重加密或非标准的加密方式例如某些国产软件加密的压缩包。John破解的是它从文件中成功提取的那个哈希如果提取过程不完整或加密机制特殊即使哈希破解成功密码也可能不对。重要注意事项与法律风险重申合法授权仅对您拥有合法权限的文件进行操作。未经授权破解他人密码是违法行为。数据备份在尝试破解前最好对原始加密文件进行备份。虽然John是只读的但防止误操作总是好的。复杂度认知对于强密码长于12位混合大小写字母、数字、符号且无规律即使使用John在有限时间内破解的可能性也微乎其微。这项技术主要针对弱密码和常见密码。资源消耗暴力破解会长时间占用大量CPU资源让电脑发烫、风扇狂转。请合理安排时间。道德用途最好的用途是审计自己的密码习惯或者在企业环境中经授权进行安全意识培训演示弱密码的风险。7. 从破解到防御提升自身密码安全经过一番实战我们深刻体会到弱密码在自动化工具面前是多么不堪一击。作为从业者我们更应该从中学习如何设置强密码长度优于复杂度一个14位的纯小写字母随机密码如correcthorsebattery其组合空间远大于一个8位混合复杂密码如Pssw0rd。优先考虑增加密码长度。使用密码短语用一串随机的单词组合成句子更容易记忆且强度高例如BlueCoffeeTableRainbow!。绝对避免常见模式生日、姓名、键盘连续键如qwerty、常见单词简单替换如Pssw0rd都在破解字典和规则覆盖范围内。使用密码管理器为每个网站和服务生成并保存唯一、复杂的长密码你只需要记住一个主密码即可。启用双因素认证在重要账户上开启2FA即使密码被破解还有第二道防线。最后我个人在多次密码恢复任务中的体会是技术工具再强大其效率也高度依赖于目标的“人性化弱点”。大部分成功的案例都源于用户使用了可预测的密码。因此这套技术不仅是一把钥匙更是一面镜子照出我们自身在密码安全习惯上的不足。花时间为自己建立一套科学的密码管理体系其长期价值远大于掌握破解工具。当你下次再遇到锁住的文件时希望你是那个从容不迫、知道如何合法合规解决问题的人而不是那个因为使用了123456作为密码而追悔莫及的人。