1. 程式人生 > >檔案上傳 04 服務端檢測繞過(副檔名檢測)

檔案上傳 04 服務端檢測繞過(副檔名檢測)

本文記錄檔案上傳學習過程,教程為 《Upload Attack Framework V1.0》

檔案上傳檢測

  1. 客戶端javascript 檢測(通常為檢測副檔名)
  2. 服務端MIME 型別檢測(檢測Content-Type 內容)
  3. 服務端目錄路徑檢測(檢測跟path 引數相關的內容)、
  4. 服務端副檔名檢測(檢測跟檔案extension 相關的內容)
  5. 服務端檔案內容檢測(檢測內容是否合法或含有惡意程式碼)

服務端檢測繞過(副檔名檢測)

  1. 簡介

    通常是針對檔案的副檔名字尾進行檢測

    檢測內容:

    對於副檔名檢測不強的,時常還可以結合目錄路徑攻擊

    比如filename=”test.asp/evil.jpg” 之類

  2. 繞過黑名單檢測

    例如 fckeditor 2.4.3 或之前版本的黑名單

    1. 檔名大小寫繞過

      用像 AsP,pHp 之類的檔名繞過黑名單檢測

    2. 名單列表繞過

      用黑名單裡沒有的名單進行攻擊,比如黑名單裡沒有 asa 或 cer 之類

    3. 特殊檔名繞過

      比如傳送的 http 包裡把檔名改成 test.asp. 或 test.asp_(下劃線為空格),這種命名方式在 windows 系統裡是不被允許的,所以需要在burp 之類裡進行修改,然後繞過驗證後,會被 windows 系統自動去掉後面的點和空格,但要注意 Unix/Linux 系統沒有這個特性。

    4. 0x00 截斷繞過

      在副檔名檢測這一塊目前我只遇到過 asp 的程式有這種漏洞,給個簡單的虛擬碼

      name = getname(http request) //假如這時候獲取到的檔名是test.asp .jpg(asp 後面為0x00)
      
      type = gettype(name) //而在gettype()函式裡處理方式是從後往前掃描副檔名,所以判斷為jpg
      
      if (type == jpg)
      
          SaveFileToPath(UploadPath.name, name) //但在這裡卻是以0x00 作為檔名截斷
      //最後以test.asp 存入路徑裡
      
    5. .htaccess 檔案攻擊

      配合名單列表繞過,上傳一個自定義的.htaccess,就可以輕鬆繞過各種檢測

    6. 解析呼叫/漏洞繞過

      這類漏洞直接配合上傳一個程式碼注入過的非黑名單檔案即可,再利用解析呼叫/漏洞

  3. 繞過白名單檢測

    1. 0x00 截斷繞過

    用像test.asp%00.jpg 的方式進行截斷,屬於白名單檔案,再利用服務端程式碼的檢測邏輯
    漏洞進行攻擊,目前我只遇到過asp 的程式有這種漏洞

    1. 解析呼叫/漏洞繞過

    這類漏洞直接配合上傳一個程式碼注入過的白名單檔案即可,再利用解析呼叫/漏洞

  4. 詳解.htaccess檔案攻擊

    1. 簡介

      無論是黑名單還是白名單

      再直接點就是直接攻擊.htaccess 檔案

      (其實目前我只見過結合黑名單攻擊的,在後面的攻擊分類裡,我會把它歸到黑名單繞過攻擊裡。但網上是把這個單獨分類出來的,可能別人有一些我不知道的方式和技巧吧,所以在這裡我也暫時保留這個單獨分類)

      在PHP manual 中提到了下面一段話

      move_uploaded_file section, there is a warning which states
      ‘If the destination file already exists, it will be overwritten.’
      如果PHP 安全沒配置好
      就可以通過move_uploaded_file 函式把自己寫的.htaccess 檔案覆蓋掉伺服器上的
      這樣就能任意定義解析名單了
      
    2. 測試:

      通過一個.htaccess 檔案呼叫php 的解析器去解析一個檔名中只要包含”haha”這個字串的任意檔案,所以無論檔名是什麼樣子,只要包含”haha”這個字串,都可以被以php 的方式來解析,是不是相當邪惡,一個自定義的.htaccess 檔案就可以以各種各樣的方式去繞過很多上傳驗證機制

      建一個 .htaccess 檔案,裡面的內容如下

      <FilesMatch "haha">
      SetHandler application/x-httpd-php
      </FilesMatch>
      

      同目錄有個我們上傳一個只有檔名幷包含字串”haha”,但是卻無任何副檔名的檔案裡面的內容是php 一句話木馬

      然後我們用中國菜刀去連線測試

      結果如我們預期的一樣:)

      所以一個可以由 hacker 掌控的 .htaccess 檔案是非常邪惡的

      基本上可以秒殺各種市面上的上傳驗證檢測 (內容檢測除外)

      從實際環境來說,我個人接觸過的,一般是配合黑名單攻擊

      比如黑名單裡有漏網之魚,不夠完整,漏掉了 .htaccess 副檔名