不能。john-the-ripper仅支持离线破解已获取的密码哈希,需先用sudo提取/etc/shadow等文件生成hashes.txt,再配合wordlist或incremental模式破解,不支持实时验证系统账户。

John-the-Ripper 能不能直接扫系统账户密码?
不能。John 本身不登录、不调用 PAM、也不实时验证系统账户,它只对已获取的密码哈希做离线破解。你必须先拿到 /etc/shadow(或 Windows 的 NTDS.dit 导出哈希),且有读取权限——普通用户默认无权读 /etc/shadow,得用 sudo 或 root 权限提取。
常见错误现象:john: No password hashes loaded,基本是文件格式不对或没权限读取;Permission denied 则大概率卡在第一步。
- 提取哈希推荐命令:
sudo unshadow /etc/passwd /etc/shadow > hashes.txt - 确保
hashes.txt非空,且每行含用户名、哈希、盐(如root:$6$salt$hash...:18900:0:99999:7:::) - 若系统用
sha512crypt($6$开头)或yescrypt($y$),John 7.2+ 原生支持;老版本可能报Unknown ciphertext type
怎么选对模式:--wordlist 还是 --incremental?
取决于你手头有没有线索。没有字典、也不了解用户习惯时,--incremental 是暴力兜底,但效率极低——试完全部小写字母+数字 6 位组合就要数小时;而 --wordlist 配合高质量字典(如 rockyou.txt)能在秒级爆破出 password123、admin123 这类高频弱口令。
实操建议:
- 优先跑:
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt(注意先gunzip解压) - 加规则增强字典效果:
john --wordlist=rockyou.txt --rules hashes.txt,自动尝试大小写翻转、尾部加数字等 -
--incremental=Alnum仅限确认目标口令极短(≤4 位)且无字典可用时临时用,别设成默认流程
跑完怎么看结果?哪些账号真该立刻处理?
成功破解后,运行 john --show hashes.txt 输出明文密码。重点不是“有多少个被破”,而是看谁的密码进了这个列表。
- 系统服务账户(如
daemon、syslog)密码非空?说明配置异常,应设为*或! - sudo 组成员(
grep '^sudo' /etc/group)密码是123456或空?这是高危项,需立即重置并审计登录日志 - 密码和用户名相同(如
test:test)、或纯数字(111111)、或键盘序列(qwerty)——这类直接标为「必须改」
注意:john --show 不会显示未破解的条目,所以空白输出 ≠ 没问题,只是当前策略没破出来。
为什么用 john --format=sha512crypt 却提示 unsupported?
不是哈希格式问题,是 John 版本太旧。Debian/Ubuntu 官方源的 john 包常是 1.9.x,不支持 yescrypt 和部分新 sha512crypt 变体;而 Kali 自带的 john(来自 jumbo 分支)才完整支持。
- 查版本:
john --version,输出含jumbo才可靠 - 快速验证:
echo -n 'test' | sha512sum | cut -d' ' -f1 | xargs -I{} echo 'user:$6$salt${}' > test.hash,再john --format=sha512crypt test.hash - 若失败,卸载旧版,从 https://github.com/magnumripper/JohnTheRipper/releases 下载 jumbo 编译安装
真正容易被忽略的是:同一台机器上可能混用多种哈希($1$ MD5、$6$ SHA-512、$y$ yescrypt),--format=auto 能自动识别,但首次仍建议显式指定测试。











