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

這裡首先嘗試了上傳 一句話 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()檢測:
同樣,寫一個 .user.ini檔案,利用 auto_prepend_file 設定将 webshell.jpg 包含在index.php的最開頭(注意這個.user.ini檔案同樣需要繞過 exif_imagetype()的檢測):
然後,開始上傳檔案,首先上傳 .user.ini 檔案:
上傳之後,将圖檔馬(一句話)上傳:
通路 它給出的檔案存放路徑:
看到我們寫入顯示的檔案頭了,上傳成功;
到這裡,有兩種方法擷取flag:
第一種 方法:
因為是 我的一句話木馬是get方式擷取參數,參數名為 cmd,是以可以構造payload:
?cmd=system('ls /');
?cmd=system('cat /flag');
或者
?cmd=var_dump(file_get_contents('/flag'));
直接在頁面擷取flag;
第二種方法
需要一句話木馬是POST方式擷取參數;
連接配接蟻劍,右鍵虛拟終端擷取;