1.簡介(開場廢話)
攻擊者可通過存在漏洞的頁面直接獲取到數據庫配置信息。如果攻擊者可直接訪問數據庫,則可直接獲取用戶數據,甚至可以直接控制數據庫服務器。
2.影響范圍
漏洞涉及范圍包括不限於8.0、9.0版
3.搭建個環境(其實環境不重要,信息泄露這個東西)
4.已知漏洞點出現在/mobile/dbconfigreader.jsp這個頁面(開始胡亂分析。。。有錯還希望師傅們指出來)

直接看源代碼好了,搜了一圈沒找到8.0的安裝包,我太難了,借張圖過來,嘿嘿嘿
來源:https://mp.weixin.qq.com/s/zTEUan_BtDDzuHzmd9pxYg

首先在這個頁面獲取數據庫用戶名密碼,然后存儲到變量sb中,再進行轉換,進行DES加密
有了源碼,我們編譯一下源碼,斷點調試,康康哪里出現了問題
<%
String conStr= "12345"; //Prop.getPropValue("weaver","ecology.url");
String conUser= "12345"; //Prop.getPropValue("weaver","ecology.user");
String conPsw= "12345"; //Prop.getPropValue("weaverl","ecology.password");
String loginType="sqlserver"; //Prop.getPropValue("weaver","authentic");
//上面應該是從別的頁面取數據過來,我這里直接定死
StringBuffer sb=new StringBuffer();
//new 一個StringBuffer類對象
//StringBuffer和StringBuilder 之間的最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)
//由於 StringBuilder 相較於 StringBuffer 有速度優勢,大多數時候還是用StringBuilder
String verb="url="+conStr+",user="+conUser+",password="+conPsw+",Logintype="+loginType;
//賦值操作
byte[] str=verb.getBytes();
//將字符串轉化為字節數組byte[]
String keyString="1z2x3c4v5b6n"; //DES的加密密鑰
System.out.println(verb);//url=12345,user=12345,password=12345,Logintype=sqlserver
byte[] keyByte=keyString.getBytes();
//創建一個密匙工廠,然后用它把DESKeySpec對象轉換成一個Secretkey對象
DESKeySpec dks1=new DESKeySpec(keyByte);
SecretKey key=SecretKeyFactory.getInstance("DES").generateSecret(dks1);
Cipher cipher=Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE,key);
//DES加密操作
byte[] cipherText=cipher.doFinal(str);
//System.out.println(cipherText.length);
ServletOutputStream sos=response.getOutputStream();
System.out.println(cipherText);//[B@641a034d
sos.write(cipherText);
//輸出des加密后的字節流,為啥用輸出流,這里人都傻掉了
sos.flush();
//清空緩沖區數據
sos.close();
//關閉流
%>
並且我這里報異常了,不知道為啥,好像是沖突了

看了下修補方案,似乎就是禁止訪問/mobile/dbconfigreader.jsp這個頁面
4.exp及利用
github上有現成的腳本
https://github.com/NS-Sp4ce/Weaver-OA-E-cology-Database-Leak
主要還是對顯示在頁面上的字節流進行des解密,完事
參考文章:
https://mp.weixin.qq.com/s/zTEUan_BtDDzuHzmd9pxYg
