<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **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 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看