1. 程式人生 > >CVE-2018-18888漏洞分析

CVE-2018-18888漏洞分析

CVE-2018-18888漏洞分析

本漏洞發現於PHP開源框架laravelCMS

其中 \app\Http\Controllers\Backend目錄下的ProfileController.php檔案中關於檔案上傳的過濾與限制部分原始碼如下

if ((($_FILES["avatar"]["type"] == "image/png") || ($_FILES["avatar"]["type"] == "image/jpeg") || ($_FILES["avatar"]["type"] == "image/pjpeg")) && ($_FILES["avatar"]["size"] < 1000000)) { if ($_FILES["avatar"]["error"] > 0) { return 1; } else { move_uploaded_file($_FILES["avatar"]["tmp_name"], 'uploads/' . $_FILES["avatar"]["name"]); $data = [ 'avatar' => "http://leslie.net.cn/uploads/" . $_FILES["avatar"]["name"], ];

在這裡只是單純地通過http請求中的content-type型別來對檔案上傳型別進行限制,攻擊者在利用過程中可使用burpsuite來修改content-type來繞過檔案上傳的格式驗證

防範方法:

1.白名單方式過濾副檔名,使用in_array或者(===)針對使用者上傳檔案的副檔名進行比對

2.在使用者上傳檔案的時候重新命名檔案,可以使用類似於MD5(time()+rand(1,100000))這種時間戳與拼接隨機數的MD5值的方式