原文链接:http://www.4hou.com/vulnerable/9243.html
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出现的位置: 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) 如下图 注: 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进行测试,简要介绍原理和利用思路,给出防御建议
|