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出現的位置:n
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進行測試,簡要介紹原理和利用思路,給出防禦建議
本文為 3gstudent 原創稿件,授權嘶吼獨家發布,未經許可禁止轉載;如若轉載,請聯繫嘶吼編輯: http://www.4hou.com/vulnerable/9243.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※iPhone 手機被鎖,如何快速解鎖?
※如何發現Active Directory中的隱身管理員賬戶(二)
TAG:信息安全 |