**upload-labs是一個使用php語言編寫的,專門收集滲透測試和CTF中遇到的各種上傳漏洞的靶場。每一關都包含著不同上傳方式。**
[TOC]
20關都練會了那么也就基本掌握了php文件上傳漏洞的各種方法了
項目地址:https://github.com/c0ny1/upload-labs
搭建了兩個環境,分別是:
1. docker安裝的linux環境
2. 綠色安裝的win2003版本
### pass01:前端js限制(雙殺)
1. 適合操作系統
windows、linux通用,不區分系統
不區分web中間件
2. 如何測試
提交錯誤后綴文件后,控制臺無數據交互產生,說明文件類型驗證是通過前端頁面驗證的
3. 如何繞過
直接禁用js、修改頁面函數、bp抓包
### pass02:mime類型限制(雙殺)
1. 適合操作系統
windows、linux通用,不區分系統
不區分web中間件
2. 如何測試
上傳php文件抓包,將`Content-Type: application/octet-stream`改為`Content-Type: image/jpeg`后提交
能提交成功,且能正常訪問,說明只是限制了mime文件類型
3. 如何繞過
可以直接抓包修改mime類型
也可先將php文件改名為jpg,上傳抓包后將文件名改回去
### pass03:文件后綴限制不嚴格(雙殺)
1. 適合操作系統
windows、linux通用,不區分系統
不區分web中間件
2. 如何測試
錯誤提示:“提示:不允許上傳.asp,.aspx,.php,.jsp后綴文件! ”
上傳文件后,文件會被改名,但后綴不變
3. 如何繞過
以php為例,不光是php后綴可執行,還有php2、php3、php4、php5都可執行
所以文件后綴驗證不嚴格時,可以用這些后綴繞過
### pass04:文件后綴限制不嚴格(雙殺)
1. 適合操作系統
windows、linux通用,不區分系統
僅限于web中間件為apache,且
1. mod_rewrite模塊開啟
2. AllowOverride All
2. 如何測試
上傳php各種后綴均無效,說明文件后綴過濾更嚴格了
發現web中間件是apache,但未過濾`.htaccess`格式文件
3. 如何繞過
上傳一個htaccess文件,文件中允許任何文件當php文件執行
然后再將`123.php`改名為`123.jpg`后上傳,訪問改文件可執行phpinfo
4. htaccess文件內容
```
$ cat 1.htaccess
<FilesMatch "">
SetHandler application/x-httpd-php
</FilesMatch>
```
>htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。通過htaccess文件,可以幫我們實現:網頁301重定向、自定義404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。
### pass05:大小寫限制不嚴格(僅win)
1. 適合操作系統
僅windows可用,因為windowns不區分文件寫,而linux會嚴格區分
2. 如何測試
各種后綴限制嚴格了,包括`.htaccess`格式
但是大小寫為區分,且上傳的大寫文件名不現在
3. 如果繞過
將`123.php`改為`123.phP`后上傳,上傳后可正常訪問使用
### pass06:空格繞過(僅win)
1. 適合操作系統
僅windows可用,在windows下,如果新建文件“123.php ”,實際會被存儲為”123.php“
2. 如何測試
各種后綴限制嚴格,大小寫也不行,可以考慮windows特性繞過
3. 為什么能繞過
通過分析源碼,發現是代碼中沒有處理文件后綴中的空格,導致在windows下的該漏洞
### pass07:空格加點繞過(僅win)
1. 適合操作系統
僅windows可用,在windows下,如果新建文件“123.php .”,實際會被存儲為”123.php“
2. 如何測試
各種后綴限制嚴格,大小寫也不行,可以考慮windows特性繞過
3. 為什么能繞過
通過分析源碼,發現代碼對文件名首尾進行了去空操作,但未處理文件名后的點
### pass08: `::$DATA`繞過(僅win)
1. 適合操作系統
僅windows可用,利用了Windows文件流特性繞過
如果`文件名+"::$DATA"`,會把`::$DATA`之后的數據當成文件流處理,不會檢測后綴名,且保持"::$DATA"之前的文
2. 如何測試
各種后綴限制嚴格,大小寫也不行,可以考慮windows特性繞過
3. 為什么能繞過
通過分析源碼,發現是代碼中過濾了點和前后空格,但未處理DATA流,導致在windows下的該漏洞
### pass09:點空格點繞過(僅win)
1. 適合操作系統
僅windows可用,在windows下,如果新建文件“123.php. .”,實際會被存儲為”123.php“
2. 如何測試
各種后綴限制嚴格,大小寫也不行,可以考慮windows特性繞過
3. 為什么能繞過
通過分析源碼,發現代碼對文件名首尾進行了去空,也限制了DATA流和空格加點,但未處理`. .`這種形式
### pass10:關鍵字替換繞過(雙殺)
1. 適合操作系統
不區分操作系統,通用
2. 如何測試
上傳文件發現文件后綴中若包含php等關鍵字,這些關鍵字會被替換為空,典型的字符替換
3. 如何繞過
僅需將上傳的文件`123.php`,改為`123.pphphp`,中間的php被替換為空后,剩下的文件名變回`123.php`
### pass11:可控目錄00截斷(雙殺)
1. 適合操作系統
不限操作系統(linux搭不起低版本環境,待驗證),但對中間件有要求
1. php版本要小于5.3.4
2. php.ini中的配置`magic_quotes_gpc=OFF`
2. 如何測試
上傳截包后,發現上傳路徑在head頭中可控,可以嘗試00截斷
3. 如何繞過
截包后,head中的路徑`../upload/`改為`../upload/1.php%00`,提交
回顯上傳路徑為`http://xxx/upload/1.php/bbbbb.jpg`
但實際上文件為`http://xxx/upload/1.php`,后續被截斷了
### pass12:可控目錄00截斷(雙殺)
1. 適合操作系統
不限操作系統(linux搭不起低版本環境,待驗證),但對中間件有要求
1. php版本要小于5.3.4
2. php.ini中的配置`magic_quotes_gpc=OFF`
2. 如何測試
上傳截包后,發現上次路徑在body中可控,可以嘗試00截斷
上一個pass的%00不能成功,嘗試另外一種00截斷
3. 如何繞過
截包后,body中的路徑`../upload/`,改為`../upload/1.php`
切換為16進制,找到php代表` 70 68 70`將后一個16進制數改為00
再上傳,結果同pass11一樣
### pass13:文件包含加圖片馬(雙殺)
本pass提供遠程文件包含漏洞,只需要想辦法上傳圖片馬
1. 適合操作系統
不限操作系統
2. 如何測試
頁面做了白名單,僅允許上傳gif、jpg、png三種文件
嘗試直接將`123.php`改名為`123.jpg`后上傳拒絕
說明后端重新不光判斷后綴名,還用了檢測函數檢測文件類型
3. 如何繞過
用copy命令做個真正的圖片馬即可`copy 1.jpg/b + 1.php/b 1.jpg`
或者修改包頭,添加gif圖片頭:GIF89a
4. 繞過后分析:
分析源碼,是截取文件前兩個字符,判斷文件類型是否是gif、jpg、png或位置
### pass14:文件包含加圖片馬(雙殺)
本pass提供遠程文件包含漏洞,只需要想辦法上傳圖片馬
1. 繞過方法
同pass13,圖片馬或改包頭都可以
2. 繞過后分析
分析源碼,是用了getimagesize函數檢測文件是否是圖片,其實也是看包頭
### pass15:文件包含加圖片馬(雙殺)
本pass提供遠程文件包含漏洞,只需要想辦法上傳圖片馬
1. 繞過方法
同pass13,圖片馬或改包頭都可以
2. 繞過后分析
分析源碼,是用了exif_imagetype()函數檢測文件是否是圖片,其實也是看包頭
### pass16:文件包含加圖片馬(雙殺)
本pass提供遠程文件包含漏洞,只需要想辦法上傳圖片馬
1. 如何測試
發現圖片馬可以上傳,改包頭的文件不能上傳
上傳的圖片,會被函數重寫一次,導致圖片馬失效
2. 如何繞過
針對這種會重寫的功能,思路是多嘗試幾個圖片,對比上傳前后圖片,找出里面未變化的部分
將此部分改為一句話馬再上傳(我為實現)
3. 源碼分析
先檢測了文件后綴與檢查了mime類型是否匹配
再根據圖片類型,調用專門的檢測函數如`imagecreatefromjpeg`檢測是否是該型文件
最后用`strval`函數重寫圖片文件
### pass17:先存再檢再刪(雙殺)
1. 源碼分析
本pass困難,分析源碼得知是先將文件存儲,再檢測該文件是否合法,不合法的刪除。
2. 如何繞過
既然會先存儲,那么通過程序快速重傳這個文件,達到一直可以訪問的目的
3. 麻蛋,沒成功,改源碼sleep才行
### pass18:先存再檢再改名(雙殺)
1. 利用條件
中間件為apache,且存在解析漏洞
2. 源碼分析
本pass困難,還是分析源碼,發現會先將文件存放,再改名
3. 如何繞過
截包,將`123.php`改為`123.php.7z`,然后連續重復提交
直到提示:"文件已經被上傳,但沒有重命名"
再利用解析漏洞訪問該文件即可
### pass19:文件名00截斷(雙殺)
1. 適合操作系統
不限操作系統(linux搭不起低版本環境,待驗證),但對中間件有要求
1. php版本要小于5.3.4
2. php.ini中的配置`magic_quotes_gpc=OFF`
2. 如何測試
頁面需要上傳文件名,且需要輸入文件上傳后的新文件名,參數可控
上傳截包后,將`upload-19.jpg`改為`upload-19.php`
嘗試00截斷,%00不能成功,16進制00截斷成功
也可以利用windows特性,在文件名后加點,如`upload-19.php.`
### pass20:數組文件名繞過(僅win)
1. 適合操作系統
僅windows系統
2. 源碼分析檢查過程
先檢查mime類型,只能為jpeg、png、gif
再設置文件名,若將要保存的文件名存在就用,若為空就用上傳文件的文件名
再檢查文件名是否為數組,不是數組則用點號分割為數組
再檢查文件名數組的最后值(即文件后綴)是否是jeg、png、gif
最后再將數組第0位與數組總個數-1位(正常情況下即后綴)重新用點拼接為新文件名并保存文件
3. 繞過思路
需要繞過【判斷是否為數組】這一步,那么需要提交的時候就提交為數組
一個很正常的數組(如`a=["123",".","php"]`),其`a[-1]=a[count(a)-1]`
手動指定數組下標(如`a[0]="123",a[2]="php"`),則`a[-1]!=a[count(a)-1]`
4. 如何繞過
截包后,將`seve_name`復制一份
將第一份save_name的文件名改為`UPLOAD-20.php`,用數組0
將第二份save_name的文件名改為`jpg`,用數組除1外的任何下標
組后構造出來的文件名為`UPLOAD-20.php.`,結合windows特性繞過了
```sh
#原始包#################
-----------------------------20346769815764617441374724817
Content-Disposition: form-data; name="upload_file"; filename="phpinfo.php"
Content-Type: image/jpeg
<?php phpinfo(); ?>
-----------------------------20346769815764617441374724817
Content-Disposition: form-data; name="save_name"
upload-20.jpg
#改名,復制,加數組后的包#############
-----------------------------20346769815764617441374724817
Content-Disposition: form-data; name="upload_file"; filename="phpinfo.php"
Content-Type: image/jpeg
<?php phpinfo(); ?>
-----------------------------20346769815764617441374724817
Content-Disposition: form-data; name="save_name[0]"
upload-20.php
-----------------------------20346769815764617441374724817
Content-Disposition: form-data; name="save_name[-1]"
jpg
-----------------------------20346769815764617441374724817
```
- src導航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查詢
- 備案信息查詢
- 信用信息查詢
- IP反查站點的站
- 瀏覽器插件
- 收集子域名信息
- 在線平臺
- 工具枚舉
- ssl與證書透明度
- DNS歷史解析
- DNS域傳送漏洞
- C段探測
- JS文件域名&ip探測
- 搜索引擎&情報社區
- google黑客
- 威脅情報
- 鐘馗之眼
- 收集相關應用信息
- 微信公眾號&微博
- APP收集&反編譯
- 收集常用端口信息
- 常見端口&解析&總結
- 掃描工具
- 網絡空間引擎搜索
- 瀏覽器插件
- nmap掃描
- 收集敏感信息
- 源碼泄露
- 郵箱信息收集
- 備份文件泄露
- 目錄&后臺掃描
- 公網網盤
- 歷史資產
- 指紋&WAF&CDN識別
- 指紋識別
- CDN識別
- 繞過CDN查找真實IP
- WAF識別
- 漏洞資源和社工
- 漏洞公共資源庫
- 社會工程
- 資產梳理
- 各種對滲透有幫助的平臺
- 掃描器
- 掃描器對比
- AppScan(IBM)_web和系統
- AWVS_web掃描
- X-Scan_系統掃描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_綠盟_web
- 安恒明鑒
- Nessus_系統
- nexpose_系統
- 啟明天鏡_web_系統
- SQL注入
- 常用函數
- sql注入步驟
- union注入和information_schema庫
- 函數和報錯注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解決方案
- Access數據庫注入
- MSSQL數據庫注入
- MYSQL數據庫注入
- 神器SQLmap
- xss跨站腳本攻擊
- xss原理和分類
- xss案例和修復
- xss繞過技巧
- xss案例
- 文件上傳下載包含
- 常有用文件路徑
- 文件上傳漏洞
- 文件下載漏洞
- 文件包含漏洞
- upload-labs上傳漏洞練習
- XXE、SSRF、CSRF
- SSRF原理基礎
- SSRF案例實戰
- CSRF原理基礎
- CSRF案例及防范
- XXE之XML_DTD基礎
- XXE之payload與修復
- XXE結合SSRF
- 遠程命令執行與反序列化
- 遠程命令和代碼執行漏洞
- 反序列化漏洞
- 驗證碼與暴力破解
- 爆破與驗證碼原理
- CS架構暴力破解
- BS架構暴力破解
- WEB編輯器漏洞
- 編輯器漏洞基礎
- Ewebeditor編輯器
- FCKeditor編輯器
- 其他編輯器
- web中間件漏洞
- 中間件解析漏洞
- Tomcat常見的漏洞總結
- Jboss漏洞利用總結
- Weblogic漏洞利用總結
- WEB具體步驟
- 旁注和越權
- CDN繞過
- 越權與邏輯漏洞
- WEB應用常見其他漏洞
- WEB登陸頁面滲透思路
- 獲取WEBshell思路
- 社工、釣魚、apt
- 社工和信息收集
- 域名欺騙
- 釣魚郵件
- 一些釣魚用的掛馬工具
- 代碼審計
- 代碼審計工具
- WAF繞過
- WAF基礎及云WAF
- 各種WAF繞過方法
- 繞過WAF上傳文件
- 系統提權
- windows系統提權
- linux系統提權
- 數據庫提權操作系統
- 內網橫向滲透
- 內網穿透方式
- 一些內網第三方應用提權
- ARP與DOS
- ARP欺騙
- DOS與DDOS
- 一些DOS工具