檔案上傳 upload-labs Pass-17 二次渲染
阿新 • • 發佈:2022-04-09
Pass-17
審計原始碼
$is_upload = false; $msg = null; if (isset($_POST['submit'])){ // 獲得上傳檔案的基本資訊,檔名,型別,大小,臨時檔案路徑 $filename = $_FILES['upload_file']['name']; $filetype = $_FILES['upload_file']['type']; $tmpname = $_FILES['upload_file']['tmp_name']; $target_path=UPLOAD_PATH.'/'.basename($filename); // 獲得上傳檔案的副檔名 $fileext= substr(strrchr($filename,"."),1); //判斷檔案字尾與型別,合法才進行上傳操作 if(($fileext == "jpg") && ($filetype=="image/jpeg")){ if(move_uploaded_file($tmpname,$target_path)){ //使用上傳的圖片生成新的圖片 $im = imagecreatefromjpeg($target_path); if($im == false){ $msg = "該檔案不是jpg格式的圖片!"; @unlink($target_path); }else{ //給新圖片指定檔名 srand(time()); $newfilename = strval(rand()).".jpg"; //顯示二次渲染後的圖片(使用使用者上傳圖片生成的新圖片) $img_path = UPLOAD_PATH.'/'.$newfilename; imagejpeg($im,$img_path); @unlink($target_path); $is_upload = true; } } else { $msg = "上傳出錯!"; } }else if(($fileext == "png") && ($filetype=="image/png")){ if(move_uploaded_file($tmpname,$target_path)){ //使用上傳的圖片生成新的圖片 $im = imagecreatefrompng($target_path); if($im == false){ $msg = "該檔案不是png格式的圖片!"; @unlink($target_path); }else{ //給新圖片指定檔名 srand(time()); $newfilename = strval(rand()).".png"; //顯示二次渲染後的圖片(使用使用者上傳圖片生成的新圖片) $img_path = UPLOAD_PATH.'/'.$newfilename; imagepng($im,$img_path); @unlink($target_path); $is_upload = true; } } else { $msg = "上傳出錯!"; } }else if(($fileext == "gif") && ($filetype=="image/gif")){ if(move_uploaded_file($tmpname,$target_path)){ //使用上傳的圖片生成新的圖片 $im = imagecreatefromgif($target_path); if($im == false){ $msg = "該檔案不是gif格式的圖片!"; @unlink($target_path); }else{ //給新圖片指定檔名 srand(time()); $newfilename = strval(rand()).".gif"; //顯示二次渲染後的圖片(使用使用者上傳圖片生成的新圖片) $img_path = UPLOAD_PATH.'/'.$newfilename; imagegif($im,$img_path); @unlink($target_path); $is_upload = true; } } else { $msg = "上傳出錯!"; } }else{ $msg = "只允許上傳字尾為.jpg|.png|.gif的圖片檔案!"; } }
首先檢查我們的圖片是否為jpg png gif
圖片,否者無法上傳成功,然後使用move_uploaded_file
將我們上傳的檔案進行移動
移動後使用imagecreatefromjpeg
函式對我們的圖片進行修改,將修改的圖片上傳到靶機
所以,我們需要進行圖片合成木馬,進行合成上傳測試,步驟請見Pass-14
合成後進行上傳測試,檔案上傳成功,上傳圖片馬的php程式碼
為<?php phpinfo();?>
執行phpinfo();
檔案包含測試