fileupload-基於pikachu的學習

Muneyoshi發表於2024-05-05

檔案上傳

原理

檔案上傳功能在web應用系統很常見,比如很多網站註冊的時候需要上傳頭像、上傳附件等等。當使用者點選上傳按鈕後,後臺會對上傳的檔案進行判斷 比如是否是指定的型別、字尾名、大小等等,然後將其按照設計的格式進行重新命名後儲存在指定的目錄。 如果說後臺對上傳的檔案沒有進行任何的安全判斷或者判斷條件不夠嚴謹,則攻擊著可能會上傳一些惡意的檔案,比如一句話木馬,從而導致後臺伺服器被webshell。

所以,在設計檔案上傳功能時,一定要對傳進來的檔案進行嚴格的安全考慮。比如:
--驗證檔案型別、字尾名、大小;
--驗證檔案的上傳方式;
--對檔案進行一定複雜的重新命名;
--不要暴露檔案上傳後的路徑;
--等等...

Pikachu

client check

開啟題目,就是上傳不成功,說檔案不符合,F12去找找原始碼

image-20240505201040842

發現前端驗證,我們就給一句話木馬明明test.jpg,然後抓包改名字,一句話木馬如下

<?php@eval($_POST['cmd']);?>

image-20240505201545756

然後給檔名改為test.php

image-20240505201635379

上傳後有路徑

image-20240505201726378

蟻劍連線一下

image-20240505202124896

MIME type

MIME:當檔案的副檔名是用一種應用程式來開啟的方式型別,當副檔名檔案被訪問的時候,瀏覽器會自動指定應用程式來開啟。

有點繞口,通俗點就是,我們上傳的檔案被判定為content-type欄位時,可以透過抓包,將content-type欄位改為常見的圖片型別,例如inamge/gif,從而繞過。也就是我們上傳php檔案時,可以改為jpg、png之類的,然後實現繞過。

MIME((Multipurpose Internet Mail Extensions)多用途網際網路郵件擴充套件型別。

  常見的MME型別,例如:

  超文字標記語言文字 .html,html text/htm

  普通文字  .txt text/plain

  RTF文字. rtf application/rtf

  GIF圖形 .gif image/gif

  JPEG圖形 . jpg image/jpeg

所以這道題我們就是改一下content-type欄位,然後上傳

老規矩抓包

image-20240505203919486

由於我這邊上傳的就是上一題的那個木馬字尾為jpg,所以這裡的欄位就是jpg,我們直接改一下檔案字尾,和上一題一樣

這次改成test2.php,上傳成功

image-20240505204053963

然後蟻劍試著連線一下吧

image-20240505204137982

連線成功

getimagesize

php getimagesize 函式 - 獲取影像資訊

getimagesize() 函式用於獲取影像大小及相關資訊,成功返回一個陣列,失敗則返回 FALSE 併產生一條 E_WARNING 級的錯誤資訊。

語法格式:

array getimagesize ( string $filename [, array &$imageinfo ] )

getimagesize() 函式將測定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 影像檔案的大小並返回影像的尺寸以及檔案型別及圖片高度與寬度。

這道題我們試試傳前兩關用的一句話木馬試試

image-20240505204724197

上傳失敗,我們再抓包改改檔案內容試試,加了一個檔案頭GIF89a試試

image-20240505205001021

上傳成功

image-20240505205021927

但是這上傳的都是圖片,一般需要配合上傳

.user.ini
.htaccess

詳情瞭解這個檔案看

檔案上傳之 .htaccess檔案getshell_上傳.htaccess後再上傳jpg檔案-CSDN部落格

[檔案上傳]淺析.user.ini的利用-CSDN部落格

這道題回顯如下

image-20240505205237045

所以也是沒辦法了,最後搜了搜大家的題解,就是配合前幾關的檔案包含去執行。

相關文章