天天看點

BUU_Web [SUCTF 2019]CheckIn

打開解題網址,一看就是檔案上傳:

BUU_Web [SUCTF 2019]CheckIn

這裡首先嘗試了上傳 一句話 php, 以及文本,測試後發現需要上傳 jpg 格式圖檔,并且檔案中不能含有 <? ,檔案字尾不能是 php檔案的所有字尾;到這裡,涉及知識盲區了;翻看大佬wp 才明白這道上傳題沒有之前的那麼簡單;

  • 需要利用到一個 .user.ini 檔案,以及利用GIF 檔案頭繞過exif_imagetype()檢測;
  • 知識點

    .user.ini 檔案

  • .user.ini檔案是相當于由用戶端控制的一個 php.ini檔案,系統在執行php代碼之前,會先對目錄進行掃描,發現 .ini檔案,則先執行 .ini檔案,再執行php代碼;
  • 利用:在.user.ini 檔案中寫入 auto_prepend_file函數或者 auto_append_file 函數;這兩個函數的作用就是将 一個檔案 例如 1.jpg包含到接下來要執行的php檔案中去(如index.php),相當在 PHP檔案中插入了一條 require(./1.jpg);
  • .user.ini利用條件

    1,伺服器使用 CGI/FastCGI 模式

    2,對應目錄下有可執行的php檔案

    3,open_basedir沒有被限制

  • auto_prepend_file 與 auto_append_file的差別

    auto_prepend_file 是在php檔案加載前将 檔案包含進 php檔案最前面;

    auto_append_file 是在php檔案加載後将檔案包含進php檔案末尾,(并且當檔案調用了exit()時,該設定無效);

    是以通常使用 auto_prepend_file ;

  • .user.ini檔案具體詳情
  • .user.ini檔案在滲透中的利用
  • 更多細節

解題:

既然php所有格式無法上傳,隻能是 jpg格式,并且不能包含 <? ,是以,可以制作一個圖檔馬,實際上隻是字尾為 jpg格式,并加上 GIF89a 檔案頭繞過exif_imagetype()檢測:

BUU_Web [SUCTF 2019]CheckIn

同樣,寫一個 .user.ini檔案,利用 auto_prepend_file 設定将 webshell.jpg 包含在index.php的最開頭(注意這個.user.ini檔案同樣需要繞過 exif_imagetype()的檢測):

BUU_Web [SUCTF 2019]CheckIn

然後,開始上傳檔案,首先上傳 .user.ini 檔案:

BUU_Web [SUCTF 2019]CheckIn

上傳之後,将圖檔馬(一句話)上傳:

BUU_Web [SUCTF 2019]CheckIn

通路 它給出的檔案存放路徑:

BUU_Web [SUCTF 2019]CheckIn

看到我們寫入顯示的檔案頭了,上傳成功;

到這裡,有兩種方法擷取flag:

第一種 方法:

因為是 我的一句話木馬是get方式擷取參數,參數名為 cmd,是以可以構造payload:

?cmd=system('ls /');

BUU_Web [SUCTF 2019]CheckIn

?cmd=system('cat /flag');

或者

?cmd=var_dump(file_get_contents('/flag'));

BUU_Web [SUCTF 2019]CheckIn

直接在頁面擷取flag;

第二種方法

需要一句話木馬是POST方式擷取參數;

連接配接蟻劍,右鍵虛拟終端擷取;

BUU_Web [SUCTF 2019]CheckIn
buu