[ 首页 ] [ 渗透测试 ] [ 黑客接单 ] [ 黑客技术 ] [ 黑客论坛 ] [ 黑客松 ] [ 繁体中文 ]



标题 : 無限檔案上傳
日期 : 2023-12-20
無限檔案上傳

感謝您造訪 Lvbug.com。我們已將社群遷移到新的網路平台,遺憾的是此頁面的內容需要以程式設計方式從其先前的 wiki 頁面移植。還有一些工作要做。

描述

上傳的文件對應用程式構成重大風險。首先 許多攻擊的步驟是向要攻擊的系統取得一些程式碼。 那麼攻擊只需要找到一種方法來讓程式碼執行即可。使用 文件上傳幫助攻擊者完成第一步。

不受限制的文件上傳的後果可能會有所不同,包括 完整的系統接管、超載的檔案系統或資料庫、 將攻擊轉發到後端系統、客戶端攻擊或簡單的 污損。這取決於應用程式如何處理上傳的內容 文件,尤其是它的儲存位置。

這裡確實存在兩類問題。第一個是與 文件元數據,例如路徑和文件名。一般都會提供這些 透過傳輸,例如 HTTP 多部分編碼。這些數據可能會欺騙 應用程式覆蓋關鍵檔案或將檔案儲存在 位置不好。您必須非常仔細地驗證元數據 在使用它之前。

另一類問題與檔案大小或內容有關。範圍 這裡的問題完全取決於文件​​的用途。請參閱 下面的範例提供了有關文件如何被濫用的一些想法。到 為了防止這種類型的攻擊,您應該分析您的所有內容 應用程式處理文件並仔細考慮哪些處理 以及口譯員的參與。

風險因素

  • 該漏洞影響較大,假設程式碼可 在伺服器上下文或客戶端執行。可能性 對攻擊者的偵測率很高。患病率很常見。作為 因此,此類漏洞的嚴重性很高。
  • 檢查文件上傳模組的存取控制非常重要 正確審查風險。
  • 伺服器端攻擊:Web 伺服器可能會因上傳而受到損害 並執行一個可以運行命令、瀏覽系統的 web-shell 文件、瀏覽本機資源、攻擊其他伺服器或利用 局部漏洞等。
  • 客戶端攻擊:上傳惡意檔案可以使網站 容易受到客戶端攻擊,例如 XSS 或跨網站內容 劫持。
  • 上傳的文件可能會被濫用以利用其他易受攻擊的部分 當需要同一伺服器或受信任伺服器上的檔案時的應用程式 (可能再次導致客戶端或伺服器端攻擊)
  • 上傳的檔案可能會觸發損壞的漏洞 客戶端的庫/應用程式(例如 iPhone MobileSafari LibTIFF 緩衝區溢位)。
  • 上傳的檔案可能會觸發損壞的漏洞 伺服器端的庫/應用程式(例如 ImageMagick 缺陷 那個叫做 ImageTragick!)。
  • 上傳的檔案可能會在破壞即時性的情況下觸發漏洞 監測工具(例如透過解壓縮 RAR 來利用 Symantec 防毒軟體) 文件)
  • 惡意文件,例如 Unix shell 腳本、Windows 病毒、 帶有危險公式的 Excel 檔案或反向 shell 可以 上傳到伺服器以便管理員執行程式碼 或稍後在受害者的機器上的網站管理員。
  • 攻擊者可能能夠將網路釣魚頁面放入網站或 損壞網站。
  • 文件儲存伺服器可能被濫用來託管有問題的文件 包括惡意軟體、非法軟體或成人內容。已上傳 文件也可能包含惡意軟體的命令和控制數據, 暴力和騷擾資訊或隱寫數據 被犯罪組織利用。
  • 上傳的敏感文件可能會被未經授權的人存取。
  • 文件上傳者可能會洩漏伺服器等內部訊息 錯誤訊息中的內部路徑。

例子

應用平台攻擊

  • 將 .jsp 檔案上傳到 Web 樹 – 以 Web 使用者執行 jsp 程式碼
  • 上傳要調整大小的 .gif 檔案 – 利用圖像庫缺陷
  • 上傳大文件-文件空間拒絕服務
  • 使用惡意路徑或名稱上傳文件 – 覆蓋關鍵文件
  • 上傳包含個人資料的檔案 – 其他使用者存取它
  • 上傳包含「標籤」的檔案 – 標籤作為執行的一部分被執行 「包含」在網頁中
  • 上傳 .rar 檔案以供防毒軟體掃描 – 在電腦上執行的命令 運行易受攻擊的防毒軟體的伺服器

對其他系統的攻擊

  • 將 .exe 檔案上傳到網路樹 – 受害者下載木馬 執行檔
  • 上傳受病毒感染的檔案 – 受害者的電腦被感染
  • 上傳包含腳本 – 受害者經歷的 .html 檔案跨站點 腳本(XSS)
  • 上傳包含 Flash 物件的 .jpg 檔案 – 受害者經歷 跨站點內容劫持。
  • 上傳 .rar 檔案以供防毒軟體掃描 – 在電腦上執行的命令 運行易受攻擊的防毒軟體的客戶端

薄弱的保護和繞過方法

拒絕列出檔案副檔名

此保護可能會被繞過:

  • 尋找可以在伺服器端執行的遺失擴充功能或 在客戶端可能是危險的(例如“.php5”、“.pht”、“.phtml”、 「.shtml」、「.asa」、「.cer」、「.asax」、「.swf」或「.xap」)。
  • 在解析文件時尋找 Web 伺服器設定中的缺陷 具有雙擴展名,或透過提供敏感的 分隔符號(例如“/”或“;”)後的擴展名字元(例如 當“file.jpg”檔案包含 PHP 程式碼時,“/file.jpg/index.php” 已上傳)
    • 在 Apache 中,可以使用 double 來執行 php 文件 擴充技術,例如“file.php.jpg”(當“.jpg”為 允許。
    • 在IIS6(或先前的版本)中,腳本檔案可以透過以下方式執行 使用以下兩種方法之一:
      • 透過在禁止後添加分號字符 延期並在允許的延期之前(例如 “檔案.asp;.jpg”)
      • 透過將腳本檔案的副檔名(例如“.asp”)重新命名為 其名稱所在的資料夾中允許的副檔名(例如“.txt”) 以腳本的副檔名結尾(例如 “資料夾.asp\file.txt”)。在 Windows 中,可以 使用檔案上傳器和 ADS 建立目錄 (備用資料流)。在此方法中,檔案名稱 以“::$Index_Allocation”結尾或 “:$I30:$Index_Allocation” 讓檔案上傳器建立 目錄而不是檔案(例如 “folder.asp::$Index_Allocation”建立“folder.asp”作為 目錄)。
  • 將多個字母更改為大寫形式以繞過大小寫 敏感規則(例如“file.aSp”或“file.PHp3”)。
  • 使用Windows 8.3功能,可以取代現有的 文件使用其短名稱(例如“web.config”可以替換為 “web~1.con”或“.htaccess”可以替換為“HTACCE~1”)
  • 尋找轉換為其他有用字符的字符 在文件上傳過程中。例如,當執行 PHP 時 IIS,分別是「>」、「<」和雙引號「字符 轉換為“?”、“*”和“.”可用於替換的字符 現有文件(例如“web<<”可以替換“web.config”文件)。 為了在檔案名稱中包含雙引號字符 正常的文件上傳請求,文件名在 「Content-Disposition」標題應使用單引號(例如 filename=’web”config’ 替換“web.config”檔案)。
  • 尋找檔案名稱後的中性字符,例如尾隨空格 Windows 檔案系統中的點和點或 a 中的點和斜線字符 Linux 檔案系統。文件名末尾的這些字元將是 自動刪除(例如「file.asp … … . . .. ..」、「file.asp ”,或“file.asp”)。儘管斜線或反斜線字元也是 通常有問題的字符,在正常情況下可以忽略它們 文件上傳請求,這些字元之前的任何內容都可以算作 伺服器端的目錄名稱;也就是說,他們應該是 嘗試進行徹底的測試(例如“test.php/”或“test.php.\”)。
  • 尋找擴展檢測技術中的缺陷。網路伺服器可以 在提供的第一個點(“.”)之後使用第一個擴展名 檔案名或使用有缺陷的演算法來偵測副檔名 沒有或有多個點字元(例如“file.txt.jpg.php”)。
  • 在 a 之後使用控製字符,例如空字符 (0x00) 禁止的擴展和允許的擴展可能會導致繞過。 在此方法中,Null 字元之後的所有字串都將被 保存文件時被丟棄。 URL 編碼和解碼 應在文件上傳中嘗試空字符的版本 要求進行徹底的測試。
  • 在 Windows 中使用 NTFS 備用資料流 (ADS)。在這種情況下,一個 冒號字元“:”將插入到禁止的副檔名之後,並且 在允許的之前。結果,一個空文件 將在伺服器上建立禁止的擴展名(例如 “檔案.asax:.jpg”)。稍後可能會使用其他編輯此文件 技術,例如使用其短檔名。 “::$data”模式 也可用於建立非空文件。因此,添加一個點 此模式後的字元也可能有助於進一步繞過 限制(例如“file.asp::$data。”)
  • 替代危險時保護機制有缺陷 擴展。例如,「file.p.phphp」可能會變更為 在完成此功能後,「file.php」。
  • 上傳檔案使用中的缺陷,例如 PHP 應用程式 使用“include”功能顯示上傳的圖像。
  • 上述技術的組合。

擊敗 getimagesize()

getimagesize() 函數將檢查它是否是圖像並將檢查 “mime”來驗證影像類型。

不安全的配置:

 <FilesMatch ".+\.ph(p([3457s]|\-s)?|t|tml)">  SetHandler application/x-httpd-php  </文件匹配>

安全配置:

 <FilesMatch ".+\.ph(p([3457s]|\-s)?|t|tml)$">  SetHandler application/x-httpd-php  </文件匹配>

如果服務在不安全配置下運行,則任何一個 可以透過在 GIF 檔案中寫入註解來擊敗 getimagesize 函數。

為此,最終用戶需要在 Kali/Ubuntu 作業系統中安裝名為 ‘gifsicle’

 For Kali Linux : apt-get install gifsicle  For Ubuntu : sudo apt-get install gifsicle

安裝後,以下命令將有助於在 gif 中編寫命令 文件。

 gifsicle < mygif.gif -- comment "

”>輸出.php.gif

上面的命令將創建一個名為“output.php.gif”的文件,只需在文件上傳檢查時上傳該文件 脆弱性。

允許列出檔案副檔名

使用允許列表方法檢查檔案副檔名的應用程式 還需要驗證完整的檔案名稱以防止任何繞過。

  • 應盡可能審查允許的擴展列表 還包含惡意擴充。例如,如果 清單中包含“.shtml”,應用程式可能容易受到攻擊 SSI 攻擊。
  • 一些拒絕列表方法的繞過技術,例如 使用雙擴展也適用於這裡並且​​應該是 檢查過。

“內容類型”標頭驗證

請求標頭中的“Content-Type”實體表示 訊息內容的網路媒體類型。有時是網頁應用程式 使用此參數可以將檔案識別為有效檔案。為了 例如,他們只接受“Content-Type”為 “文字/純文字”。

  • 透過更改此參數可以繞過此保護 使用 Web 代理程式在請求標頭中。

使用文件類型檢測器

有時 Web 應用程式有意或無意地使用了一些 檢查檔案類型以便處理它們的函數(或 API) 更遠。例如,當應用程式調整圖像檔案的大小時,它可能會 僅在上傳非圖像檔案時顯示錯誤訊息 將它們保存在伺服器上。

  • 如果它讀取了幾個第一個字元(或標題),那麼它可以是 透過在某些有效標頭後插入惡意程式碼來繞過或 在文件的元資料中。
  • 在註釋部分或沒有的部分插入程式碼 對主文件的影響也可能導致繞過。
  • 如果應用程式可以對插入的資料進行混淆或編碼 使用特定模式或簽章偵測惡意程式碼。
  • 上傳的檔案可以被精心設計以建立惡意程式碼,以防出現以下情況 被應用程式壓縮。

其他有趣的測試案例

  • 當已有另一個同名檔案時上傳文件 存在。這可能會顯示有趣的錯誤訊息,可能導致 資訊披露。如果以下情況可能會發現邏輯缺陷 應用程式重新命名新檔案以將其保留在伺服器上。
  • 當另一個資料夾已存在同名時上傳文件 存在。這可能會顯示有趣的錯誤訊息,可能導致 資訊披露。
  • 上傳名稱很長的檔案。這可能會顯示有趣的錯誤 可能導致資訊外洩的訊息。
  • 同時多次上傳一個檔案。這可能會顯示 有趣的錯誤訊息可能會導致資訊外洩。
  • 上傳不同格式的有效和無效文件,例如 壓縮或 XML 檔案來偵測任何可能的處理 伺服器端。
  • 上傳名稱為「.」、「..」或「…」的檔案。例如, 在 Windows 中的 Apache 中,如果應用程式將上傳的檔案保存在 “/www/uploads/”目錄,“.” filename 將會建立一個文件 在“/www/”目錄中稱為“uploads”。
  • 上傳可能不易刪除的文件,例如“…:.jpg” NTFS 產生“…”檔案(可以使用以下命令刪除該文件 命令列)。這可能會顯示有趣的錯誤訊息 導致資訊外洩。
  • 在 Windows 中上傳包含無效字元的文件,例如 |<>*?”以它的名義。這可能會顯示有趣的錯誤訊息 可能導致資訊外洩。
  • 在 Windows 中使用保留(禁止)名稱上傳文件,例如 CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、 COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9。這 可能會顯示有趣的錯誤訊息,這些訊息可能會導致訊息 披露。上傳具有保留名稱的檔案可能會導致拒絕 如果應用程式保留名稱並嘗試儲存它,則服務 具有另一個擴展名(將其錯誤地檢測為現有文件)。
  • 跨站點內容劫持問題可以透過上傳 檔案具有允許的名稱和副檔名,但包含 Flash、PDF 或 Silverlight 內容。
  • 上傳“crossdomain.xml”或“c​​lientaccesspolicy.xml”檔案可以 使網站容易受到跨站點內容劫持。這些 文件應上傳到網站的根目錄才能運作。 但是,「crossdomain.xml」檔案可以位於子目錄中,只要 因為它在根“crossdomain.xml”檔案中是允許的。

測試文件上傳器的重要注意事項

  • 測試期間不要嘗試替換現有文件,除非是 可以安全地繼續。例如,替換配置文件,例如 “web.config”或“.htaccess”檔案可能導致拒絕服務 對整個網站的攻擊。

預防方法(更安全的解決方案)

為了讓Windows伺服器更加安全,非常重要 首先遵循 Microsoft 安全最佳實務。以此目的, 一些有用的連結是:

以及對開發者和網站管理員的一些特別建議:

  • 允許上傳的文件類型應僅限於 那些對於業務功能是必要的。
  • 切勿在沒有後綴的情況下直接接受檔案名稱及其副檔名 允許列表過濾器。
  • 應用程式應對任何內容執行過濾和內容檢查 上傳到伺服器的檔案。文件要齊全 在提供給其他用戶之前進行掃描和驗證。如果 如有疑問,應丟棄該文件。
  • 有必要有一個僅允許的擴展列表 Web應用程式。並且,可以從清單中選擇檔案副檔名。 例如,它可以是“select case”語法(如果有 VBScript)選擇實際檔案的檔案副檔名 擴大。
  • 所有控製字元和 Unicode 字元都應從 檔案名稱及其副檔名,無例外。另外, 特殊字符,如「;」、「:」、「>」、「<」、「/」、「\」、 額外的「.」、「*」、「%」、「$」等應被丟棄 出色地。如果適用且不需要Unicode 字符,強烈建議僅接受字母數字 字元和只有 1 個點作為檔案名稱和 擴大;其中檔案名稱和副檔名不應該 完全為空(正規表示式: ^\[a-zA-Z0-9\]{1,200}\\.\[a-zA-Z0-9\]{1,10}$)。
  • 限製檔名長度。例如,最大長度 檔案名稱加上副檔名不得超過 255 個字符 (沒有任何目錄)位於 NTFS 分割區中。
  • 建議使用演算法來確定檔名。 例如,檔案名稱可以是檔案名稱加上的雜湊值 當天的日期。
  • 上傳的目錄不應該有任何「執行」權限,並且所有 應從這些目錄中刪除腳本處理程序。
  • 將檔案大小限制為最大值以防止拒絕 服務攻擊(針對檔案空間或其他 Web 應用程式的功能) 例如圖像縮放器)。
  • 限制小文件,因為它們可能導致拒絕服務 攻擊。因此,應考慮文件的最小大小。
  • 使用跨站點請求偽造保護方法。
  • 防止在具有相同哈希值的情況下覆蓋文件 兩個都。
  • 在伺服器上使用病毒掃描程式(如果適用)。或者,如果 文件內容不保密,免費的病毒掃描網站 可以使用。在這種情況下,文件應該以隨機名稱存儲 首先在伺服器上沒有任何擴展,然後在病毒之後 檢查(上傳到免費病毒掃描程式網站並返回 結果),可以將其重新命名為其特定名稱和擴展名。
  • 嘗試使用 POST 方法而不是 PUT(或 GET!)
  • 記錄用戶的活動。然而,日誌記錄機制應該是 確保防止日誌偽造和程式碼注入本身。
  • 如果有壓縮檔案提取功能,則壓縮檔案的內容 壓縮檔案應作為新檔案一一檢查。
  • 如果可能的話,請考慮將文件保存在資料庫中,而不是 比在檔案系統上。
  • 如果檔案應該保存在檔案系統中,請考慮使用隔離的 具有不同網域的伺服器來提供上傳的檔案。
  • 文件上傳者應該只有經過身份驗證的人才可以訪問 授權使用者(如果可能)。
  • 應從以下文件和資料夾中刪除寫入權限 上傳資料夾。上傳資料夾不應提供任何服務
  • 確保“.htaccess”或“web.config”等設定文件 無法使用文件上傳器進行替換。確保適當 設定可忽略“.htaccess”或“web.config” 文件(如果上傳到上傳目錄中)。
  • 確保檔案具有雙副檔名(例如“file.php.txt”) 特別是在 Apache 中無法執行。
  • 確保上傳的文件無法被未經授權的使用者存取。
  • 新增「內容處置:附件」和 靜態回應的「X-Content-Type-Options: nosniff」標頭 文件將保護網站免受基於 Flash 或 PDF 的跨網站攻擊 內容劫持攻擊。建議這種做法 對用戶需要下載的所有檔案執行 處理文件下載的模組。雖然這個方法 無法完全保護網站免受使用 Silverlight 的攻擊 或類似的對象,它可以降低使用 Adob​​e Flash 的風險 和 PDF 對象,特別是當允許上傳 PDF 文件時。
  • Flash/PDF (crossdomain.xml) 或 Silverlight (clientaccesspolicy.xml) 如果不使用跨域策略文件,則應將其刪除 且對 Flash 或 Silverlight 沒有業務需求 與網站通訊的應用程式。
  • 應禁用 crossdomain.xml 的瀏覽器緩存,並且 clientaccesspolicy.xml 檔。這使得網站能夠輕鬆地 如有必要,更新文件或限制對 Web 服務的存取。 一旦客戶端存取策略文件被檢查,它仍然有效 對於瀏覽器會話來說,非快取對最終使用者的影響 是最小的。這可以作為低風險或資訊風險問題提出 基於目標網站的內容和安全性以及 策略文件的複雜性。
  • 應審查 CORS 標頭,使其僅針對靜態或 可公開存取的資料。否則, 「Access-Control-Allow-Origin」標頭應僅包含授權的 地址。其他 CORS 標頭,例如 「Access-Control-Allow-Credentials」僅應在下列情況下使用: 必需的。 CORS 標頭中的項目,例如 “存取控制允許方法”或“存取控制允許標頭” 如果不需要,應進行審查和刪除。

參考