upload-labs通關攻略
upload-labs是練習檔案上傳很好的一個靶場,建議把upload-labs關卡全部練習一遍
1.下載安裝
下載地址
連結:https://pan.baidu.com/s/18a5JcD9IifW_Pwc5_bkRsA 提取碼:jhks
安裝
直接把他放在phpstudy的WWW目錄中。(phpstudy的下載安裝,可以自行百度一下)
開啟
訪問地址:127.0.0.1/upload-labs
問題
這裡可能會遇到一個問題,burpsuite會抓不到包。這時我們只需把127.0.0.1改為本機IPv4的地址。檢視本機IPv的方法:開啟cmd,輸入ipconfig.這樣就可以正常抓包了
接下來就可以打靶了。
第一關
第一關通過右鍵檢視原始碼或者提示,我們不難發現是一個前端驗證,一般前端驗證都是紙老虎,形同虛設。
所以第一關的通關方法有三種:
第一就是將瀏覽器js程式碼禁用掉,右鍵---檢查---偵錯程式---設定---禁用JavaScript。快捷方式:f12---f1就可以了
然後就可以上傳了。
這種方法有缺陷,因為禁用了js程式碼,如果在實戰中,網站的一些正常功能可能無法顯示。當然打靶通關是可以的。
第二種方法是用bp抓包工具直接將改字尾名
如果js程式碼是在本地執行,很可能抓不到資料包。這種方法也是不太行,同樣通過第一關是可以的。
第三種方法是將網站原始碼複製下來,放到本地,然後將js程式碼刪除。
右鍵---檢視網站原始碼---全部複製---建立一個記事本---將程式碼放進去---把記事本字尾名改為.html---用Notepad開啟---找到js程式碼---刪除
如果我們開啟,是有上傳檔案的介面,但是不知道要上傳給誰。這時我們返回到最開始,右鍵---檢查---網路---然後上傳一個正常的圖片。這樣我們就可以看到這個檔案傳給誰了。
然後我們在用Notepad開啟我們自己的html檔案,修改action,這個action是告訴他這個圖片提交給誰,因為這個原始碼中沒有,我們就自己加一個。
最後用瀏覽器開啟我們的html檔案,上傳。php檔案即可。建議學會用第三種方法,在實戰中,可能會遇到很多限制條件,第三種方法才是最完美的。
第二關
根據原始碼我們可以發現,這一關是常見驗證中的檔案型別驗證,也就是驗證MIME資訊
所以進行抓包,將Content-Type修改為允許上傳的型別(image/jpeg、image/png、image/gif)三選一。
檢視回顯,發現已經上傳成功
訪問一下
第二關完美通關
第三關
檢視原始碼,我們可以發現是一個黑名單驗證
上一篇講過黑名單是規定不允許上傳的檔案,但是如果黑名單定義不完整的話是可以實現繞過的,用.phtml .phps .php5 .pht進行繞過。這裡我們直接上傳一個.php5檔案
上傳成功,訪問看一下
因為上傳上去的檔名會改變,但是在資料包中有回顯(實戰中可能沒有),所以我們還是可以訪問的。
第三關就完美通過了
注意
要在apache的httpd.conf中有如下配置程式碼:AddType application/x-httpd-php .php .phtml .phps .php5 .pht,如果不配置他是無法解析php5程式碼的,訪問的時候就是一個空白頁
配置過程:以phpstudy2018版本為例
1.開啟其他選項單
2.開啟配置檔案---開啟httpd.conf
3.修改程式碼,去掉註釋符#
4.儲存,重啟phpstudy就可以了
第四關
這一關我們可以看到禁止上傳檔案可太多了
這種情況,我們可以嘗試上傳一個.htaccess配置檔案,將4.png圖片當作php程式碼進行解析,首先建立一個.htaccess檔案,裡面寫上程式碼
<FilesMatch "4.png">
SetHandler application/x-httpd-php
這串程式碼的意思是如果檔案中有一個4.png的檔案,他就會被解析為.php,把這個檔案上傳上去。
上傳上去之後,我們在把圖片用Notepad開啟,裡面寫上php程式碼。再進行上傳。
最後我們訪問這個4.png檔案
第四關就完美通過了
注意
.htaccess檔案不能起名字,他就是.htaccess檔案,如果你將他改為4.htaccess或者其他的什麼名字是不可以的,無法解析。在實戰中有可能上傳上去這個檔案會被自動重新命名,被重新命名了就不可以了。
如果以上操作都弄好了,還是出不來,還是去改phpstudy配置檔案,其他選項選單--開啟配置檔案---httpd.conf
箭頭指向位置一開始none,改為all儲存,重啟phpstudy,就可以了。
第五關
第五關其實是有些upload-labs的第九關,我也認為把這關放到第九關比較合適。如果你的第五關和我的不一樣,那麼我的第六關就是你的第五關,依次類推到第九關。
這一關的思路是它沒有迴圈驗證,也就是說這些收尾去空,刪除末尾的點,去除字串::$DATA,轉換為小寫這些東西只是驗證了一次。所以我們的繞過思路就很簡單,在資料包中把字尾名改為.php. .說一下他的驗證過程,首先他發現有一個點,這時會把他去掉,又發現有一個空格,也會把它去掉,我們這時還有一個點,也就是.php. 由於他只是驗證一次,所以不會在去掉我們的點,這時就可以上傳成功,也可以解析成功。如下圖:
上傳成功,然後訪問
第五關完美通關
第六關
看第六關的程式碼我們知道,這一關沒有強制將大寫轉換為小寫,所以我們可以上傳純大寫或者大小寫結合的字尾名
但是要注意不要和限制上傳的檔案字尾名寫重複了。
直接上傳一個字尾名為.PHP的檔案
我們可以看到上傳成功,訪問
第六關就完美通關了。
第七關
直接看程式碼,發現沒有收尾去空。上傳php檔案,抓包在後面加空格。
然後我們可以發現上傳成功,訪問
第七關闖關成功
第八關
第八關我們可以發現沒有刪除檔名末尾的點,和第七關思路一樣,就是把空格換成點
然後我們可以發現上傳成功,訪問
第八關闖關成功
第九關
第九關檢視程式碼發現沒有去除字串::$DATA(關於什麼是::$DATA參考上一篇文章),和第七八關一樣,直接上傳,在資料包的php後面直接加上::$DATA
然後我們可以發現上傳成功,訪問
第九關闖關成功
第十關
第十關和第五關一樣,第五關怎麼玩,第十關就怎麼玩。(好像第五關和第十關重複了,接下來的十一關有可能是你們的第十關,如果你們的upload-labs和我的一樣就正常看)
第十一關
第十一關也是黑名單的繞過,他的意思是如果你上傳了上面規定的檔案,他就會把你的字尾名去掉,比如你上傳了11.php,那麼他就會把你的php過濾掉。檔案沒有了字尾名,自然也就無法解析了。但是他是一次過濾,也就是說我們寫兩個php就可以了:10.pphphp,他過濾掉一個,正好剩下了11.php。如下圖所示:
上傳成功,然後訪問
十一關通關
總結
這些全部為黑名單繞過,而且只是驗證一次,所以這些關卡全部可以用一個思路解出來,那就是.php. . 都是可以這樣的,但是這就違背了建立靶場者的心思,靶場也就失去了意義,發揮不出靶場真正的作用。大家知道有這麼一回事就可以了。所以大家還是按照本篇老老實實打一遍,通關不是目的,讓知識得到鞏固才是目的。