OSCP 实战:破解 SSH 私钥的密码短语
通过 OSCP 实战场景演示了 SSH 私钥密码短语的破解流程。攻击者通过 Web 文件管理器获取目标服务器上的 SSH 私钥及包含密码策略的说明文档。尝试直接使用私钥登录因缺少密码短语而失败。随后使用 Hashcat 进行暴力破解未成功,最终改用 John the Ripper (JtR) 结合字典与规则成功破解出密码短语。利用破解后的密钥完成远程 SSH 登录,验证了私钥泄露后若无强密码短语保护将面临严重安全风险。

通过 OSCP 实战场景演示了 SSH 私钥密码短语的破解流程。攻击者通过 Web 文件管理器获取目标服务器上的 SSH 私钥及包含密码策略的说明文档。尝试直接使用私钥登录因缺少密码短语而失败。随后使用 Hashcat 进行暴力破解未成功,最终改用 John the Ripper (JtR) 结合字典与规则成功破解出密码短语。利用破解后的密钥完成远程 SSH 登录,验证了私钥泄露后若无强密码短语保护将面临严重安全风险。

SSH 使用非对称加密进行身份验证,其核心流程基于'公钥锁,私钥开'的机制:
id_rsa 私钥 + id_rsa.pub 公钥),私钥自己严格保管。id_rsa.pub)放置于目标服务器的特定文件(如 ~/.ssh/authorized_keys)中。这相当于为你的账户装一把只让对应私钥打开的'数字锁'。一旦攻击者获取了你的私钥文件(id_rsa),他便拥有了你这把'钥匙',可以尝试冒充你的身份去开启服务器上的那把'锁'。如果没有额外保护,他就能直接登录。为了防止这个情况发生,这个时候就出现了**'密码短语'**。
密码短语:是在创建密钥对时,为用户私钥额外添加的一层对称加密保护。
核心总结 SSH 密钥认证的安全模型建立在'公钥在服务端,私钥在客户端'的基础上。密码短语并非用于远程服务器验证,而是用于本地加密保护私钥文件本身。它是防止私钥泄露后导致即时权限沦陷的关键安全措施。
💡 类比理解:这就像你捡到了一把保险柜的钥匙(私钥),但钥匙上还挂着一个密码锁(密码短语),不知道密码仍然打不开柜子。
在本文的示例中,攻击者已通过字典攻击破解了目标 Web 登录表单(用户名:user,密码:121212),从而获得了基于 Web 的文件管理器访问权限(地址:http://192.168.50.201:8080)。以上过程参考:前述文章'HTTP POST 登录表单'的内容。
在登录文件管理器后,攻击者在服务主目录中发现了两个重要文件,将这两个文件下载至本地 Kali 机器的 passwordattacks 目录中。
id_rsa:SSH 私钥文件note.txt:说明文档
查看 note.txt 文件,内容令人惊喜:

该文件竟以明文形式记录了用户'Dave'的潜在密码列表!这为后续破解 SSH 私钥的密码短语提供了宝贵的字典来源。同时,还说了:
下图概括了从初始渗透到最终破解 SSH 私钥密码短语的完整过程:

在拿到 SSH 私钥文件后,尝试使用用户 dave 的私钥 id_rsa 文件进行 SSH 连接。
在使用 SSH 私钥前,必须修改 id_rsa 的私钥文件的权限:
chmod 600 id_rsa # 设置仅所有者可读写
🔐 注意:权限过宽的私钥文件会被 SSH 客户端拒绝使用,这是重要的安全限制。
执行命令尝试连接目标服务器(端口:2222):
ssh -i id_rsa -p 2222 [email protected]
系统提示输入私钥的密码短语。由于没有密码短语,连接被拒绝。
首先需要将私钥文件提取哈希值供 Hashcat 识别:
ssh2john id_rsa > id_rsa.hash
Hashcat 支持多种 SSH 密钥格式。对于 RSA 私钥,通常使用模式 17220 (RSA private key) 或 17221 (OpenSSH private key)。根据生成的 hash 类型选择对应模式。
根据 note.txt 中的策略(3 个数字、1 个大写字母、1 个特殊字符),可以编写自定义规则增强字典攻击效果,但 Hashcat 默认规则可能不足以覆盖复杂组合。
利用 note.txt 中记录的明文密码列表作为基础字典,结合常见弱口令规则生成混合字典。
执行 Hashcat 命令:
hashcat -m 17220 id_rsa.hash wordlist.txt --force
经过长时间运行,Hashcat 未能成功破解出密码短语。原因可能是密码复杂度超出了 Hashcat 在该环境下的计算能力,或者字典不够精准。
John the Ripper (JtR) 在处理某些加密算法时表现更佳。编辑 john.conf 或直接在命令行指定规则,使其符合密码策略。
使用 JtR 加载哈希并执行破解:
john --wordlist=wordlist.txt --rules=id_rsa.hash
JtR 成功返回了密码短语。结果显示密码符合之前发现的策略要求。
note.txt 提供的明文密码列表大大缩小了搜索空间。私钥文件不应随意存放,且密码短语必须具备足够的熵值。简单的密码短语配合泄露的私钥等同于无保护状态。
获得密码短语后,再次尝试 SSH 连接:
ssh -i id_rsa -p 2222 [email protected]
# 输入破解出的密码短语
连接成功,获得 Shell 访问权限。
此案例展示了即使拥有私钥文件,若无强密码短语保护,仍面临极高的安全风险;同时也说明了在 CTF 或渗透测试中,多工具协同与情报分析的重要性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online