[TOC]
## 文件上傳漏洞
文件上傳功能在web應用系統很常見,比如很多網站注冊的時候需要上傳頭像、上傳附件等等。
當用戶點擊上傳按鈕后,后臺會對上傳的文件進行判斷,比如是否是指定的類型、后綴名、大小等等,然后將其按照設計的格式進行重命名后存儲在指定的目錄。
如果說后臺對上傳的文件沒有進行任何的安全判斷或者判斷條件不夠嚴謹,則攻擊者可能會上傳一些惡意的文件,比如一句話木馬,從而導致后臺服務器被webshell。
**工具推薦**
BurpSuite工具+SwitchOmega瀏覽器插件
### A 上傳漏洞存在的必要條件
1. 存在上傳點
2. 可以上傳動態文件
3. 上傳目錄有執行權限,并且上傳的文件可執行
4. 可訪問到上傳的動態文件
### B 上傳檢測流程
```
1.前端提交 可能遇到JavaScript檢測、flash as檢測等
2.數據傳輸 可能遇到waf攔截、ips攔截等
3.后端處理 可能遇到擴展名檢測、文件格式檢測、mime ytpe檢測、內容檢測等
4.寫入文件系統 可能遇到文件重命名、殺毒軟件查殺等
5.訪問文件 可能遇到無執行權限、位置位置等
```
### C 客戶端檢測繞過
客戶端檢測一般只檢測文件擴展名,可通過對客戶端代碼的一些修改或攔截器修改報文即可繞過
#### 1 JavaScript檢測繞過
1. 查看onchange、onsubmit等事件
onchange事件會在與的內容改變時發生,如選擇文件
onsubmit會在確認按鈕點擊時發生
2. 刪除掉相關事件中的檢測函數
#### 2 提交報文修改檢測
這種方法在前端繞過中是通用的,無需理會具體前端的檢測代碼,直接繞過并提交
1. 將文件名改為符合要求的文件名后上傳
2. 通過bp截包后,進行改包或重放完成文件上傳
#### 3 APP端bp抓包
1. 將bp的代理端口監聽問“all interface”
2. 在手機wifi設置中將代理地址設置為bpip:8080
3. 訪問http://bpip:8080下載證書
4. 安卓將擴展名修改為.crt,然后設置-安裝-平局存儲-從SD卡安裝
5. ios直接按提示安裝完,進入設置-通用-關于本機-證書信任設置,添加信任
如果安卓app使用了證書校驗,可以配合xposed框架的JustTrustMe使用,ios沒辦法
如果使用mumu模擬器,需要用adb打開wifi設置
```
adb connect 127.0.0.1:7555
adb shell am start -a android.settings.WIFI_SETTINGS
```
### D 服務器檢測繞過
#### 1 mime類型檢測繞過
waf或代碼中,可能會檢測mime類型,只允許指定的幾種mime類型通過
好在mime類型是瀏覽器生產的,所以可以通過bp抓包后,修改mime類型來繞過此種檢測
常見的白名單mime type
```
image/jepg
image/png
text/plain
application/zip
application/msword
```
#### 2 簡單文件頭檢測繞過
文件頭是位于文件開頭的一段承擔一定任務的數據,一般在文件的開頭部分,如
gif的文件頭是`GIF89a`,`GIT87a`
jepg的文件頭是`\xff\xd8\xff`(需轉碼)
png的文件頭是`\x89PNG\x0d\x0a`(需轉碼)
這種檢測方法,可以通過在上傳的文件前最佳合法的文件頭進行繞過,如
`GIF89a<?php phpinfo();?>`
#### 3 完整文件結構檢測
通過調用圖像函數(如getimagesize、imagecreatefromgif、imagecreatefrompng等)檢測文件是否是圖像,需要文件內容保持相對完整,所以無法通過加文件頭的方法繞過
針對這種,可以將圖片文件與與上傳文件合并的方式來繞過檢測,合并命令為copy,如
```
copy /b a.gif+php.info upload_phpinfo.gif
```
#### 4 惡意文件內容檢測
如果服務器端的waf,會檢測提交的內容中是否包含webshell等數據時,前幾種方式就都不行了
常見的關鍵字為
```
eval()
base64_encode()
assert()
java.lang.Runtime
java.lang.ProcessBuilder
```
推薦使用強混淆的weevely進行嘗試,kali中自帶
https://github.com/sunge/Weevely
或者嘗試開源的webshell收集項目(要自己判斷是否掛馬)
https://github.com/tennc/webshell
#### 5 一些小技巧
1. 文件參數多filename屬性
如果waf攔截一些擴展名,可以通過抓包后,寫入過個filename屬性的方式來嘗試繞過
2. 目錄可控時,可以嘗試使用目錄穿越的方法
例如文件上傳到`\A\B\C`目錄,但是禁止訪問該路徑下的指定類型文件,那么可以嘗試截包,將上傳路徑改為`../../`的方式傳文件到`\A`下,如果代碼中存在穿越目錄的漏洞,就能成功
3. 擴展名檢測類型可控的情況,如
1 可以從后臺修改允許/禁止的擴展名類型(拿到后臺權限)
2 提交參數中存在允許/禁止的擴展名類型(改前端頁面代碼)
3 前端單獨抽出了文件擴展名進行了提交(截包)
### E 常見解析漏洞
#### 1 IIS/NGINX+php fastcgi取值錯誤解析漏洞
此漏洞屬于配置錯誤,不屬于軟件漏洞
開啟了`cgi.fix_pathinfo`,且未設置`security.limit_extensions`以限制可以執行的文件類型,那么當執行的文件不存在時,會繼續查找上一級文件是否存在,如
`abcde.jpp/.php`,找不到,就會向上查找`abcde.jpg.php`
#### 2 nginx文件名邏輯漏洞(CVE-2013-4547)
影響版本:nginx 0.8.41~14.3/1.5.0~1.5.7
當上傳一個以空格(%20)結尾的文件,如“abcde.jpg ”,然后訪問的時候截包,將文件名改為`abcde.jpg%20%00.php`時,文件會被當做php腳本執行
#### 3 apache解析漏洞(配置錯誤)
如果在apache的conf文件中有如下配置:當后綴不能解析時,會往前尋找可解析的后綴
```
AddHandler application/x-httpd-php .php
```
則abcde.php.jpg也會被當做php去執行,所以當我們拿到服務器,想要自己留后門時,可以設置指定的擴展名.xxx
```
AddHandler application/x-httpd-php .xxx
```
#### 4 IIS 5.X/6.0解析漏洞
1. 分號文件名漏洞
服務器默認不解析分號后面的內容,因此如果截包上傳`abcde.asp;.jpg`的文件后,再通過瀏覽器訪問改文件,會被當成`abcde.asp`執行
2. xxx.asp目錄抖動
服務器會將xxx.asp目錄下的文件,都當做asp文件解析
### F 高級繞過技巧
#### 1 重繪圖繞過
當應用調用圖片庫對上傳的圖像文件進行了圖像轉換,會使我們合并到圖片中的webshell被刪掉而失敗,針對這種情況的繞過步驟為:
1. 將正常圖片用目標使用的圖形庫進行轉換
2. 尋找轉換前后未變化的部分
3. 將未變化的部分替換為欲上傳的webshell
4. 將替換后的文件再次轉換,看改部分是否仍然存在,然后進行上傳
有一個開源代碼可用:
https://github.com/RickGray/Bypass-PHP-GD-Process-To-RCE
#### 2 phpinfo與本地文件包含聯合使用
使用場景是可以獲取phpinfo,也存在文件包含漏洞,但找不到路徑的情況下,可以聯合使用
1. php在解析multipart/form-data請求時,會創建臨時文件,并寫入上傳內容,當腳本執行結束后就刪除
2. phpinfo中可以輸出`$_FILES`信息,里面包含臨時文件地址
3. 通過多種方式爭取時間,在臨時文件刪除錢進行執行包含
如大量垃圾數據使phpinfo頁面過大,導致php的輸出切換為流式輸出
或通過大量請求來延遲php腳本的執行速度
有開源代碼可用:
https://github.com/hxer/vulnapp.git
#### 3 在線解壓縮的漏洞利用
如果某個網站,可以讓你上傳壓縮包,然后網站會將你的壓縮包解壓的情況,可以如下利用:
1. 將webshell打包到壓縮包中
1. 模板上傳傳常用壓縮包上傳后進行自動解壓
部分網站會檢測壓縮包中的內容,可以嘗試建立目錄再進行壓縮
2. 使用目錄穿越`../`的方法向上一級目錄進行上傳
2. 將文件/文件夾軟連接打包到壓縮包中
如鏈接到/etc/password文件,或連接到根目錄等發生
- 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工具