硬核干货:如何在运行的 PuTTY 中提取明文密码?从命令行到内存取证

72 阅读4分钟

硬核干货:如何在运行的 PuTTY 中提取明文密码?从命令行到内存取证

背景:
很多时候,我们手头有一个正在运行的 PuTTY 窗口。
这种情况在高性能计算(HPC)自动化运维或者使用第三方集成工具时非常常见——软件自动弹出了一个终端窗口连上了服务器,但密码是封装在软件里的,我们根本不知道。

如果此时你需要用同样的账号登录 FTP 传文件,或者单纯出于技术好奇心想知道:“这软件到底用的什么密码?” 怎么办?

别急着重置密码。只要窗口还在运行,密码就在你的内存里。

今天分享两种方法:一种是极速查看的“巧劲” ,另一种是通用性极强的“内存取证”


方法一:巧用启动参数(极速解法)

很多集成软件(如超算客户端、数据库工具)为了方便,在后台调用 PuTTY 时,会直接把密码通过命令行参数(-pw)传进去。

这是最容易被忽视的“灯下黑”。我们可以直接问操作系统: “这个进程是用什么命令启动的?”

1. 命令行流(最快)

打开 CMD 或 PowerShell,输入一行命令:

wmic process where "name='putty.exe'" get commandline

效果:
如果运气好,你会直接看到类似这样的输出:

CommandLine
"C:\HPC_Tools\bin\putty.exe" -ssh user@10.0.0.1 -pw MySecretPassword123

那个 -pw 后面的字符串,就是你要的明文密码。

image.png

2. 图形界面流(直观)

不喜欢敲命令?Windows 任务管理器也能看。

  1. 1. Ctrl + Shift + Esc 打开任务管理器。
    1. 切换到  “详细信息” (Details)  页签。
    1. 对着列标题右键 ->  “选择列”  -> 勾选  “命令行”
    1. 找到 putty.exe,向右看,密码一览无余。

方法二:内存转储取证(终极大招)

如果方法一不管用怎么办?
比如你是手动双击打开的 PuTTY,然后在黑框框里手敲的密码;或者软件使用了 Session 加载模式,没有在启动参数里写密码。

这时候,启动参数里是空的。但别慌,凡走过必留痕。只要你输入过密码,或者 PuTTY 发送过密码,这串字符就一定存在于内存的某个角落。

我们需要动用一点“取证学”手段:Memory Dump(内存转储)

第一步:把内存“倒”出来

    1. 打开任务管理器,找到 putty.exe
    1. 右键点击它,选择  “创建转储文件” (Create Dump File)
    1. 系统会把当前这个进程的所有内存数据保存为一个 .DMP 文件(通常在 C:\Users\用户名\AppData\Local\Temp 目录下)。

第二步:从乱码中提取真相

内存文件是二进制的,直接用记事本打开是乱码。我们需要提取其中的可读字符串

工具准备:
推荐使用微软 Sysinternals 工具包中的 strings.exe,或者任何支持二进制搜索的编辑器(如 WinHex, Notepad++)。

操作演示:
在命令行中运行:

strings.exe putty.DMP > content.txt

这行命令的意思是:把内存里所有的“人话”(可读文本)提取出来,存到 content.txt 里。

第三步:搜索关键线索

打开这个文本文件,虽然内容庞杂,但我们要找的东西往往有迹可循。使用查找功能(Ctrl+F):

  • • 搜索环境特征:  如果你记得登录后输入的第一条命令(比如 ls 或 top),搜索这个词。密码往往就在这行命令的输入缓冲区附近
  • • 搜索特定标记:  搜索 passwordpass 或你的用户名。
  • • 搜索启动参数:  即使 wmic 没显示,内存里有时候也会残留启动时的完整指令,搜索 -pw 依然是一个有效手段。

image.png


💡 技术总结

这两种方法展示了两种解决问题的维度:

  1. 1. Command Line 查看:利用的是进程元数据。它快、准、狠,适用于自动化工具调用的场景。
  2. 2. Memory Dump 分析:利用的是数据残留。它是通用的取证手段,不仅能找 PuTTY 密码,理论上任何未对内存进行安全擦除的软件,其敏感数据都能通过这种方式提取。

运维与科研的乐趣,往往就在于这种“透过现象看本质”的探索之中。

建议大家收藏备用,说不定哪天这个小技巧能救你于水火。

看得开心的老铁希望点个关注呀,这对我很重要,是我持续创作的动力来源!