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

製作網站難免會做到關於檔案上傳的功能，如果為了安全考量可能會限制其特定副檔名才能上傳，以免使用者上傳了不該上傳的檔案類型（例如 \*.exe 執行檔），不過光是檢查檔案結尾的副檔名真的就安全了嗎？那可不一定！如果你現在還在使用 IIS6 的話，那你可能要小心了，因為最近[知名3C連鎖賣場燦坤傳出資料外洩的案件](http://www.informationsecurity.com.tw/article/article_detail.aspx?tv=11&aid=5790)就是因為這個弱點所致。

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

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

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

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

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

   ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5c43ad495df47016afed-SNAGHTML1ba9af0.png)

3\. 最後我們將 **test.asp** 改名為 **test.asp;.jpg（注意：我們在檔案最後面加上 ;.jpg 而已）**

   ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5a989387aed034f201fd-SNAGHTML1b9680e.png)

\---

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

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1c911941e13657c2f349-image.png)

**備註：**如果 PHP 是透過 [FastCGI](http://www.iis.net/download/FastCGI "http://www.iis.net/download/FastCGI") 來執行則不會受此弱點攻擊，建議在 IIS 上安裝 PHP 可以透過 [Web Platform Installer](http://www.microsoft.com/web/downloads/platform.aspx) 來安裝，以確保完整性與安全性。

**注意：**此問題微軟不認為是個緊急或重大的風險，只有在「非預設」且「不安全」的設定下才會導致此弱點發生被攻擊的機會，因此並無任何修補計畫，各位請自求多福。 \[ [資訊來源](https://web.archive.org/web/20110318070841/http://searchsecurity.techtarget.com:80/news/article/0,289142,sid14_gci1377741,00.html) \] 不過你還是可以透過 [KB979124: 如何設定 IIS Web 應用程式的上載](https://web.archive.org/web/20150204142510/http://support.microsoft.com/kb/979124) 的說明保護你的上傳目錄不被執行程式。

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

-   [IIS 6.0 Security Best Practices](http://technet.microsoft.com/en-us/library/cc782762\(WS.10\).aspx)  /  [IIS 6.0 安全性的最佳作法](http://technet.microsoft.com/zh-tw/library/cc782762\(WS.10\).aspx)
-    [Securing Sites with Web Site Permissions](http://technet.microsoft.com/en-us/library/cc756133\(WS.10\).aspx)  /  [以網站使用權限來保護網站安全](http://technet.microsoft.com/zh-tw/library/cc756133\(WS.10\).aspx)
-   [IIS 6.0 Operations Guide](http://technet.microsoft.com/en-us/library/cc785089\(WS.10\).aspx)  /  [IIS 6.0 操作手冊](http://technet.microsoft.com/zh-tw/library/cc785089\(WS.10\).aspx)
-   [Improving Web Application Security: Threats and Countermeasures](http://msdn.microsoft.com/en-us/library/ms994921.aspx)

**相關連結**

-   [燦坤資料外洩: IIS6漏洞加FCKeditor惹禍](http://www.informationsecurity.com.tw/article/article_detail.aspx?tv=11&aid=5790)
-   [Microsoft IIS File Parsing Extension Vulnerability](http://isc.sans.edu/diary.html?storyid=7810)
-   [Microsoft IIS 0Day Vulnerability in Parsing Files (semi-colon bug)](http://www.securityfocus.com/archive/1/508604)
-   [Nazim's IIS Security Blog](https://blogs.iis.net/nazim)
-   [Fixing IIS 6 issue with semi-colon](https://blogs.iis.net/nazim/fixing-iis-6-issue-with-semi-colon/)
