米安程式碼審計 05 檔案上傳漏洞

青蛙愛輪滑發表於2018-07-24

本文記錄 PHP 程式碼審計的學習過程,教程為暗月 2015 版的 PHP 程式碼審計課程

PHP 程式碼審計部落格目錄

1. 簡介

  1. 危害

    如果不對被上傳的檔案進行限制或者限制被繞過,該功能便有可能會被利用於上傳可執行檔案、指令碼到伺服器上,進而進一步導致伺服器淪陷。

  2. 漏洞成因

    1. 導致檔案上傳的漏洞的原因較多,主要包括以下幾類
    • 伺服器配置不當
    • 開源編輯器上傳漏洞
    • 本地檔案上傳限制被繞過
    • 過濾不嚴或被繞過
    • 檔案解析漏洞導致檔案執行
    • 檔案路徑截斷

2. 漏洞成因

  1. 伺服器配置不當

    當伺服器配置不當時,在不需要上傳頁面的情況下便可導致任意檔案上傳,參見HTTP請求方法(PUT)。

  2. 開源編輯器上傳漏洞

    很多開源的編輯器歷史上都有不同的上傳漏洞,包括但不只限於CKEditor,CKEditor的檔案上傳漏洞參見CKEditor。

  3. 本地檔案上傳限制被繞過

    只在客戶端瀏覽器上做了檔案限制而沒有在遠端的伺服器上做限制,只需要修改資料包就可以輕鬆繞過限制。

  4. 過濾不嚴或被繞過

    1. 有些網站上使用了黑名單過濾掉了一些關鍵的可執行檔案指令碼字尾等,但黑名單不全或者被繞過,導致可執行指令碼檔案被上傳到伺服器上,執行。
    2. 如在伺服器後端過濾掉了字尾為.php的檔案,但並沒有過濾掉.php3等其他可執行檔案指令碼字尾,攻擊者就可以上傳帶有其他的可執行檔案指令碼本字尾的惡意檔案到伺服器上。
    3. 在某些情況下由於管理員錯誤的伺服器配置(將.html字尾的檔案使用php進行解析等)會導致.html、.xml等靜態頁面字尾的檔案也可被執行。
    4. 在上傳檔案儲存磁碟為NTFS格式時可通過::$DATA繞過黑名單限制,參見NTFS中的ADS的一些問題[歡迎一起討論,求思路求方法]。
    5. 有時伺服器只對第一個被上傳的檔案進行了檢查,這時通過同時上傳多個檔案並將惡意檔案摻雜進其中也可繞過伺服器的過濾。
  5. 常用指令碼字尾

     php
     php2
     php3
     php5
     phtml
     asp
     aspx
     ascx
     ashx
     cer
     jsp
     jspx
    

相關文章