我有一台 20 世纪 90 年代的电脑。它有一个(范围)EFS 文件系统,无法在 Linux 中写入,因此我无法手动重置密码。所以我必须破解我的密码。为此,我尝试使用开膛手约翰。
在文件 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
我看到警告,我想知道这意味着什么。我让开膛手约翰跑了几个小时然后回来了。好像还在继续……所以我想一定有什么地方不对劲。
答案1
您的根密码是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
约翰花了 2.5 天才找到 root 密码,而且很可能需要更长的时间。您可以加密密码以验证哈希值是否确实匹配:
% perl -le 'print crypt("qwer134", "8s")'
8sh9JBUR0VYeQ
答案2
该密码经过哈希处理传统的基于 DES 的方法。这种方法并没有那么糟糕,它允许直接从哈希中找到密码。它需要蛮力,即计算密码哈希值,直到找到正确的密码。这种哈希方法的缺点是哈希计算相对较快,并且密码限制为 8 个字符(并且盐也太小)。这约翰基准测试每个核心每秒约 600 万次。
对于大多数人类选择的密码来说,每秒 600 万次意味着几乎可以立即破解。但如果从所有可能的 8 个可打印字符的密码中随机选择密码,则大约有 6.7×10 15 个可能的密码,这意味着大约需要 12800 天的累计 CPU 时间。
您没有指定这是众多名为 EFS 的文件系统中的哪一个。对于大多数文件系统,只要文件未压缩或加密,您就可以在磁盘映像中搜索文件内容。在不了解文件系统结构的情况下修改文件不太可能起作用,除非您就地更改字节并保持文件大小不变。因此,假设文件未压缩或加密,您可以执行以下操作:
- 将磁盘插入运行 Linux 或其他 Unix 变体的计算机。
- 制作磁盘映像的副本。这很重要:如果你出错了,你可能会导致原始数据无法恢复。
passwd
使用二进制工具在磁盘映像中查找文件的内容。看在块设备上查找/替换?- 替换
root:8sh9JBUR0VYeQ:
为长度相等的字符串,该字符串是您知道的密码的哈希值。您可以使用perl -le 'print crypt("swordfis", "aa")'
为 生成密码哈希swordfis
。
或者,如果您有物理访问权限,计算机可能会提供一种绕过正常启动过程的方法。