ATutor學習內容管理系統任意文件上傳漏洞(CVE-2019-12169)分析


漏洞介紹

ATutor是ATutor團隊的一套開源的基於Web的學習內容管理系統(LCMS)。該系統包括教學內容管理、論壇、聊天室等模塊。Atutor與Claroline、 Moddle及Sakai號稱為四大開源課程管理系統。

ATutor2.2.4語言導入功能處存在一處安全漏洞(CVE-2019-12169)。攻擊者可利用該漏洞進行遠程代碼執行攻擊。

經過分析發現,除了CVE-2019-1216所報道的語言導入功能外,ATutor在其他功能模塊中也大量存在着相似的漏洞,本文會在后面針對這一點進行介紹。

漏洞分析

據漏洞披露可知,漏洞觸發點存在於mods/_core/languages/language_import.php文件中

首先跟入language_import.php文件

從language_import.php文件中35行起,可以發現關於文件上傳相關代碼

從上圖紅框中代碼可知,此處代碼塊是對文件上傳情況進行校驗

在文件成功上傳后,進入下一個if分支

在這個分支里,程序將調用\$languageManager->import方法對文件進行處理

繼續跟入import方法

在import方法中,首先確認了用來保存上傳文件的路徑\$import_path

接着調用PclZip對壓縮包進行處理。

為了更好的理解程序執行流程,我們動態調試一下

首先我們構造一個poc.php

將這個poc.php打包為poc.zip

訪問如下鏈接以進入上傳頁面

http://target/ATutor/mods/_core/languages/language_import.php

在上傳語言包頁面中選擇構造好的poc.zip並點擊import按鈕上傳

請求發送給后台服務器,程序執行進入斷點

此時的\$import_path值為atutor應用的/content/import路徑:”content/import/”

程序調用PclZip的extract方法對壓縮包進行解壓

PclZip是一個強大的壓縮與解壓縮zip文件的PHP類,PclZip
library不僅能夠壓縮與解壓縮Zip格式的文件;還能解壓縮文檔中的內容,同時也可以對現有的ZIP包進行添加或刪除文件。

我們再來看下import方法中是如何使用PclZip的

程序創建了上傳的zip壓縮包的一個PclZip對象進行操作與控制,在解壓過程中使用了extract方法。該方法中第一個參數是設置項,第二個是對應設置項的值

我們來看下PCLZIP_OPT_PATH設置項的作用

可見,PCLZIP_OPT_PATH設置項指定我們上傳的zip文件解壓目錄為\$import_path參數對應的路徑

解壓成功后,poc.zip中內容出現在對應文件夾中

查看poc.php中的值,可以發現poc上傳成功

訪問如下地址,觸發poc

除此之外,該應用幾乎所有import接口,在后台都采用PclZip將上傳的zip解壓到對應目錄中。然而這些操作無一例外的未對壓縮包中的文件進行校驗

下面舉幾個例子:

位於mods/_core/themes/import.php文件中的主題導入功能

代碼如下:

可以發現,這里也使用了extract方法將上傳文件進行解壓

來看一下導入主題功能對應的前端頁面

這里頁面與導入語音包的頁面極其相似,只不過最終解壓后存放的路徑不同,不再是content/import/,而是themes/

在此處上傳構造好的poc.zip,最終poc.php將會被解壓到themes文件夾中

位於/mods/_standard/tests/question_import.php文件的問題導入功能

位於mods/_standard/patcher/index_admin.php文件的補丁導入功能

這些功能無一例外的存在着相似的漏洞

總結

針對單一文件上傳,大多數Web應用都會進行嚴格的文件類型檢測,但是涉及到壓縮包上傳,很多應用都不會檢測壓縮包中的內容,直接將壓縮包中內容解壓到對應目錄中,這樣就會導致了這類漏洞的產生。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM