- 檔案上傳流程
- 前端選擇檔案,提交
- 瀏覽器形成POST Multiple報文發送至服務器
- 報文決議
- 綠線上為請求頭
- Http協議,瀏覽器,請求方式,編碼型別,請求地址等資料
- 綠線下為請求資料
- 普通引數
- 引數名,引數值(隱藏欄位)
- 檔案名,回應請求的函式名,檔案型別
- 普通引數
- 綠線上為請求頭
- 報文決議
- 服務器中間件接受報文,決議后交給后端代碼處理
- 后端代碼將決議檔案內容寫入臨時檔案中(PHp特有)
- 寫入檔案中,檔案名以特定定規則命名
- 上傳漏洞的必要條件
- 存在上傳點
- 可以上傳動態檔案
- 上傳目錄有執行權限,并且上傳的檔案可執行
- 可訪問到上傳的動態檔案
- 上傳檢測流程
- 前端提交
- JavaScript檢測
- 普通的表單提交
- 查看onchange事件,onsubmit等事件
- onchange事件會在域的內容改變時發生
- onsubmit事件會在表單的確認按鈕被點擊時發生
- 洗掉相關事件中的檢測函式
- 查看onchange事件,onsubmit等事件
- 普通的表單提交
- Flash AS檢測
- 提交請求上傳前.觸發AS腳本檢測
- 直接利用burpSuite修改報文,修改成自己想要的樣子
- 提交請求上傳前.觸發AS腳本檢測
- App上傳檢測
- 檢測寫在App客戶端,或者所呼叫的HTML頁面中
- 將BurpSuite的代理埠監聽IP設定為"All Interface"
- 將WiFi的代理設定為Burpip:8080
- 訪問Http://burPip:8080下載證書
- (安卓)將修改的證書擴展名改為.crt,設定->安全->憑證存盤->從SD卡安裝,選擇證書進行安裝
- (IOS)按照提示一路下一步安裝
- (IOS)進入設定->通用->關于本機->證書信任設定,將添加的證書設定為信任
- (如果安卓App使用了證書校驗,可以配合Xposed的框架的JustTrustMe使用,IOS暫時沒有辦法)
- Mumu模擬器打開WiFi配置的方法
- adb connect 127.0.0.1:7555
- Adb shell am start -a android.settings.WIFI_SETTINGS
- 檢測寫在App客戶端,或者所呼叫的HTML頁面中
- JavaScript檢測
- 資料傳輸
- WAF攔截
- IPS攔截
- 后端處理
- 擴展名檢測
- MIME TYPE檢測(描述訊息內容型別的因特網標準,包括文本,影像,音頻,以及其他應用程式專用的資料,瀏覽器根據上傳的擴展名匹配對應的MIME型別)
- 修改content_type 型別,找到允許通過的白名單
- 檔案格式檢測
- 檔案頭檢測
- 檔案頭是位于檔案開頭的一段承擔一定任務的資料,一般在開頭部分(檔案起始部分中一般開頭檔案型別如:GIF>開頭為 GIF89a/GIF87a)
- 在需要繞過上傳檢測的,追加合法的檔案頭
- 檔案頭是位于檔案開頭的一段承擔一定任務的資料,一般在開頭部分(檔案起始部分中一般開頭檔案型別如:GIF>開頭為 GIF89a/GIF87a)
- 檔案完整內容檢測
- 通過呼叫影像函式(如:getimagesize/imagecreatefromgif/imagecreatefrompng),進行檢測檔案是否為影像,需要檔案內容保持相對完整,所以通過追加檔案頭無法通過
- 針對這種檢測可以將圖片與欲上傳的檔案進行合并來染過檢測
- 通過copy命令進行合并
- copy /b 1.jpg+phpinfo.php 新檔案名稱.jpg
- 通過呼叫影像函式(如:getimagesize/imagecreatefromgif/imagecreatefrompng),進行檢測檔案是否為影像,需要檔案內容保持相對完整,所以通過追加檔案頭無法通過
- 惡意內容檢測
- 檢測檔案內容中是否包含Webshell等資料
- 常見會被檢測的關鍵字
- eval(,base64_encode(,assert(,Java.lang.runtime
- 使用強混淆的weevely進行嘗試,Kali自帶
- HTTPs://github.com/sunge/Weevely
- 常見會被檢測的關鍵字
- 檢測檔案內容中是否包含Webshell等資料
- 檔案頭檢測
- 內容檢測(同WAF/IDS)
- 寫入檔案系統
- 檔案重命名
- 殺毒軟體查殺
- 訪問檔案
- 無執行權限
- 常見漏洞決議
- IIS/Nginx+PHP fastcgi取值錯誤決議漏洞
- 開啟了cgi.fix_pathinfo,如果開啟后,所執行檔案不存在,會繼續查找上一級檔案是否存在
- 并且未設定security.limit_extensions,該選擇限制可以執行的檔案型別
- abc.jpg/.php
- Nginx 檔案名邏輯漏洞(CVE-2013-4547),版本->0.8.41~1.4.3/1.5.0~1.5.7
- 上傳一個以空格(%20)為結尾的檔案,當訪問" ***.jpg%20%00.php" 會將剛上傳的 "***.jpg "檔案,當作PHP運行
- 并且需要在burp將訪問路徑中將%20%00.PHP,使用ctrl+alf+U轉碼
- Apache 決議漏洞(配置錯誤)
- 如果Apache的conf檔案中有如下配置
- AddHandler application/X-Httpd-.php
- 則***.php.jpg 也會被當作php去執行
- 如果Apache的conf檔案中有如下配置
- 如果在.htaccess中有如下配置,可以將擴展名.XXX當作php執行
- AddType application/x-Httpd-php xxx
- IIS 5.0/6.0 決議漏洞
- 上傳檔案名:abcde.asp;.jpg
- 服務器默認不決議;后面的內容
- 向xxx.asp目錄下面上傳abcde.jpg
- 服務器會將xxx.asp目錄下的檔案都當作asp檔案決議
- 上傳檔案名:abcde.asp;.jpg
- IIS/Nginx+PHP fastcgi取值錯誤決議漏洞
- 瀏覽器查看服務器型別
- F12 ->網路->訊息頭->Service
- 訪問不存在的網頁IIS會暴漏服務資訊
- 常見漏洞決議
- 未知位置
- 無執行權限
- 前端提交
- 繞過的高級技巧
- 重繪圖(應用呼叫圖片庫對上傳的檔案進行了影像轉換,所以即使將圖片與檔案合并,也會將尾部轉換掉,無法使用前面所講的方法進行上傳wedShell)
- 將正常圖片用目標使用的圖形庫進行轉換
- 尋找轉換前后兩次未變的部分
- 將未變的部分替換為欲上傳的webShell
- 將替換后的檔案進行影像轉換,看是否轉換后仍存在替換后部分
- G:\靶場\Bypass-PHP-GD-Process-To-RCE-master\odeinj.php(重繪圖代碼)
- phpinfo與本地包含的利用
- 利用函式
- _PEQUEST["MAX_FILE_SIZE"],_REQUEST["submit"],_POS["MAX_FILE_SIZE"],_POS["submit"],_FILES["upfile"]
- 某站點存在本地檔案包含及PHPINFO,可以利用其執行腳本
- PHP在決議multipart/from-data請求時,會創建臨時檔案,并寫入上傳內容,腳本執行結束后即洗掉
- PHPINfo可以輸出$_FILES資訊
- 通過多種方式爭取時間,在臨時檔案洗掉前進行執行包含
- 通過在資料中加如大量的垃圾資料,使PHPINFO頁面過大,導致PHP輸出浸入流式輸出,并不一次輸出完
- 通過大量請求來延遲PHP腳本的執行速度
- 利用函式
- 在線壓縮利用
- 存在上傳壓縮包利用點,可使用如下方式利用
- 將Webshell打包壓縮至壓縮包中
- 將模板上傳處常用壓縮包上傳后進行自動解壓
- 部分此類檢測壓縮包中內容的,可嘗試建立目錄進行壓縮
- 使用目錄穿越(../)的方法向上一級目錄進行上傳
- 將模板上傳處常用壓縮包上傳后進行自動解壓
- 將Webshell打包壓縮至壓縮包中
- 存在上傳壓縮包利用點,可使用如下方式利用
- 重繪圖(應用呼叫圖片庫對上傳的檔案進行了影像轉換,所以即使將圖片與檔案合并,也會將尾部轉換掉,無法使用前面所講的方法進行上傳wedShell)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/75697.html
標籤:其他
上一篇:STM32
