- 这种攻击方法如今依旧流行
可以对 Microsoft Office 文件进行密码保护,以防止篡改并确保数据完整性。但事实上可能并非如此。来自 Office 早期版本的受密码保护的文档很容易使用被称为 office2john 的简单程序提取其哈希。然后可以使用 John the Ripper 和 Hashcat 来破解。
使用 office2john 工具从受密码保护的 Microsoft Office 文件中提取哈希仅需要几秒钟。
尽管多年来不同Office产品之间的加密标准一直在波动,但它们都无法抵御 office2john 的哈希窃取功能。
该工具是用Python编写的,可以直接在终端上运行。
关于 Office 兼容性,已知可以用于 Word、Excel、PowerPoint、OneNote、Project、Access 和 Outlook,用于 Office 97、Office 2000、Office XP、Office 2003、Office 2007,Office2010、Office 2013 上创建的任何受密码保护的文件,包括 Office for Mac 版本。
以下是 null-byte 演示的操纵步骤。
第一步:安装 Office2John
首先需要从 GitHub 下载该工具,因为标准版本的 John the Ripper 中并未包含 office2john(该版本已安装在 Kali 系统中)。使用 wget 可以轻松实现。
~# wget https://raw.githubusercontent.com/magnumripper/JohnTheRipper/bleeding-jumbo/run/office2john.py
--2019-02-05 14:34:45-- https://raw.githubusercontent.com/magnumripper/JohnTheRipper/bleeding-jumbo/run/office2john.py
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.148.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.148.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 131690 (129K) [text/plain]
Saving to: ‘office2john.py’
office2john.py 100%[=======================================================================>] 128.60K --.-KB/s in 0.09s
2019-02-05 14:34:46 (1.45 MB/s) - ‘office2john.py’ saved [131690/131690]
第二步:确保所有内容都在同一目录中
为了使用 Python 运行 office2john,需要切换到与安装相同的目录。
对于大多数人来说,默认情况下是 Home(只需输入cd),但是可以随时创建一个单独的目录。
接下来需要一个适当的文件对其进行测试。在此使用的是自己创建的简单DOCX文件 “ dummy.docx”,并使用 Word 2007 对其进行了密码保护。
下载并继续。您会发现密码是 “ password123”。您还可以下载使用 Word 2010 和 Word 2016(显示2013)制作的文档,以用于更多示例。这些文档的密码也是 “ password123”。
第三步:使用 Office2john 提取哈希
需要做的第一件事是提取受密码保护的Office文件的哈希。运行以下命令,并将输出传递到 “ hash.txt”,以供以后使用。
~# python office2john.py dummy.docx > hash.txt
要验证哈希是否已成功提取,请使用 cat 。可以看到这里保存的哈希对应于 Microsoft Office2007。整洁。
~# cat hash.txt
dummy.docx:$office$*2007*20*128*16*a7c7a4eadc2d90fb22c073c6324b6b49*abc5f80409f5f96f97e184e44aacd0b7*930b0c48a7eb5e13a57af4f3030b48e9402b6870
第四步:破解刚刚保存的哈希
如前所述,这里将向您展示两种破解从密码保护的 Microsoft Office 文件中提取的哈希的方法。两种方法都很好用,所以这完全取决于您的偏好。
方法一:使用 John
用 — wordlist 指定字典(可以对字典再添加规则)。
~# john --wordlist=/usr/share/wordlists/nmap.lst hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Office, 2007/2010/2013 [SHA1 128/128 SSE2 4x / SHA512 128/128 SSE2 2x AES])
Cost 1 (MS Office version) is 2007 for all loaded hashes
Cost 2 (iteration count) is 50000 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
John 将开始破解,时间取决于密码的复杂性,当找到匹配项时,它就会结束。按任意键可以查看当前状态。
破解哈希后,屏幕上会显示一条消息,其中包含文档的密码:由于此案例的密码非常简单,因此只需几秒钟即可破解它。
password123 (dummy.docx)
1g 0:00:00:03 DONE (2019-02-05 15:00) 0.2824g/s 415.8p/s 415.8c/s 415.8C/s lacoste..cooldude
Use the "--show" option to display all of the cracked passwords reliably
Session completed
也可以使用 — show 来显示它,如下所示:
~# john --show hash.txt
dummy.docx:password123
1 password hash cracked, 0 left
下面来看看另一种方法,使用功能强大的工具 Hashcat。被称为世界上最快的密码破解软件。
方法二:使用 Hashcat
可以先显示 Hashcat 的帮助菜单( — help)。这将为您提供大量信息,包括使用选项、哈希模式和其他功能。如果您真的想了解 Hashcat,应该深入研究下它。
~# hashcat --help
基于本案例,输出中只对 MS Office 哈希模式感兴趣。在帮助菜单底部附近可以找到 MS Office 模式选项及其相应编号。
从哈希中您可以知道这是一个 Office 2007 文件,因此找到其编号 ID 9400。
现在可以使用以下命令设置其余选项。
~# hashcat -a 0 -m 9400 --username -o cracked_pass.txt hash.txt /usr/share/wordlists/nmap.lst
- -a 将攻击类型设置为默认模式 0。
- -m 指定要使用的模式。
- — username 忽略哈希文件中的任何用户名。
- 使用 -o 将输出文件指定为 cracked.txt。
- 最后一步和方法一相同。
然后,Hashcat 将开始破解。
hashcat (v5.1.0) starting...
* Device #2: Not a native Intel OpenCL runtime. Expect massive speed loss.
You can use --force to override, but do not report related errors.
OpenCL Platform #1: Intel(R) Corporation
========================================
* Device #1: Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz, 934/3736 MB allocatable, 4MCU
一段时间后,状态将显示为“已破解”,准备好查看密码。
Session..........: hashcat
Status...........: Cracked
Hash.Type........: MS Office 2007
Hash.Target......: $office$*2007*20*128*16*a7c7a4eadc2d90fb22c073c6324...2b6870
Time.Started.....: Tue Feb 5 15:08:00 2019 (4 secs)
Time.Estimated...: Tue Feb 5 15:08:04 2019 (0 secs)
Guess.Base.......: File (/usr/share/wordlists/nmap.lst)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 610 H/s (8.51ms) @ Accel:512 Loops:128 Thr:1 Vec:4
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 2048/5084 (40.28%)
Rejected.........: 0/2048 (0.00%)
Restore.Point....: 0/5084 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:49920-50000
Candidates.#1....: #!comment: ***********************IMPORTANT NMAP LICENSE TERMS************************ -> Princess
Started: Tue Feb 5 15:07:50 2019
Stopped: Tue Feb 5 15:08:05 2019
只需 cat 指定输出文件,它将显示哈希,并在末尾附加明文密码。
~# cat cracked_pass.txt
$office$*2007*20*128*16*a7c7a4eadc2d90fb22c073c6324b6b49*abc5f80409f5f96f97e184e44aacd0b7*930b0c48a7eb5e13a57af4f3030b48e9402b6870:password123
成功!
以上是使用 office2john 从受密码保护的 Microsoft Office 文件中提取哈希后破解出密码的两种方法。
如何防止被破解
对于任何形式的密码破解都一样,最好的防御技术是使用相对安全的密码实践。这意味着使用更长且不容易猜到的唯一密码。结合使用大小写字母,数字和符号。
更好是随机生成的长密码,几乎不可能破解它们。
关于此特定攻击,由于 office2john 旨在在早期版本的Office上工作,因此使用 Microsoft Office 2016 或 2019 或更高版本的文档可能无效。
但是,如您在上面看到的,Office 2016可能会在用户不知情的情况下吐出2013的文档,因此这并不意味着无法破解“新”文件。
另外,仍然有大量较旧的 Microsoft Office 文档随处可见,并且一些组织继续使用这些较旧的版本,从而使该攻击直到今天仍然非常流行。
最后
现在您知道了,受密码保护的 Microsoft Office 文件的安全性远不如人意。
这些类型的文件今天仍然很常用,因此,如果您自己或朋友的文件忘了密码,请放心,有一种方法可以将其破解。⚪️