6

TeamViewer 13.0.5058中的权限漏洞测试

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/TeamViewer-13.0.5058%E4%B8%AD%E7%9A%84%E6%9D%83%E9%99%90%E6%BC%8F%E6%B4%9E%E6%B5%8B%E8%AF%95/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

TeamViewer 13.0.5058中的权限漏洞测试

0x00 前言


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

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

但一眼看上去,该漏洞的描述和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出现的位置:

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


LEAVE A REPLY


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK