发布于2022年11月8日3年前 0x00 前言 12月5日,TeamViewer发布了新版本13.0.5640,修复了之前版本13.0.5058中的一个bug。 随后,盖林在github上上传了该漏洞的POC,安全信息网站ThreatPost也报告了这一情况。 但是这个漏洞的描述和POC乍一看很难理解,所以本文做了进一步的测试,验证POC并得出结论。 概念验证: https://github.com/gellin/TeamViewer_Permissions_Hook_V1 ThreatPost报告: https://threatpost . com/teamviewer-rushs-fix-for-permissions-bug/129096/ 0x01 简介 本文将介绍以下内容: 概念验证测试 原理简析 利用理念 保护 0x02 POC测试 1、编译生成dll 使用POC C开发,用VS2012编译时会出现以下bug: 错误c 2784:" std:_String_iterator_Mystr STD:operator(_ String _ iterator _ Mystr:difference _ type,STD: _ String _ iterator _ Mystr)":无法从" std:string "更改为" STD:_ bug的位置: https://github . com/gellin/TeamViewer _ Permissions _ Hook _ V1/blob/master/TeamViewer Hook _ 13 _ 0 _ 3711 _ 88039/main . CPP # L25 出现Bug的原因是作者用了更高版本的Visual Studio来编写。况且这段代码的作用是输出,可以忽略。修改后的代码如下: Console=new Console(STD:string(BANNER),std:string('TeamViewer权限挂钩v1 '); 编译成功,生成teamviewer hook _ 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(客户端)填写ID和密码,并成功连接到主机1(服务器) 如下图 注: TeamViewer支持的一个正常功能:主机2(客户端)选择通信-与伙伴切换角色控制,可以切换角色,允许主机1(服务器)依次控制主机2(客户端),如下图所示。 POC的第一个功能是实现主机1(服务器)在没有授权的情况下控制主机2(客户端)。 流程如下: 在主机1(服务器)上,将TeamViewer hook _ 13 _ 0 _ 3711 _ 88039.dll注入到TeamViewer的进程中。 这里可以使用APC注入,代码可以称为: https://github . com/3g student/Inject-dll-by-APC/blob/master/test . CPP 在dll注入之前,主机1(服务器)点击会话列表,如下图所示 以下dll注入,根据提示输入NUMPAD 1,选择主机/服务器,如下图所示。 再次点击主机1(服务器)的会话列表,列表将被修改,如下图所示。 通过角色切换,主机1(服务器)可以依次控制主机2(客户端)。 4、测试功能B: 主机2(Client)解锁鼠标键盘 在测试a中,主机2(客户端)填写ID和密码,并成功远程连接到主机1(服务器)。 主机1(服务器)通过设置会话列表禁止主机2(客户端)的鼠标远程控制,如下图所示。 正常情况下,主机2(客户端)无法用鼠标远程控制主机1(服务器)。 POC的第二个功能是实现未授权的主机2(服务器),解锁鼠标,远程控制主机1(服务器) 下面的dll注入,根据提示输入NUMPAD 2,选择客户端,如下图所示 成功解锁鼠标,远程控制主机1(服务器),如下图所示 0x03 原理简要分析 通过dll注入,搜索目标进程的内存,找到代表权限的指针地址,重新赋值,执行裸内联钩子修改权限。 修改后的内存结构如下 具体实现方法可以参考源代码。 0x04 利用思路 1、功能A: 主机1(Server)反控主机2(Client) 如果主机1(服务器)通过漏洞成功控制了主机2(客户端),那么主机2(客户端)的桌面将默认显示为受控状态。 但由于TeamViewer进程的内存数据可以通过dll注入来修改,所以也可以控制桌面显示内容(如黑屏、正常屏(不推荐)等)。)通过修改存储器数据。 公共POC不实现控制主机2(客户端)的桌面显示内容的功能。考虑到这个漏洞的危害,本文就不介绍POC转换成EXP的具体方法了。 2、功能B: 主机2(Client)解锁鼠标键盘 在主机2(客户端)已经成功远程连接到主机1(服务器)的前提下,只有当主机1(服务器)选择禁用主机2(客户端)的鼠标时,该功能才会起作用。 0x05 防御思路 1.建议用户升级TeamViewer 13.0.5640的新版本。 注: 截至本文撰写时,TeamViewer官网尚未发布此次升级版本的具体内容,地址如下: https://www.teamviewer.com/en/download/changelog/ 2.不要随意连接未知的TeamViewer服务器。 0x06 小结 本文对TeamViewer 13.0.5058中的特权漏洞POC进行了测试,简单介绍了原理和利用思路,并给出了一些防御建议。 留下回复
创建帐户或登录后发表意见