我有一台 1990 年代的电脑。它有一个无法在 linux 中写入的(范围)EFS 文件系统,因此我无法手动重置密码。所以我必须破解我的密码。为此,我正在尝试使用开膛手约翰。
在文件 me2 中,我有一个来自原始 /etc/passwd 文件的条目: root:8sh9JBUR0VYeQ:0:0:Super-User,,,,,,,:/:/bin/ksh
来自另一个线程的一些人建议这可能是 DES 密码。
所以在这里,我试图破解这个密码,这样我就可以重新进入这台电脑。
sudo john me2
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Press 'q' or Ctrl-C to abort, almost any other key for status
Warning: MaxLen = 13 is too large for the current hash type, reduced to 8
Run Code Online (Sandbox Code Playgroud)
我看到警告,我想知道这意味着什么。我让开膛手约翰跑了几个小时,然后回来了。看起来它仍在继续......所以我想肯定是有什么地方不对劲。
这个密码是用传统的基于 DES 的方法散列的。这种方法并没有被破坏到它允许直接从散列中找到密码。它需要蛮力,即计算密码哈希值,直到找到正确的哈希值。这种hash方法的缺点是hash计算比较快,密码限制在8个字符以内(salt也太小了)。在约翰基准上升到600万每秒每核心。
对于大多数人为选择的密码,每秒 600 万次意味着近乎即时的破解。但是,如果在所有可能的 8 个可打印字符的密码中随机选择密码,则大约有 6.7×10 15 个可能的密码,这意味着大约 12800 天的 CPU 时间累积。
您没有指定这是众多称为 EFS 的文件系统中的哪一个。对于大多数文件系统,只要文件未压缩或加密,您就可以在磁盘映像中搜索文件内容。在不了解文件系统结构的情况下修改文件不太可能奏效,除非您更改字节并保持文件大小不变。因此,假设文件未压缩或加密,您可以执行以下操作:
passwd在磁盘映像中定位文件的内容。请参阅在块设备上查找/替换?root:8sh9JBUR0VYeQ:为长度相等的字符串,该字符串是您知道的密码的哈希值。您可以使用perl -le 'print crypt("swordfis", "aa")'为 生成密码哈希swordfis。或者,如果您有物理访问权限,计算机可能会提供一种绕过正常启动过程的方法。
您的根密码是qwer134.
% /usr/sbin/john --show pwdfile
root:qwer134:0:0:Super-User,,,,,,,:/:/bin/ksh
lp:passwd1:9:9:Print Spooler Owner:/var/spool/lp:/bin/sh
nuucp:NO PASSWORD:10:10:Remote UUCP User:/var/spool/uucppublic:/usr/lib/uucp/uucico
3 password hashes cracked, 0 left
Run Code Online (Sandbox Code Playgroud)
john 花了 2.5 天的时间才找到 root 密码,而且很容易花费更长的时间。您可以加密密码以验证哈希值是否真正匹配:
% perl -le 'print crypt("qwer134", "8s")'
8sh9JBUR0VYeQ
Run Code Online (Sandbox Code Playgroud)