利用Frida从TeamViewer内存中提取密码(CVE-2018-14333)
在这篇文章中,我们将探讨一个关于TeamViewer密码安全的有趣研究,这个方法在渗透测试后期获取通过TeamViewer访问其他机器的权限时非常有用。
TeamViewer自动登录揭秘
您是否曾在Windows云VPS上设置过自定义密码并使用TeamViewer工作?然后,当你下次想要连接时,发现TeamViewer已经自动填充了密码?这是怎么回事?
我们好奇:“我如何能获取这个密码呢?密码是如何存储在我的电脑里的?”
密码存储位置
通过对TeamViewer内存的转储和搜索,我们找到了答案:
密码以Unicode格式存储在内存中。如果你结束TeamViewer的工作但并未结束进程(或者没有从菜单选择退出),密码会被保留在内存中。
经过分析,我们发现红色区域是起始魔法数据,而第二个区域是结束魔法数据(有时,其值为00 00 00 20 00 00)。
获取密码的脚本
为了从内存中提取这些密码,我们编写了两个小型程序,分别用Python和C++语言实现。
感谢Frida团队开发出如此出色的工具!我们的Python脚本会附加到TeamViewer.exe进程,获取每个库的基址和内存大小,然后逐一转储内存区域,寻找以[00 88]开头,以[00 00 00]结尾的部分,并将它们复制到数组中。最后一步是按照正则表达式和密码策略解码有效的行。
执行C++代码后,你会看到类似"asdQWE123"这样的密码:
展望未来
- 程序能够有效提取远程ID和密码,但也可能存在一些误报日期的问题。如果我们有时间,我们将尝试降低误报率。
- 对C++代码进行优化,可参考GitHub上的extractTVpasswords仓库。
示例
这是C++示例的结果:
以及Python示例的效果:
由@NewFranny 和 @vah_13 共同呈现。
这个开源项目不仅揭示了TeamViewer密码存储的一个重要漏洞,也为安全研究人员提供了一个实用的工具来学习和实践内存取证。无论是出于教育目的还是实际的安全评估,extractTVpasswords
都是一个值得探索的宝贵资源。如果你经常与TeamViewer打交道,那么了解和掌握这项技术将使你的工作更加得心应手。立即加入我们,一起深入探究这一领域的奥秘吧!