近日,thinkphp官網發布了安全更新,修復了一個遠程代碼執行漏洞。主要影響的版本為5.0.0~5.0.23版本。此次版本更新主要涉及一個安全更新,由于框架對控制器名沒有進行足夠的檢測,會導致在沒有開啟強制路由的情況下引發黑客執行遠程惡意代碼,從而獲取權限。
漏洞描述
遠程代碼執行漏洞,是用戶通過瀏覽器提交執行命令,由于服務器端沒有針對執行函數做過濾,導致在沒有指定絕對路徑的情況下就執行命令,可能會允許攻擊者通過改變 $PATH,或程序執行環境的其他方面,來執行一個惡意構造的代碼。經過對官方補丁分析,發現該程序未對控制器進行過濾,導致攻擊者可以通過引入\符號來調用任意類方法,從而執行任意命令。
漏洞分析
本次漏洞觸發點在Request.php文件里的method方法中,該方法的功能主要是判斷請求類型。
跟進method方法,這里判斷是否存在'var_method',如果存在則執行$this->{$this->method}($_POST);
在config.php中,可以看到 'var_method' 是表單請求偽變量,其默認值為 '_method'。
這里可以POST _method=__construct用構造函數來進行變量覆蓋,實現命令執行。
在構造函數中,會判斷其傳入參數的key是否是該類屬性,如果是,則將對應的value賦值給該屬性,可以進行變量覆蓋。
再看全局過濾函數filtervalue,根據上一步的變量覆蓋,POST filter[]=system,將$filter賦值為array('system'),同時POST 123456=whoami,觸發過濾函數,調用call_user_func方法,執行whoami命令。
復現結果
建議
①及時進行更新升級。
②自查。
③加強漏洞監測。
本文首發于西安瑞天網(http://www.invitre.com),轉載請注明原文地址:http://www.invitre.com/news/98.html