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

Kali LinuxBeginner
立即练习

引言

在本实验中,你将使用强大的密码破解工具 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 passwordConfirm 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.pysecret.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-calclibreoffice-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 破解了这些提取的哈希,展示了使用弱密码保护的文档的脆弱性。这次实践经验让你深入了解了密码破解的过程,并强化了使用强而复杂的密码来保护你的数字资产的重要性。