使用 John the Ripper 破解 Office 文档 (DOCX, XLSX, PPTX)

KubernetesBeginner
立即练习

引言

在本实验中,你将使用强大的密码破解工具 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 窗口将会打开。

  1. 输入一些文本,例如,“This is a test document.”
  2. 前往 File -> Save As...。
  3. 在 Save As 对话框中,导航到 /home/labex/project/。
  4. 输入 secret.docx 作为文件名。
  5. 勾选 Save with password 复选框。
  6. 点击 Save。
  7. 在 Set Password 对话框中,在 Enter password 和 Confirm password 字段中都输入 password123 作为密码。
  8. 点击 OK。
  9. 关闭 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 文件:

  1. 打开 LibreOffice Calc:
    libreoffice --calc &
    
  2. 输入一些文本,例如,“Spreadsheet data.”
  3. 前往 File -> Save As...。
  4. 导航到 /home/labex/project/。
  5. 输入 secret.xlsx 作为文件名。
  6. 勾选 Save with password。
  7. 点击 Save。
  8. 将密码设置为 password123 并确认。
  9. 点击 OK 并关闭 LibreOffice Calc。

从 XLSX 中提取哈希(Hash):

python3 /usr/share/john/office2john.py ~/project/secret.xlsx >> ~/project/hash.txt

创建受密码保护的 PPTX 文件:

  1. 打开 LibreOffice Impress:
    libreoffice --impress &
    
  2. 添加一个标题,例如,“Presentation Title.”
  3. 前往 File -> Save As...。
  4. 导航到 /home/labex/project/。
  5. 输入 secret.pptx 作为文件名。
  6. 勾选 Save with password。
  7. 点击 Save。
  8. 将密码设置为 password123 并确认。
  9. 点击 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 破解了这些提取的哈希,展示了使用弱密码保护的文档的脆弱性。这次实践经验让你深入了解了密码破解的过程,并强化了使用强而复杂的密码来保护你的数字资产的重要性。