upload-labs 通關筆記


前言:
1、upload-labs是一個使用php語言編寫的,專門收集滲透測試和CTF中遇到的各種上傳漏洞的靶場。旨在幫助大家對上傳漏洞
有一個全面的了解。目前一共20關,每一關都包含着不同上傳方式。(項目地址:https://github.com/c0ny1/upload-labs)
2、靶機包含漏洞類型分類。

3、如何判斷上傳漏洞類型?

upload-labs write up:
Pass-01 繞過前段js檢查

刪除 return checkFile() 即可繞過。或者用瀏覽器插件禁用js然后進行上傳。


Pass-02 白名單-Content-type繞過
方法一:繞過前段(刪去js限制或者改為.jpg等),通過burpsuite抓包,修改MIME
方法二:加后綴.jpg可直接繞過MIME,但提交時需要抓包刪去.jpg

Content-Type: application/octet-stream 改為:Content-Type: image/png 即可上傳繞過:

Pass-03 黑名單-特殊可解析后綴繞過
繞過黑名單方法較多:使用.php2.phtml.phps、大小寫、雙寫php等。這里使用.php2繞過,實戰的話根據服務端配置進行測試。
上傳的是.php2這種類型文件的話,如果想要被當成php執行的話,需要有個前提條件,即Apache的httpd.conf有如下配置代碼
AddType application/x-httpd-php .php2 .phtml .phps
AddType 指令在給定的文件擴展名與特定的內容類型之間建立映射關系。MIME-type指明了包含extension擴展名的文件的媒體類型。

Pass-04 黑名單-.htaccess 繞過
本pass禁止上傳.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|
.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|
.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|
.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后綴文件!唯獨沒禁.htaccess后綴!
所以我們構造.htaccess文件:AddType application/x-httpd-php .jpg .conf
這里代碼的意思是把.jpg/.conf等后綴名文件以php格式解析,因此達到了可執行的效果。
沒有上傳.htaccess 文件前:

上傳.htaccess 文件后被解析成php文件。

注: .htaccess文件生效前提條件為1.mod_rewrite模塊開啟。2.AllowOverride All

Pass-05 黑名單-大小寫繞過
加上了.htaccess,但是沒有對后綴統一大小,所以我們可以通過大小寫繞過:

Pass-06 黑名單-空格繞過
查看代碼,這里將文件后綴名統一進行了小寫轉換,

但是沒有去除文件名首尾的空格。所以我們可以利用windows系統的命名規則進行繞過。

Pass-07 黑名單-點繞過
原理同Pass-07,代碼中沒有對點進行過濾,所以利用windows特性,通過抓包在后綴名加”.”繞過:

Pass-08 黑名單-::$DATA繞過
查看代碼,發現沒有對后綴名進行去”::$DATA”處理,利用windows的特性,通過抓包在后綴名后加” ::$DATA”繞過:


知識點:文件名+"::$DATA"會把::$DATA之后的數據當成文件流處理,不會檢測后綴名.且保持"::$DATA"之前的文件名。

Pass-09 黑名單-點空點繞過
查看代理,發現這里的代碼邏輯是先刪除文件名末尾的點,再進行首尾去空。都只進行一次。所以我們構造點空格點進行繞過,把后綴名改為1.php. .,也是利用了Windows的特性。

Pass-10 黑名單-雙寫繞過
上傳一個正常文件發現php被吃掉了。

代碼一看,發現這里將php后綴名替換為空,於是可以利用雙寫繞過:

Pass-11 白名單-%00截斷繞過(get)
查看代碼,本關使用了白名單,只允許上傳,jpg,png,gif三種格式文件。但是發現使用$img_path直接拼接
(利用 get['save_path'] 和隨機時間函數進行拼接,拼接成文件存儲路徑。),因此可以利用%00截斷繞過


截斷條件:
1、php版本小於5.3.4 2、php.ini的magic_quotes_gpc為OFF狀態
知識點:這里利用的是00截斷。move_uploaded_file函數的底層實現類似於C語言,遇到0x00會截斷。

Pass-12 白名單-%00截斷繞過(post)
查看代碼,發現這關和十一關不同的是這次的save_path是通過post傳進來的,還是利用00截斷,但這次需要在二進制中進行修改,因為post不會像get對%00進行自動解碼。

修改二進制進行截斷:

上傳成功,返回路徑:

Pass-13 圖片馬 繞過(unpack)

本關要求上傳圖片馬,那么我們就使用cmd制作圖片馬來進行繞過:copy 1.jpg /b + 1.php /a test.jpg

下面是我們隱藏的小馬兒:

當然我們是無法直接利用圖片馬的,它需要配合其他漏洞進行使用。比如:包含漏洞,解析漏洞。。。
知識點:unpack() 函數從二進制字符串對數據進行解包。

Pass-14 圖片馬繞過 - getimagesize
這里用getimagesize獲取文件類型,還是直接就可以利用圖片馬就可進行繞過:

知識點:getimagesize() 函數用於獲取圖像大小及相關信息,成功返回一個數組,失敗則返回 FALSE 並產生一條 E_WARNING 級的錯誤信息。

Pass-15 圖片馬繞過 - exif_imagetype()
本pass使用exif_imagetype()檢查是否為圖片文件!
這里用到php_exif模塊來判斷文件類型,還是直接就可以利用圖片馬進行繞過:

注:需要開啟php_exif模塊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM