漏洞代碼:
public function myCache(){
$a = "\nphpinfo();//";
Cache::set("hack to cache",$a);
return "cache ok!!!";
}
訪問:http://tp50.com/index.php/index/index/myCache
漏洞分析:
下斷點分析
首先是Cache::set("hack to cache",$a);
,該類沒有實例化,進行自動加載機制進行實例化
然后先來到Cache::set方法中
隨后就是先進入 init 的初始化方法中 接着繼續進入connect方法中
先調用Cache::get方法,該方法中是返回 cache的相關的參數
然后返回 來到connecct方法中,該方法默認返回File類的實例化
最后進入 set 方法中
其中 file_put_contents 方法寫入的內容可控 導致 緩存文件getshell
最后自己發現的是:tp5下面 如果web目錄設置為./public下 那么也無法通過路由訪問runtime
修復:
看一下修復之后的結果(v5.0.15)