1. 程式人生 > 其它 >upload-labs(11~12)通關筆記

upload-labs(11~12)通關筆記

upload-labs(11~12)通關筆記

環境準備

1、php版本 < 5.3.4

2、magic_quotes_gpc = Off

php我用的是upload-labs官方推薦的5.2.17,搭建平臺用的是phpStudy2018。

修改magic_quotes_gpc

magic_quotes_gpc的作用是對get請求、post請求、cookie...傳入的資料進行轉義處理,它只存在於php5.3.4版本及以下版本,比如當我們傳入url編碼%00時,%00就會被轉義成0,也就是說當magic_quotes_gpc為On的狀態下,url編碼是不會被解析的,而我們又恰恰需要url編碼被解析,所以我們得把magic_quotes_gpc的狀態改為Off。

到php的根目錄找到php.ini檔案, 接著開啟並修改為Off

第11關

過關步驟

檢視前端原始碼

F12直接定位到form表單處,我發現post請求裡面攜帶了一個url引數,疑似是檔案的上傳路徑

廢話少說,咱先測試一下,隨便輸入個引數進去,看看能不能提交成功,如果提交成功則說明這個引數是可控的,即<檔案上傳路徑可控>,反之,就是不可控。

可以看到,剛剛的圖片檔案已經上傳成功了,如圖

檢視後端原始碼

什麼是%00截斷?

在url中%00表示ascii碼中的0,而0作為特殊字元保留,表示字元結束,也就是說,在儲存檔案的時候,如果路徑引數(例: $img_path)中出現了%00,就會認為路徑到這裡就已經結束了,從而忽略後面一系列的引數,比如$img_path = ../upload/test.php%00/test.jpg

,此時,路徑引數的後半部分就會被%00給截斷,從而變成$img_path = ../upload/test.php

使用%00截斷有兩個要求:

1、php的版本 < 5.3.4

2、php.ini中的magic_quotes_gpc的狀態為Off

補充:在儲存檔案的時候,如果路徑結尾的檔名稱和實際要儲存的檔名稱重名了的話,那麼則會以路徑結尾的檔名稱為準。

例:../upload/test.php # 儲存路徑

test.jpg # 檔名

實際儲存以後的檔名:test.php

抓包攔截

檢視結果

可以看到,圖片已經上傳成功了

第12關

通關方法和第11關差不多,只不過傳遞save_path引數的方式變成了POST,接收引數的方式也變成了POST

後端接收引數的方式變為了POST

這裡提一點,因為第12關傳遞引數的方式為POST,POST是不會自動解碼的,所以我們需要手動decode一下。

檢視結果

【認真做好當下的每一件事情,加油,奧利給!】