跳到主要内容

Linux shadow 哈希破解

拿到 Linux 主机的 passwdshadow 后,离线破解是恢复明文口令最直接的路径。shadow 中的哈希是加盐慢哈希,不可逆,只能用候选明文逐个验证;效率取决于格式识别是否正确与字典是否贴合目标。


准备哈希文件

passwdshadow 都可读时,先合并成 John 认识的格式:

unshadow passwd shadow > hashes.txt

只有 passwd 可读时也有机会:历史配置会把哈希直接放在 passwd 第二字段而非 shadow,这类配置下哈希可以直接拿走,不需要 unshadow


识别哈希格式

看第二字段的前缀:

前缀算法hashcat 模式
$6$sha512crypt-m 1800
$1$md5crypt-m 500
$y$yescrypt较新发行版的默认算法
root:$6$saltstring$...:0:0:root:/root:/bin/bash

John 破解

john 能自动识别大部分格式:

john --wordlist=rockyou.txt hashes.txt

自动识别异常时显式指定格式:

john --format=md5crypt --wordlist=rockyou.txt hashes.txt

hashcat 破解

hashcat -m 1800 hashes.txt rockyou.txt # sha512crypt
hashcat -m 500 hashes.txt rockyou.txt # md5crypt

Web 应用侧哈希的对应玩法见 PHPass 哈希与 Hashcat 模式 400


候选明文复核

哈希不可逆,任何"破解结果"都应作为候选明文复核一遍:

# sha512crypt:用同样的盐重算,与 shadow 中哈希比对
openssl passwd -6 -salt <盐> '<候选明文>'

# 无盐 MD5:直接摘要比对
echo -n '<候选>' | md5sum

echo -n 的换行坑在 MD5 换行符哈希破解 有专门说明。


复核要点

  • unshadow 合并前确认两份文件来自同一台主机,否则盐与用户对不上。
  • $y$(yescrypt)在旧版 john/hashcat 上可能不支持,先确认工具版本。
  • 破解出弱口令后,优先验证它是否在其他服务上复用,继续横向。

防御建议

  1. 使用 yescrypt、argon2 等现代口令哈希算法,淘汰 md5crypt 与 sha512crypt。
  2. /etc/shadow 权限收敛为 640 且属主 root:shadow
  3. 实施口令策略:最小长度、复杂度与定期轮换。
  4. 监控 passwd / shadow 的异常读取,例如 Web 进程读取 shadow。
  5. 口令疑似泄露后立即全局轮换,防止复用扩散。