硬核干货:如何在运行的 PuTTY 中提取明文密码?从命令行到内存取证
背景:
很多时候,我们手头有一个正在运行的 PuTTY 窗口。
这种情况在高性能计算(HPC) 、自动化运维 或者使用第三方集成工具时非常常见------软件自动弹出了一个终端窗口连上了服务器,但密码是封装在软件里的,我们根本不知道。
如果此时你需要用同样的账号登录 FTP 传文件,或者单纯出于技术好奇心想知道:"这软件到底用的什么密码?" 怎么办?
别急着重置密码。只要窗口还在运行,密码就在你的内存里。
今天分享两种方法:一种是极速查看的"巧劲" ,另一种是通用性极强的"内存取证" 。
方法一:巧用启动参数(极速解法)
很多集成软件(如超算客户端、数据库工具)为了方便,在后台调用 PuTTY 时,会直接把密码通过命令行参数(-pw)传进去。
这是最容易被忽视的"灯下黑"。我们可以直接问操作系统: "这个进程是用什么命令启动的?"
1. 命令行流(最快)
打开 CMD 或 PowerShell,输入一行命令:
arduino
wmic process where "name='putty.exe'" get commandline
效果:
如果运气好,你会直接看到类似这样的输出:
sql
CommandLine
"C:\HPC_Tools\bin\putty.exe" -ssh user@10.0.0.1 -pw MySecretPassword123
那个 -pw 后面的字符串,就是你要的明文密码。

2. 图形界面流(直观)
不喜欢敲命令?Windows 任务管理器也能看。
-
Ctrl + Shift + Esc打开任务管理器。
-
- 切换到 "详细信息" (Details) 页签。
-
- 对着列标题右键 -> "选择列" -> 勾选 "命令行" 。
-
- 找到
putty.exe,向右看,密码一览无余。
- 找到
方法二:内存转储取证(终极大招)
如果方法一不管用怎么办?
比如你是手动双击打开的 PuTTY,然后在黑框框里手敲的密码;或者软件使用了 Session 加载模式,没有在启动参数里写密码。
这时候,启动参数里是空的。但别慌,凡走过必留痕。只要你输入过密码,或者 PuTTY 发送过密码,这串字符就一定存在于内存的某个角落。
我们需要动用一点"取证学"手段:Memory Dump(内存转储) 。
第一步:把内存"倒"出来
-
- 打开任务管理器,找到
putty.exe。
- 打开任务管理器,找到
-
- 右键点击它,选择 "创建转储文件" (Create Dump File) 。
-
- 系统会把当前这个进程的所有内存数据保存为一个
.DMP文件(通常在C:\Users\用户名\AppData\Local\Temp目录下)。
- 系统会把当前这个进程的所有内存数据保存为一个
第二步:从乱码中提取真相
内存文件是二进制的,直接用记事本打开是乱码。我们需要提取其中的可读字符串。
工具准备:
推荐使用微软 Sysinternals 工具包中的 strings.exe,或者任何支持二进制搜索的编辑器(如 WinHex, Notepad++)。
操作演示:
在命令行中运行:
css
strings.exe putty.DMP > content.txt
这行命令的意思是:把内存里所有的"人话"(可读文本)提取出来,存到 content.txt 里。
第三步:搜索关键线索
打开这个文本文件,虽然内容庞杂,但我们要找的东西往往有迹可循。使用查找功能(Ctrl+F):
- • 搜索环境特征: 如果你记得登录后输入的第一条命令(比如
ls或top),搜索这个词。密码往往就在这行命令的输入缓冲区附近。 - • 搜索特定标记: 搜索
password、pass或你的用户名。 - • 搜索启动参数: 即使
wmic没显示,内存里有时候也会残留启动时的完整指令,搜索-pw依然是一个有效手段。

💡 技术总结
这两种方法展示了两种解决问题的维度:
-
- Command Line 查看 :利用的是进程元数据。它快、准、狠,适用于自动化工具调用的场景。
-
- Memory Dump 分析 :利用的是数据残留。它是通用的取证手段,不仅能找 PuTTY 密码,理论上任何未对内存进行安全擦除的软件,其敏感数据都能通过这种方式提取。
运维与科研的乐趣,往往就在于这种"透过现象看本质"的探索之中。
建议大家收藏备用,说不定哪天这个小技巧能救你于水火。
看得开心的老铁希望点个关注呀,这对我很重要,是我持续创作的动力来源!