TeamViewer 13.0.5058 中的权限漏洞测试
0x00 前言
12 月 5 日,TeamViewer 发布新版本 13.0.5640
,修复了之前版本 13.0.5058
中的一个 bug。
随后,gellin 在 github 上传了该漏洞的 POC,安全信息网站 ThreatPost 对这个情况作了报道。
但一眼看上去,该漏洞的描述和 POC 较难理解,于是,本文对其做了进一步测试,验证 POC,得出结论
- POC:https://github.com/gellin/TeamViewer_Permissions_Hook_V1
- ThreatPost 报道:https://threatpost.com/teamviewer-rushes-fix-for-permissions-bug/129096/
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 出现的原因是作者使用更高版本的 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)
如下图
注:TeamViewer 支持的一个正常功能: 主机 2(Client) 选择 通信
- 与伙伴切换角色控制
,能够切换角色,允许主机 1(Server) 反过来控制主机 2(Client),如下图
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) 单击会话列表,如下图
下面进行 dll 注入,按照提示输入 NUMPAD 1
,选择 Host/Server
,如下图
再次单击主机 1(Server) 的会话列表,列表被修改,如下图
选中 切换角色
,即可实现主机 1(Server) 反过来控制主机 2(Client)
4、测试功能 B: 主机 2(Client) 解锁鼠标键盘
同测试 A,主机 2(Client) 填入 ID 和密码,成功远程连接主机 1(Server)
主机 1(Server) 通过设置会话列表,禁止主机 2(Client) 的鼠标进行远程控制,如下图
正常情况下,主机 2(Client) 无法使用鼠标对主机 1(Server) 进行远程控制
POC 的第二个功能: 实现主机 2(Server) 未经授权,解锁鼠标,远程控制主机 1(Server)
下面进行 dll 注入,按照提示输入 NUMPAD 2
,选择 client
,如下图
成功解锁鼠标,远程控制主机 1(Server),如下图
0x03 原理简要分析
通过 dll 注入,搜索目标进程的内存,找到代表权限的指针地址,重新赋值,进行 naked inline hook,实现权限的修改
修改后的内存结构如下图
具体的实现方法可参照源代码
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 技术交流群。
上一篇: 傀儡进程的实现与检测
下一篇: Covenant 利用分析
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论