【安全漏洞】CVE-2021-32682 elFinder RCE 简单分析
簡介
elFinder 是一個開源的 web 文件管理器,使用 jQuery UI 用 Ja??vaScript 編寫。Creation 的靈感來自于 Mac OS X 操作系統中使用的 Finder 程序的簡單性和便利性。
漏洞描述
該漏洞源于,在創建新的zip存檔時,沒有對name參數進行嚴格的過濾,導致參數被帶入prox_open中執行,造成命令注入
影響版本
elFinder <= 2.1.58
環境搭建
下載地址: https://github.com/Studio-42/elFinder
下載完成后,重命名/php/connector.minimal.php-dist為/php/connector.minimal.php
然后在瀏覽器中加載運行/elfinder.src.html即可
漏洞分析
源碼地址: https://github.com/Studio-42/elFinder/releases/tag/2.1.58
私信回復“資料”獲取Web網站開發、滲透測試、等級保護、內網安全、源碼審計、風險評估、安全巡檢、應急響應等全套視頻教程、課件、筆記、學習思路大綱【點擊查看】
得知是通過存檔功能,傳遞name參數造成命令注入,然后進行抓包
可以看出是在connector.minimal.php文件中進行操作
在connector.minimal.php文件中發現,包含文件autoload.php
在autoload.php中,不確定在那個文件,不過通過名字大概率可以在elFinderVolumeLocalFileSystem.class.php和elFinder.class.php中可以找到
先進入elFinderVolumeLocalFileSystem.class.php中,通過抓包得知cmd=archive,可能有archive函數
發現果然有,跟進makeArchive函數
可以看出參數確實是傳到makeArchive,但是不是通過_archive傳進來的
接下來在elFinder.class.php中嘗試
先對name參數進行isset判斷,然后傳入archive函數中,繼續跟進
$name先進行了正則轉換后進行了字符串替換,然后先傳入到uniqueName中,后傳入到remoteArchive中,先跟進到uniqueName中
可以看出是對name進行了一些轉換替換,最后返回name進行了一些轉換替換,最后返回name進行了一些轉換替換,最后返回name值
接下來返回上一步,跟進到remoteArchive中
看見參數傳入到makeArchive函數中,繼續跟進
到這里參數通過escapeshellarg()進行轉義,然后拼接其它參數賦值給$cmd,然后進入到procExec函數中
可以看見$cmd被作為參數,放入到proc_open中執行命令
proc_open命令詳解如下:
自此整個流程分析完成,雖然中間對參數進行了正則和替換的過濾操作,但是因為程序會將name參數值解析為標志(–foo=bar),可以通過zip的-TT指定要運行的測試命令,如:-TmTT="$(id>out.txt)foooo"
通過測試得到,參數在傳入到proc_open中執行命令前,其值為"zip -r9 -q ‘a1.zip’ ‘./a.zip’",所以我們可以構造成以下命令"zip -r9 -q ‘-TmTT="$(id>out.txt)foooo".zip’ ‘./a.txt’",執行id命令并將結果輸出到out.txt中
總結
以上是生活随笔為你收集整理的【安全漏洞】CVE-2021-32682 elFinder RCE 简单分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php源代码保护——PHP加密方案分析解
- 下一篇: 【网络安全】浅析跨域原理及如何实现跨域