文件上傳之條件競爭上傳,upload-labs18關,文件上傳二次渲染


環境

  • phpstudy
  • upload-labs,Pass-18

條件競爭文件上傳的原理

直接看代碼進行代碼審計,相關的函數我已經做了注釋

<?php
include '../config.php';
include '../head.php';
include '../menu.php';

$is_upload = false;
$msg = null;

// 點擊提交的話
if(isset($_POST['submit'])){
    // 定義一個數組,存放了允許上傳的文件后綴名
    $ext_arr = array('jpg','png','gif');
	
    // 獲取上傳文件的文件名
    $file_name = $_FILES['upload_file']['name'];
	
    // 獲取上傳文件的臨時文件名
    $temp_file = $_FILES['upload_file']['tmp_name'];
	
    // 查找"."在文件名中出現的最后一個位置,然后位置+1,返回后面的內容
    // 其實就是截取文件的后綴名
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
	
    // 文件上傳的位置
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    // 判斷temp文件是否是合法的文件(通過PHP函數 POST方法上傳的文件),如果是的話,將其移動到upload_file處
    // 其實這步沒啥用,類似於開頭的if函數,如果點擊submit就運行代碼這樣子
    if(move_uploaded_file($temp_file, $upload_file)){ 

	// 如果后綴名在ext_arr里面的話,那么上傳,並且重命名文件
        if(in_array($file_ext,$ext_arr)){
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允許上傳.jpg|.png|.gif類型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上傳出錯!';
    }
}
?>

分析代碼可得到文件上傳的邏輯,但是此處是存在邏輯漏洞的,在我們進行文件上傳時,服務器先進行文件上傳操作,后判斷我們上傳的文件合不合法,這樣我們上傳的后門文件只要連接的快,那么服務器就來不及刪除它。其原理就是,在我們進行文件讀寫操作時,是不能刪除該文件的。


upload-labs less-18 演示

上傳我們的php文件后門,抓取數據包

將得到的數據包發送到intruder模塊中,選取UA頭進行爆破(修改UA頭部對數據包無影響),其實就是不斷上傳數據包,然后在服務器刪除之前連上這個php后門,那么服務器就刪除不了我們上傳的后門了

設置爆破類型,Start Attack

成功上傳文件


參考連接

https://www.bilibili.com/video/BV1JZ4y1c7ro?t=4392&p=21


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM