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. . 都是可以這樣的,但是這就違背了建立靶場者的心思,靶場也就失去了意義,發揮不出靶場真正的作用。大家知道有這麼一回事就可以了。所以大家還是按照本篇老老實實打一遍,通關不是目的,讓知識得到鞏固才是目的。
upload-labs(12-21關)
接下來的主要就是白名單的繞過,直接開幹。
第十二關
第十二關我們看程式碼,可以得知是一個白名單,只允許上傳'jpg','png','gif'格式的檔案。但是上傳路徑是可以控制的,可以使用%00進行截斷。%00只能用於php版本低於5.3的。這裡我們需要把phpstudy切換一下版本,把magic_quotes_gpc關閉,以phpstudy為例。其他選項選單---php擴充套件及設定---引數開關設定---把magic_quotes_gpc關閉。
圖片就湊合看一下吧,找到位置就可以了。接下來就上傳,要上傳jpg檔案。然後去修改地址
這裡相當於上傳了一個12.php檔案到upload中,%00就是截斷了,後面的不要了。
訪問
這樣就可以了,順利通關。
第十三關
第十三關和第十二關是差不多的,只不過是接受值變成了post,她兩的差別呢就是get會自行解碼,post不會自行解碼,我們需要對%00進行編碼,選中%00右鍵,按下圖操作來
編碼好,我們就可以上傳了
上傳成功,訪問
第十三關成功
第十四關
第十四關是用圖片+php程式碼,組成一個圖片碼進行上傳,當然要想解析出來這個圖片,還得有這個包含漏洞。我們看到,他已經說了,網站存在包含漏洞
首先製作一個圖片碼,可以直接用Notepad直接開啟圖片後面加一個php程式碼,但是需要16進位制,要不然圖片可能出錯。
也可以cmd進行生成,命令語句:copy 14.jpg /b + 14.php /a webshell.jpg 如圖所示,我們在上傳這個生成後的圖片。
上傳
訪問
看一下訪問的地址,因為一開始就說了有一個包含漏洞
所以地址要加上file
第十四關闖關成功。
第十五關
第十五關我們要了解一個函式
我們來看這個 getimagesize函式,這個函式的意思是:會對目標檔案的16進位制去進行一個讀取,去讀取頭幾個字串是不是符合圖片的要求的
所以這關還是用和14關一樣的方法,生成帶有php程式碼的圖片上傳,配合包含漏洞拿下此關。
上傳成功,訪問
十五關通關成功
十六關
第16關同14,15關思路一樣,操作一樣。但是需要開啟php_exif,
phpstudy的其他選項選單---開啟配置檔案---php-ini
重啟phpstudy即可
exif_imagetype() 讀取一個影像的第一個位元組並檢查其簽名。
本函式可用來避免呼叫其它 exif 函式用到了不支援的檔案型別上或和 $_SERVER['HTTP_ACCEPT'] 結合使用來檢查瀏覽器是否可以顯示某個指定的影像。
通過過程參考14,15關。
第十七關
第十七關主要是把二次渲染繞過
imagecreatefromjpeg()函式
二次渲染是由Gif檔案或 URL 建立一個新圖象。成功則返回一影像識別符號/影像資源,失敗則返回false,導致圖片馬的資料丟失,上傳圖片馬失敗。
進行通關
按照原來的方法進行上傳,我們可以發現還是可以上傳的,但是配合包含漏洞卻無法解析,這時我們把上傳的圖片複製下來用Notepad開啟,發現我們原來寫的php程式碼沒有了,這就是二次渲染把我們裡面的php程式碼刪掉了。
我們
把原圖和他修改過的圖片進行比較,看看哪個部分沒有被修改。將php程式碼放到沒有被更改的部分,配合包含漏洞,就可以了。
使用HxD Hex Editor進行比較
下載地址:https://mh-nexus.de/en/hxd
然後比較
具體實現需要自己編寫Python程式,人工嘗試基本是不可能構造出能繞過渲染函式的圖片webshell的,知道怎麼解就可以了。
第十八關
第十八關主要是對條件競爭的考察,我們看程式碼他是先將圖片上傳上去,才開始進行判斷字尾名、二次渲染。如果我們在上傳上去的一瞬間訪問這個檔案,那他就不能對這個檔案刪除、二次渲染。這就相當於我們開啟了一個檔案,然後再去刪除這個檔案,就會提示這個檔案在另一程式中開啟無法刪除。
操作:直接上傳一個php檔案,然後進行抓包,將資料包傳送至intruder下,如圖操作
然後如圖操作修改
再修改一下執行緒
然後發包,用另一個瀏覽器一直訪問18.php地址,只要在上傳的一瞬間,他還沒來的及刪除、修改就可以了。(卡吧)
18關完美通關。
第十九關
第十九關的上傳路徑有點問題,不是上傳到了upload裡面,建議修改一下,進入第十九關,找到myupload.php檔案,如圖所示修改。
重啟就可以了。
這關是檢查了字尾名,然後上傳,然後在進行二次渲染。這時我們只能上傳圖片馬,而且得配合解析漏洞進行通關
操作和18關的一樣,就是訪問地址是加上包含漏洞的。
沒什麼問題,這些漏洞其實都是邏輯上的漏洞,二次渲染本身是沒什麼問題的。如果人家先驗證在進行上傳那就沒有辦法了。
19關完美通關。
第二十關
20關是兩種通關方法
第一種
move_uploaded_file()函式中的img_path是由post引數save_name控制的,可以在save_name利用%00截斷(注意php版本低於5.3)。如圖:
訪問
由於這種前面關卡已經用過,相信作者真正用意不是考這個。
第二種
move_uploaded_file()有這麼一個特性,會忽略掉檔案末尾的 /.
所以我們把他修改為如圖所示
訪問
第二十關完美通關
第二十一關
這一關是利用陣列繞過驗證
訪問
十九關是一個黑名單,php/.就可以繞過,但是二十關他會檢測檔案字尾名,是一個白名單。所以把他拆分掉第三部分是.png,所以就會上傳。實際上他上傳上去的東西是
upload-21.php/.png 上傳上去的東西就是upload-21.php。實現了繞過。
完美通關
以上就是全部的通關攻略,由此也可以看出白名單比黑名單要安全很多。在實戰中,沒有程式碼,只能使用這些方法一個一個的去測試。