TeamViewer 13.0.5058 中的权限漏洞测试

发布于 2025-01-18 10:39:40 字数 5218 浏览 2 评论 0

0x00 前言

12 月 5 日,TeamViewer 发布新版本 13.0.5640 ,修复了之前版本 13.0.5058 中的一个 bug。

随后,gellin 在 github 上传了该漏洞的 POC,安全信息网站 ThreatPost 对这个情况作了报道。

但一眼看上去,该漏洞的描述和 POC 较难理解,于是,本文对其做了进一步测试,验证 POC,得出结论

0x01 简介

本文将要介绍以下内容:

  • POC 测试
  • 原理简要分析
  • 利用思路
  • 防御

0x02 POC 测试

1、编译生成 dll

POC 通过 c++开发,在使用 VS2012 对其编译时会出现如下 bug:

error C2784: “std::_String_iterator<_mystr> std::operator +(_String_iterator<_mystr>::difference_type,std::_String_iterator<_mystr>)”:未能从“std::string”为“std::_String_iterator<_mystr>”推导 模板 参数

bug 出现的位置:https://github.com/gellin/TeamViewer_Permissions_Hook_V1/blob/master/TeamViewerHook_13_0_3711_88039/main.cpp#L25

Bug 出现的原因是作者使用更高版本的 Visual Studio 编写,况且这段代码的功能是输出,所以可以忽略,修改后的代码如下:

console = new Console(std::string(BANNER), std::string("TeamViewer Permissions Hook v1"));

编译成功,生成 TeamViewerHook_13_0_3711_88039.dll

2、测试环境搭建

主机 1(Server):

操作系统:Win8 x86

安装 TeamViewer 13.0.5058

作为被控制端,ID 为 543 847 147,密码为 49s4eb

主机 2(Client):

操作系统:Win8 x86

安装 TeamViewer 13.0.5058

作为控制端,用于远程连接主机 1

3、测试功能 A: 主机 1(Server) 反控主机 2(Client)

主机 2(Client) 填入 ID 和密码,成功远程连接主机 1(Server)

如下图

Alt text

注:TeamViewer 支持的一个正常功能: 主机 2(Client) 选择 通信 - 与伙伴切换角色控制 ,能够切换角色,允许主机 1(Server) 反过来控制主机 2(Client),如下图

Alt text

POC 的第一个功能: 实现主机 1(Server) 未经授权,反过来控制主机 2(Client)

流程如下:在主机 1(Server) 上,将 TeamViewerHook_13_0_3711_88039.dll 注入到 TeamViewer 的进程

这里可使用 APC 注入,代码可参考:https://github.com/3gstudent/Inject-dll-by-APC/blob/master/test.cpp

dll 注入前,主机 1(Server) 单击会话列表,如下图

Alt text

下面进行 dll 注入,按照提示输入 NUMPAD 1 ,选择 Host/Server ,如下图

Alt text

再次单击主机 1(Server) 的会话列表,列表被修改,如下图

Alt text

选中 切换角色 ,即可实现主机 1(Server) 反过来控制主机 2(Client)

4、测试功能 B: 主机 2(Client) 解锁鼠标键盘

同测试 A,主机 2(Client) 填入 ID 和密码,成功远程连接主机 1(Server)

主机 1(Server) 通过设置会话列表,禁止主机 2(Client) 的鼠标进行远程控制,如下图

Alt text

正常情况下,主机 2(Client) 无法使用鼠标对主机 1(Server) 进行远程控制

POC 的第二个功能: 实现主机 2(Server) 未经授权,解锁鼠标,远程控制主机 1(Server)

下面进行 dll 注入,按照提示输入 NUMPAD 2 ,选择 client ,如下图

Alt text

成功解锁鼠标,远程控制主机 1(Server),如下图

Alt text

0x03 原理简要分析

通过 dll 注入,搜索目标进程的内存,找到代表权限的指针地址,重新赋值,进行 naked inline hook,实现权限的修改

修改后的内存结构如下图

Alt text

具体的实现方法可参照源代码

0x04 利用思路

1、功能 A: 主机 1(Server) 反控主机 2(Client)

如果主机 1(Server) 通过漏洞成功反控主机 2(Client),默认情况下,主机 2(Client) 的桌面会显示成被控制的状态

但是,既然通过 dll 注入能够修改 TeamViewer 进程的内存数据,那么也能够通过修改内存数据控制主机 2(Client) 的桌面显示内容(例如黑屏、正常屏幕(不推荐) 等)

公开的 POC 未实现控制主机 2(Client) 桌面显示内容的功能,考虑到这个漏洞的危害,本文不会介绍 POC 转为 EXP 的具体方法

2、功能 B: 主机 2(Client) 解锁鼠标键盘

利用前提为主机 2(Client) 已经成功远程连接主机 1(Server),当主机 1(Server) 选择禁用主机 2(Client) 的鼠标时,该功能才会发挥作用

0x05 防御思路

1、建议用户升级 TeamViewer 新版本 13.0.5640

注:截止本文编写,TeamViewer 官网尚未发布该升级版本的具体内容,地址如下:https://www.teamviewer.com/en/download/changelog/

2、不要随意连接未知的 TeamViewer 服务器

0x06 小结

本文对 TeamViewer 13.0.5058 中的权限漏洞 POC 进行测试,简要介绍原理和利用思路,给出防御建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

七秒鱼°

暂无简介

文章
评论
26 人气
更多

推荐作者

迎风吟唱

文章 0 评论 0

qq_hXErI

文章 0 评论 0

茶底世界

文章 0 评论 0

捎一片雪花

文章 0 评论 0

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文