大家好,在本文中,我们想聊聊我们关于 TeamViewer 密码安全性的小研究。该方法可以在渗透测试期间帮助进行后渗透,利用 TeamViewer 获取另一台机器的访问权限。
几天前,我使用 TeamViewer 连接我的 Windows 云 VPS(我在那里设置了一个自定义密码)。工作结束后我断开了连接,下次我想连接时,发现 TeamViewer 已经自动填好了密码。

我想:“有趣,我怎么才能获取密码?密码在我的电脑上是怎么存储的?”
我转储了 TeamViewer 的内存并 grep 了密码。

哦耶,😊 密码在内存中以 Unicode 格式存储。事实证明,如果你完成 TeamViewer 的工作后不杀掉进程(或者不退出 TeamViewer

密码就会留在内存中)
经过分析,我们了解到第一个红色区域是起始魔术数据,第二个区域是结束魔术数据(有时候,结束魔术数据的值为 00 00 00 20 00 00)。
为了从内存中提取密码,我们用 Python 和 C++ 语言编写了两个小程序。
感谢 Frida 团队提供了这么棒的工具!我们的 Python 脚本会附加到 TeamViewer.exe 进程,获取该进程中每个库的基地址和内存大小。然后,它会逐一转储内存区域,搜索以 [00 88] 字节开头、以 [00 00 00] 字节结尾的部分,并将它们复制到数组中。下一步也是最后一步,是根据正则表达式和密码策略选择最终的解码原始数据。

执行 C++ 代码后,你会看到这样的视图,“asdQWE123” 就是密码。

这些程序能够很好地提取远程 ID 和密码,但也会产生一些误报数据。如果将来有空闲时间,我们会尝试降低误报率。
优化来自 https://github.com/vah13/extractTVpasswords 的 C++ 代码。
c++ 示例

python 示例
