The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

檢查上傳檔案副檔名真的有效嗎?分析 IIS6 副檔名解析弱點!!

製作網站難免會做到關於檔案上傳的功能,如果為了安全考量可能會限制其特定副檔名才能上傳,以免使用者上傳了不該上傳的檔案類型(例如 *.exe 執行檔),不過光是檢查檔案結尾的副檔名真的就安全了嗎?那可不一定!如果你現在還在使用 IIS6 的話,那你可能要小心了,因為最近知名3C連鎖賣場燦坤傳出資料外洩的案件就是因為這個弱點所致。

要重現這個弱點非常容易,只要有 IIS6 + ASP + Notepad 就可以證明這個弱點,如下三個步驟。

1. 開啟 Notepad 並建立一個名為 test.asp 的檔案 ( 這是 ASP 程式 ),其內容輸入以下一行即可:

<%= Request.ServerVariables ("REMOTE_ADDR") %>

  這個程式只是為了證明 ASP 程式都能夠正常在 IIS6 上執行。

2. 接著在用瀏覽器瀏覽這支程式,你會發現程式回應的是使用者的來源 IP,也代表程式正常執行

  

3. 最後我們將 test.asp 改名為 test.asp;.jpg(注意:我們在檔案最後面加上 ;.jpg 而已)

  

---

你有沒有發現,如果你的 ASP 程式在驗證上傳檔案的副檔名只有驗證最後面的 “.jpg” 那就糟糕啦!因為駭客就會利用這個漏洞上傳含有 ASP 的惡意程式到你的網站裡,如果你的 IIS6 網站/目錄權限沒有設定好,就會導致上傳的程式從遠端執行,那麼後果便不堪設想!

你認為只有 ASP 受害嗎?除了 ASP.NET 以外,任何其他類型的 ISAPI 或 CGI 程式若沒有特殊防護將也會受到這個弱點所害,如下圖為顯示 PHP 程式被修改副檔名後還能執行的畫面:

備註:如果 PHP 是透過 FastCGI 來執行則不會受此弱點攻擊,建議在 IIS 上安裝 PHP 可以透過 Web Platform Installer 來安裝,以確保完整性與安全性。

注意:此問題微軟不認為是個緊急或重大的風險,只有在「非預設」且「不安全」的設定下才會導致此弱點發生被攻擊的機會,因此並無任何修補計畫,各位請自求多福。 [ 資訊來源 ] 不過你還是可以透過 KB979124: 如何設定 IIS Web 應用程式的上載 的說明保護你的上傳目錄不被執行程式。

為了讓你的 IIS6 更加安全,建議閱讀以下文章:

相關連結