某客服系統任意檔案讀取漏洞分析
live800 早期版本存在任意檔案讀取漏洞。之前有白帽子在某雲平臺上對此漏洞進行提交。很多廠商就將此jsp檔案給刪除來規避這個漏洞。
因為滲透目標也使用了早期版本的此客服系統。downlog.jsp也被刪除了,任意檔案讀取的漏洞也就不存在了。為了突破此限制,我得想方法獲取到live800的早期版本,來進行一波審計,看看是否還存在其他可以利用的漏洞。
在google上搜索 之前的漏洞,發現還是有網址沒有修復。
ofollow,noindex">http://***/live800/downlog.jsp?fileName=/root/.bash_history成功的將 /root/.bash_history 給下載到本地。
從歷史操作中看到,有幾處備份動作。
通過整理,一共發現有三處原始碼備份
/home/live800/working/tomcat/webapps.tar.gz
/home/live800/live800.tar.gz
/home/live800/working/tomcat/webapps/live800-01-29/live20160422.tar.gz
再次利用downlog.jsp漏洞下載到原始碼包。
這次的目標比較明確,就是找到 downlog.jsp 以外的可利用漏洞。希望能夠對我的滲透目標來一次助攻。
使用intellij IDEA 載入原始碼
先審計 web.xml,關注所有的servlet介面及其實現

發現這樣的一個servlet,介面名 downloadserver, url-pattern 為 /downloadserver
也就是說 當我們訪問 http://xxxxx/{webapp}/downloadserver 時,會進入這個servlet邏輯中。
看一下程式碼的主要邏輯
直接看 79行:
var9 = new File(Config.getLive800IMUploadFilesDir() + var4);
這裡就可能存在 ../ 跨目錄的問題了。 new File(path1 + path2) 這裡存在拼接漏洞, path1= uploadFilesDir()常量,我們無法控制,重點就看 var4 這個變數是怎麼來的,是否可控
從 49行 得知 var4是可以由攻擊者控制,通過 fid 引數來傳入。
這樣我們就可以構造成跨目錄的檔案 var9 = new File(Config.getLive800IMUploadFilesDir() + “ ../../.../../../.../../etc/passwd ”);
繼續分析82行和84行函式a 和 函式b的功能
很簡單,就是一個讀取檔案內容並且返回的功能。
這樣就具備了一個任意檔案下載漏洞的必要條件了,接下來就讓程式邏輯走到 79行即可。
payload即為:
downloadserver?ptp=7&fid=../../../../../../../../etc/passwd&act=1
按照許可權最小化原則,web應用應該使用非特權使用者來啟動,來控制應用所能影響的範圍。
當我們訪問一些 root使用者 /root/.bash_history 或者 /etc/passwd目錄時,應用會報錯並提示。

但是實際上很多應用都是以root身份來啟動,因為許可權比較大,可以做到真正意義上的任意檔案讀取。 因此暴露出來的資訊也非常多,通過搜尋引擎可以搜尋到大量的web應用都是用root許可權。
可以被讀到/etc/shadow
這是我收集到的部分shadow中加密的檔案。
利用工具在本地進行離線破解。

最後只暴力破解了一臺伺服器。
如果管理員使用了弱口令來管理伺服器的話,那我就能拿下更多的伺服器了。