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出现的位置:
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进行测试,简要介绍原理和利用思路,给出防御建议