引言
在本实验中,你将使用强大的密码破解工具 John the Ripper 来探索破解受密码保护的 Microsoft Office 文档(DOCX、XLSX、PPTX)的过程。我们将使用 office2john.py 从 Office 文件中提取密码哈希(hash),然后将此哈希提供给 John the Ripper 进行破解。本实验将演示一个实际场景中的步骤,帮助你理解弱密码对 Office 文档的安全影响。
创建一个受密码保护的 DOCX 文件
在此步骤中,你将创建一个简单的 DOCX 文件并为其设置密码保护。该文件随后将在后续步骤中用于提取和破解其密码哈希(hash)。
首先,让我们安装 libreoffice-writer 来创建 DOCX 文件。
sudo apt install -y libreoffice-writer
安装完成后,打开 LibreOffice Writer。
libreoffice --writer &
一个新的 LibreOffice Writer 窗口将会打开。
- 输入一些文本,例如,“This is a test document.”
- 前往
File->Save As...。 - 在
Save As对话框中,导航到/home/labex/project/。 - 输入
secret.docx作为文件名。 - 勾选
Save with password复选框。 - 点击
Save。 - 在
Set Password对话框中,在Enter password和Confirm password字段中都输入password123作为密码。 - 点击
OK。 - 关闭 LibreOffice Writer。
验证 secret.docx 文件是否存在于你的 ~/project 目录中。
ls -l ~/project/secret.docx
-rw-r--r-- 1 labex labex XXXX Month XX XX:XX /home/labex/project/secret.docx
使用 office2john 从 DOCX 中提取哈希(Hash)
在此步骤中,你将使用 office2john.py 脚本(它是 John the Ripper 套件的一部分)从你创建的 secret.docx 文件中提取密码哈希(hash)。这个哈希(hash)就是 John the Ripper 将要尝试破解的目标。
首先,找到 office2john.py 脚本。它通常位于 /usr/share/john/ 目录中。
find /usr/share/john/ -name office2john.py
/usr/share/john/office2john.py
现在,使用 office2john.py 从 secret.docx 中提取哈希(hash),并将其保存到名为 hash.txt 的文件中。
python3 /usr/share/john/office2john.py ~/project/secret.docx > ~/project/hash.txt
显示 hash.txt 的内容以查看提取的哈希(hash)。
cat ~/project/hash.txt
secret.docx:$office$*2007*100000*256*16*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX
输出将显示一个以 secret.docx:$office$... 开头的长字符串,这就是你的密码哈希(hash)。
使用 John the Ripper 破解 DOCX 哈希(Hash)
既然你已经提取了哈希(hash),现在你将使用 John the Ripper 来破解它。在本演示中,我们将使用一个简单的单词列表(wordlist),因为我们的密码是“password123”,这是一个常用的单词。
John the Ripper 自带一个默认的单词列表,位于 /usr/share/john/password.lst。让我们使用这个单词列表。
john --wordlist=/usr/share/john/password.lst ~/project/hash.txt
John the Ripper 将开始处理哈希(hash)。如果密码在单词列表(wordlist)中,它会很快找到它。
Using default input encoding: UTF-8
Loaded 1 password hash (Office, 2007/2010/2013/2016 [MD5/SHA1/SHA256/SHA512 RC4/AES])
Will run till all hashes are cracked, by default
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (secret.docx)
1g 0:00:00:00 DONE (20XX-XX-XX XX:XX) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Session completed.
破解完成后,你可以使用 --show 选项查看已破解的密码。
john --show ~/project/hash.txt
secret.docx:password123
1 password hash cracked, 0 left
此输出确认 John the Ripper 已成功破解 secret.docx 的密码为 password123。
对 XLSX 和 PPTX 文件重复操作
在此步骤中,你将对 XLSX(Excel)和 PPTX(PowerPoint)文件应用相同的流程,以演示 office2john.py 和 John the Ripper 在不同 Office 文档类型上的工作方式相似。
首先,安装 libreoffice-calc 和 libreoffice-impress。
sudo apt install -y libreoffice-calc libreoffice-impress
创建受密码保护的 XLSX 文件:
- 打开 LibreOffice Calc:
libreoffice --calc & - 输入一些文本,例如,“Spreadsheet data.”
- 前往
File->Save As...。 - 导航到
/home/labex/project/。 - 输入
secret.xlsx作为文件名。 - 勾选
Save with password。 - 点击
Save。 - 将密码设置为
password123并确认。 - 点击
OK并关闭 LibreOffice Calc。
从 XLSX 中提取哈希(Hash):
python3 /usr/share/john/office2john.py ~/project/secret.xlsx >> ~/project/hash.txt
创建受密码保护的 PPTX 文件:
- 打开 LibreOffice Impress:
libreoffice --impress & - 添加一个标题,例如,“Presentation Title.”
- 前往
File->Save As...。 - 导航到
/home/labex/project/。 - 输入
secret.pptx作为文件名。 - 勾选
Save with password。 - 点击
Save。 - 将密码设置为
password123并确认。 - 点击
OK并关闭 LibreOffice Impress。
从 PPTX 中提取哈希(Hash):
python3 /usr/share/john/office2john.py ~/project/secret.pptx >> ~/project/hash.txt
破解所有哈希(Hash):
现在,在更新后的 hash.txt 文件上运行 John the Ripper,该文件现在包含 DOCX、XLSX 和 PPTX 的哈希(hash)。
john --wordlist=/usr/share/john/password.lst ~/project/hash.txt
Using default input encoding: UTF-8
Loaded 3 password hashes (Office, 2007/2010/2013/2016 [MD5/SHA1/SHA256/SHA512 RC4/AES])
Will run till all hashes are cracked, by default
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (secret.xlsx)
password123 (secret.pptx)
password123 (secret.docx)
3g 0:00:00:00 DONE (20XX-XX-XX XX:XX) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Session completed.
验证所有已破解的密码:
john --show ~/project/hash.txt
secret.xlsx:password123
secret.pptx:password123
secret.docx:password123
3 password hashes cracked, 0 left
理解 Office 文档加密
在此步骤中,我们将简要讨论 Microsoft Office 文档使用的加密机制,以及像 John the Ripper 这样的工具为何有效。
现代 Microsoft Office 文档(DOCX、XLSX、PPTX)使用基于 XML 的格式(Open XML)。当设置密码时,文档的内容会被加密。加密过程涉及使用密钥派生函数(KDF),如 PBKDF2(Password-Based Key Derivation Function 2),从用户的密码派生出加密密钥。
office2john.py 的工作原理是从 Office 文档的 XML 结构中提取必要的参数,例如 salt、迭代次数(iteration count)和加密的 verifier hash。这些参数,连同哈希类型(例如,Office 2007/2010/2013/2016),构成了 John the Ripper 所理解的“哈希”字符串。
然后,John the Ripper 执行暴力破解(brute-force)或字典攻击(dictionary attack)。对于其单词列表(wordlist)中的每个单词(或暴力破解攻击中的每个组合),它会使用提取的参数应用相同的 KDF 来生成一个候选密钥。如果这个候选密钥与加密的 verifier hash 匹配,则找到密码。
加密的强度在很大程度上取决于密码的复杂性和长度。如本实验所示,像“password123”这样弱的或常用的密码,很容易通过字典攻击(dictionary attack)破解。强密码,即长、随机且包含多种字符组合的密码,会显著增加破解所需的时间和计算资源,从而使其更加安全。
本次练习强调了为敏感文档使用强而唯一的密码的重要性,以保护它们免遭未经授权的访问。
总结
在本实验中,你成功学会了如何使用 office2john.py 从受密码保护的 Microsoft Office 文档(DOCX、XLSX、PPTX)中提取密码哈希(hash)。然后,你使用 John the Ripper 破解了这些提取的哈希,展示了使用弱密码保护的文档的脆弱性。这次实践经验让你深入了解了密码破解的过程,并强化了使用强而复杂的密码来保护你的数字资产的重要性。


