引言
在本实验中,你将使用强大的开源密码破解工具 John the Ripper 来探索破解密码保护的 PDF 文档的过程。你将学习如何创建安全的 PDF,提取其哈希值,然后尝试破解密码。本实验还将涵盖不同的 PDF 加密类型,并提供保护 PDF 文档的最佳实践。理解这些概念对于网络安全专业人员以及任何处理 PDF 格式敏感信息的人来说都至关重要。
创建密码保护的 PDF 文档
在此步骤中,你将创建一个简单的文本文件,并将其转换为密码保护的 PDF 文档。我们将为此目的使用 enscript 和 ps2pdf 命令。enscript 将文本文件转换为 PostScript,而 ps2pdf 将 PostScript 转换为 PDF。
首先,在你的 ~/project 目录中创建一个名为 secret.txt 的简单文本文件。
echo "This is a secret document." > ~/project/secret.txt
cat ~/project/secret.txt
接下来,将 secret.txt 转换为 PostScript 文件。
enscript -p ~/project/secret.ps ~/project/secret.txt
ls -l ~/project/secret.ps
现在,将 PostScript 文件转换为密码保护的 PDF。我们将用户密码和所有者密码都设置为 labex123。用户密码限制打开文档,而所有者密码限制打印或编辑等权限。
ps2pdf -sOwnerPassword=labex123 -sUserPassword=labex123 ~/project/secret.ps ~/project/protected.pdf
ls -l ~/project/protected.pdf
你已成功创建了一个密码保护的 PDF 文档。
使用 pdf2john 从 PDF 中提取哈希
在此步骤中,你将使用 pdf2john.py 从密码保护的 PDF 文档中提取哈希。pdf2john.py 是一个与 John the Ripper 一起提供的 Python 脚本,用于从 PDF 文件中提取可破解的哈希。
首先,找到 pdf2john.py 脚本。它通常位于 John the Ripper 安装的 run 目录中。
find /usr/share/john -name pdf2john.py
现在,使用 pdf2john.py 从 ~/project/protected.pdf 中提取哈希,并将其保存到名为 pdf_hash.txt 的文件中。
python3 /usr/share/john/pdf2john.py ~/project/protected.pdf > ~/project/pdf_hash.txt
cat ~/project/pdf_hash.txt
输出将显示一个哈希字符串,John the Ripper 可以尝试破解它。格式通常包括 PDF 版本、加密类型以及实际哈希的信息。
使用 John the Ripper 破解 PDF 哈希
在此步骤中,你将使用 John the Ripper 破解提取的 PDF 哈希。本次演示我们将使用一个简单的字典文件。
首先,在你的 ~/project 目录中创建一个名为 wordlist.txt 的字典文件。包含 labex123(正确的密码)和其他一些常用密码。
echo -e "password\n123456\nlabex123\nqwerty" > ~/project/wordlist.txt
cat ~/project/wordlist.txt
现在,使用 John the Ripper 和 wordlist.txt 来破解 pdf_hash.txt 中的哈希。
john --wordlist=~/project/wordlist.txt ~/project/pdf_hash.txt
John the Ripper 将处理哈希和字典文件。如果找到匹配项,它将显示破解的密码。
破解完成后,你可以查看 John 已找到并存储的已破解密码。
john --show ~/project/pdf_hash.txt
你应该会看到 protected.pdf 的破解密码是 labex123。
理解 PDF 加密类型
在此步骤中,你将了解不同的 PDF 加密类型以及它们如何影响 PDF 文档的安全性。PDF 加密随着时间而发展,新版本提供了更强的保护。
PDF 加密通常使用 RC4 或 AES 等算法。密钥长度也有所不同,更长的密钥提供更强的安全性。
- RC4 40-bit: 这是一种较旧且较弱的加密方法,很容易被破解。
- RC4 128-bit: 一种更常见的旧标准,但仍然容易受到现代破解技术的影响。
- AES 128-bit: 一种更强的加密标准,更能抵抗暴力破解攻击。
- AES 256-bit: 目前 PDF 可用的最强加密,提供强大的保护。
你可以使用 exiftool 来检查 PDF 的加密详细信息。让我们检查一下我们创建的 protected.pdf。
exiftool ~/project/protected.pdf | grep "Encryption"
输出将显示类似 Encryption : RC4 128-bit 或 AES 256-bit 的详细信息,具体取决于用于创建 PDF 的工具和版本。我们的 ps2pdf 命令通常默认使用 RC4 128-bit 以实现旧版本兼容性。更强的加密需要特定的选项或更新的 PDF 创建工具。
理解加密类型至关重要,因为它直接影响破解密码所需的精力。较弱的加密类型破解速度更快。
正确地保护 PDF 文档
在此步骤中,你将学习保护 PDF 文档的最佳实践,以防止未经授权的访问和破解。虽然 John the Ripper 等工具可以破解弱密码,但强大的安全措施可以使其极其困难甚至不可能。
以下是保护 PDF 文档的关键建议:
使用强密码: 这是最关键的一步。强密码应具备:
- 长度足够(至少 12-16 个字符)。
- 复杂性高(混合大小写字母、数字和符号)。
- 唯一性(不用于任何其他账户或文档)。
- 随机性(避免使用字典单词或个人信息)。
使用强大的加密算法: 始终选择可用的最高加密标准,最好是 AES 256-bit。创建 PDF 时,请确保你的软件配置为使用现代加密。
同时设置用户密码和所有者密码:
- 用户密码: 限制打开文档。这是主要的保护措施。
- 所有者密码: 限制打印、复制内容、编辑或添加注释等权限。即使知道用户密码,所有者密码也可以阻止某些操作。
避免将密码与文档一起存储: 切勿将 PDF 的密码与 PDF 本身存储在同一位置或同一系统上。
定期更新软件: 确保你的 PDF 创建和查看软件是最新版本,以受益于最新的安全补丁和加密标准。
考虑使用数字签名: 为了保证真实性和完整性,数字签名可以验证文档的来源并确保其未被篡改。
通过遵循这些实践,你可以显著增强 PDF 文档的安全性,并保护敏感信息免遭未经授权的访问。
总结
在本实验中,你通过 John the Ripper 获得了破解密码保护的 PDF 文档的实践经验。你学会了如何创建密码保护的 PDF,使用 pdf2john.py 提取其哈希值,然后成功破解密码。此外,你还探索了不同的 PDF 加密类型,并理解了它们对安全性的影响。最后,你回顾了正确保护 PDF 文档的关键最佳实践,强调了强密码和现代加密标准的重要性。这些知识对于保护敏感信息和理解 PDF 文件中的潜在漏洞至关重要。


