一、 什麼是IIS
#Internet Information Services(IIS,以前稱為Internet Information Server)網路資訊服務是Microsoft本公司提供的可擴充Web伺服器,支援HTTP,HTTP/2,HTTPS,FTP,FTPS,SMTP和NNTP等。起初用於Windows NT系列,隨後內建在Windows 2000、Windows XP Professional、Windows Server 2003和後續版本一起發行,但在Windows XP Home版本上並沒有IIS。 IIS目前只適用於Windows系統,不適用於其他作業系統。
根據Netcraft在2017年2月的資料顯示,IIS在「百萬最繁忙網站」的市佔率為10.19%,成為全球第三大網路伺服器 ,落後於Apache 41.41%和Nginx 28.34%。目前流行的Windows版本都預設安裝IIS服務 ,但同時 IIS的安全性一直被業界詬病,一旦IIS出現高風險漏洞威脅將會非常嚴重。
推薦(免費):iis
在接觸IIS漏洞之前我們先來了解下不同Windows系統下預設內建的IIS版本,以便更好的理解與區分IIS漏洞的影響範圍:
圖1 各Windows版本預設IIS版本
二、 IIS漏洞大全
千里目實驗室蒐集了下近十五載的IIS相關漏洞,中、高風險漏洞共39個,其中15年爆發的(MS15-034)HTTP.sys 遠端執行程式碼漏洞和16年的(MS16-016)WebDAV 特權提升漏洞影響範圍尤其廣泛。
圖2 近15年IIS漏洞大全
看了上面IIS 近十幾年的漏洞後,你或許會問,怎麼沒看到本文的主角「IIS短文件漏洞」呢? !在了解IIS漏洞大家庭之前,我們先透過IIS短檔來了解下Windows下IIS的一些特性。
三、 IIS短檔
1. IIS短檔漏洞的由來
Microsoft IIS 短檔/資料夾名稱資訊外洩最開始由Vulnerability Research Team(漏洞研究團隊)的Soroush Dalili在2010年8月1日發現,並於2010年8月3日通知供應商(微軟公司)。微軟公司分別於2010年12月1日及2011年1月4日給予答覆下個版本修復。 2012年6月29日,此漏洞公開揭露(中危)。
此漏洞實際上是由HTTP請求中舊DOS 8.3名稱約定(SFN)的代字符(〜)波浪號引起的。它允許遠端攻擊者在Web根目錄下公開檔案和資料夾名稱(不應該可被存取)。攻擊者可以找到通常無法從外部直接存取的重要文件,並獲取有關應用程式基礎結構的資訊。
Microsoft IIS 波浪號造成的資訊外洩是世界網路範圍內最常見的中度風險漏洞。這個問題至少從1990年開始就已經存在,但是已經證明難以發現,難以解決或容易被完全忽略。
2.1受影響的版本:
IIS 1.0,Windows NT 3.51
IIS 3.0,Windows NT 4.0 Service Pack 2
IIS 4.0,Windows NT 4.0選項包
IIS 5.0,Windows 2000
IIS 5.1,和Windows Profess XPional XPion Edition
IIS 6.0,Windows Server 2003與Windows XP Professional x64 Edition
IIS 7.0,Windows Server 2008與Windows Vista
IIS 7.5,Windows 7(遠端啟用或沒有web.config) IIS 7.5,Windows 2008(經典管道模式)
注意:IIS使用.Net Framework 4時不受影響
(以上資料來源: https://www.securityfocus.com/archive/1/523424)
經驗證,以上受影響範圍主要是針對HTTP GET方法,且需要同時安裝ASP.NET應用程式。此漏洞發現者在2014年再次揭露:在測試IIS 7.5(Windows 2008 R2)和IIS 8.0(Windows 2012)過程中,當使用OPTIONS來取代GET 方法時,如果請求中的短檔案名稱是存在的,IIS就會回傳一個不一樣的錯誤訊息。利用這種特點,攻擊者就可以在最新的IIS版本中,實現基於短檔名的檔案或目錄掃描了。
目前IIS支援短檔名猜測的HTTP方法主要包括:DEBUG、OPTIONS、GET、POST、HEAD、TRACE六種,經千里目實驗室驗證,IIS 8.0、IIS 8.5和IIS 10.0的短檔案名稱都可以透過OPTIONS和TRACE方法被猜測成功。所以上述受影響版本要再加上以下版本:
IIS 8.0,Windows 8, Windows Server 2012
IIS 8.5,Windows 8.1,Windows Server 2012 R2
IIS 10.0,Windows 10, Windows Server 2016
可以看到,IIS全部版本都有短檔名洩漏的問題,微軟似乎忽略了這個問題。從微軟回覆該漏洞發現者的訊息可以看出,IIS短文件漏洞未達到安全更新標準,且需要確定何時在下一個邏輯版本中解決它。
2.2漏洞危害:
2.2.1 利用「~」字元猜解暴露短檔案/資料夾名稱(主要危害)
Windows支援以8.3 格式產生與MS-DOS 相容的(短)檔名,以允許基於MS-DOS 或16 位元Windows的程式存取這些檔案。在cmd下進入IIS網站根目錄C:\inetpub\wwwroot輸入「dir /x」即可看到短檔名的效果:
圖3 IIS短文件名
如上圖是Windows 10內建的IIS 10.0預設網站根目錄,iisstart.htm和iisstart.png是網站預設文件,文件名前綴字元長度都沒有達到9位,所以沒有短文件名。 IIS10test.html是人為添加的網站文件,文件名前綴字元長度達到了9位,對應的短文件名為IIS10T~1.HTM。根據此特性,我們能夠透過存取短文件名間接存取它對應的文件。
由於短檔案名稱的長度固定(xxxxxx~xxxx),因此攻擊者可直接對短檔案名稱進行暴力破解 ,從而存取對應的檔案。
舉個例子,有一個資料庫備份檔 backup_20180101.sql ,它對應的短檔名是 backup~1.sql 。因此攻擊者只要暴力破解出backup~1.sql即可下載該文件,而無需破解完整的文件名稱。
IIS短檔名有以下幾個特徵:
#1.只有前六位字元直接顯示,後續字元用~1指涉。其中數字1還可以遞增,如果存在多個檔案名稱類似的檔案(名稱前6位必須相同,且後綴名前3位必須相同);
2.後綴名最長只有3位,多餘的截斷,超過3位的長檔會產生短檔名;
3.所有小寫字母都轉換成大寫字母;
4.長檔名含有多個「. ”,以文件名最後一個“.”作為短文件名後綴;
5.長文件名前綴/文件夾名字符長度符合0-9和Aa-Zz範圍且需要大於等於9位才會產生短檔名,如果包含空格或其他部分特殊字符,無論長度都會產生短檔;
我們可以在啟用.net的IIS下使用GET方法暴力列舉短檔名,原因是攻擊者使用通配符「*」和「?」發送一個請求到IIS,當IIS接收到一個檔案路徑中包含「~」請求時,它的反應是不同的,即傳回的HTTP狀態碼和錯誤訊息不同。基於這個特點,可以根據HTTP的回應區分一個可用或不可用的檔案。如下圖所示不同IIS版本回傳資訊的不同:
圖4 IIS 5.0 ~ IIS 7.X短檔猜解HTTP回應資訊
#上圖是由此漏洞發現者Soroush Dalili在其研究報告中給出的IIS短文件合法和不合法猜解響應信息的圖解:
訪問構造的某個存在的短文件名,會返回404;
存取建構的某個不存在的短檔名,會回傳400;
圖5 利用IIS 狀態碼猜解過程
以上方法是在IIS較低版本ASP.NET環境下使用GET方法反覆循環猜測,直到猜解出短檔名。
但是千里目實驗室在真實環境驗證發現,在IIS高版本(如:IIS 8.0/IIS 8.5/IIS 10.0),即使沒有安裝asp.net,透過OPTIONS和TRACE方法也可以猜解成功。這兩種方法猜解傳回的HTTP狀態碼類型和上述截圖有些許出入,但不失為另一種利用方式。
2.2.2 .Net Framework的拒絕服務攻擊(副危害)
根據Soroush Dalili在研究表明,攻擊者如果在文件夾名稱中向發送一個不合法的.Net文件請求,.NeFramework將遞歸搜尋所有的根目錄,消耗網站資源進而導致DOS問題。微軟認為此危害是可恢復的DOS,將在後續SP版本修改,此處不做探討研究。
3.1 IIS短檔案漏洞重複使用
#3.1 IIS簡短檔案漏洞重複使用
3.1.1 漏洞環境建立
基於Win 10安裝預設IIS 10.0 (未安裝APS.NET)
IIS短檔漏洞掃描Java程式(需要設定Java環境變數)
3.1.2 漏洞環境調試準備######IIS 安裝成功以後,會預設在C碟目錄下產生intpub目錄,網站的根目錄位於C:\inetpub\ wwwroot,此時查看下根目錄是否有短檔名:###由上圖可知,預設IIS 10.0 網站根目錄不存在短文件名,只有預設的htm和png文件,且名稱長度未達到產生短文件的要求。以下使用IIS短文件掃描程式偵測下有無短檔資訊外洩漏洞:
#3.1.3 漏洞環境複現
#手動建立網站長文件名「IIS10test.html」 ,自動產生對應短檔名「IIS10T~1.HTM」
使用IIS短檔掃描程式再次掃描,掃描發現有短檔漏洞,且透過HTTP OPTIONS方法成功猜解出短檔案名稱:IIS10T.HTM
修改漏洞掃描程序,注視掉OPTIONS方法,嘗試是否還有其他HTTP方法可以猜解成功。
驗證發現,除了OPTIONS方法外,HTTP TRACE方法也能成功猜解出短檔案名稱。
3.1.4 IIS漏洞OPTIONS、TRACE方法猜解分析
OPTIONS方法猜解分析
由於上述OPTIONS方法請求了196次才猜測出短檔名,猜測成功回傳404,猜測失敗回傳的是200,失敗的組合比較多,所以下面主要分析下404猜測成功的請求如何透過OPTIONS方法取得短檔名IIS10T.HTM的。如下圖:
TRACE方法猜解分析
透過TRACE方法猜解的過程基本上同上,只不過此HTTP方法猜解失敗回傳的狀態碼不是200,而是501(未執行)。
3.##2 IIS短檔案漏洞利用
1. 深入爆破猜測檔案全名透過IIS短檔案漏洞猜測出來的短檔案名稱,需要繼續猜測全名才可以在IIS上進行訪問,即IIS由於安全原因不支援短檔案名稱存取。以下是Soroush Dalili給出的幾個猜測檔案全名的方法:1) 透過對目標網站或同類型網站進行爬蟲,爬出建立一個字典庫,再與得到的短檔名來猜剩下的字元;2) 利用fuzzdb(一個應用程式模糊測試(fuzzing)資料庫)來猜解;3) 結合OWASP的dirbuster(一款路徑及網頁暴力破解的工具)。 Github上有研究人員已經用python將上述方法實現,並且獲取到了網站後台的用戶名和密碼,很好的利用了IIS短文件漏洞。 附註: 研究報告網址:https://webbreacher.com/2014/10/23/tilde-enumeration/ (建議)python程式下載:https://github.com /WebBreacher/tilde_enum (推薦)2. 結合支援短文件特性軟體(Apache、Wordpress)Acunetix研究指出當Apache運行在windows下,如果創建了一個長文件,那麼不需要猜解長文件,直接用短文件就可以下載了。例如一個backup_20180101.sql的長文件,其短文件是BACKUP~1.SQL,攻擊者只需要提交BACKUP~1.SQL就可以直接存取並下載該文件。 此外,有學者表明,其在安裝Wordpress備份外掛程式之後,透過短檔案名稱成功地存取到了WordPress部落格的備份檔案。 3. 繞過Basic and Windows認證Soroush Dalilide研究中也提到,在某些IIS伺服器設定下,可以繞過Basic and Windows認證,猜解出認證目錄下的文件。舉例,如果需要存取一個開啟認證的目錄下檔案時,例如這個目錄是“AuthNeeded”,那麼可以透過以下方式存取:/AuthNeeded::$Index_Allocation/*~1*/.aspx 或/AuthNeeded:$I30:$Index_Allocation/*~1*/.aspx4.4) 如果資料夾名前6位字元帶點“.”,掃描程式會認為是檔案而不是資料夾,最終出現誤報;
5) 不支援中文檔案名,包括中文檔案和中文資料夾。一個中文相當於兩個英文字符,故超過4個中文字會產生短檔名,但IIS不支援中文猜測。
#5.1 一般漏洞修補方案
1) CMD關閉NTFS 8.3文件格式的支援
範例:(1代表關閉,0代表開啟)
Windows Server 2008 R2:
查詢是否開啟短檔名功能:fsutil 8#dot3name query
關閉此功能:fsutil 8dot3name set 1
Windows Server 2003:
fsutil behavior set disable8dot3 1##Windows Server 2003:##關閉此功能:
不同系統關閉指令稍有區別,此功能預設是開啟的,對於大多數使用者來說無需開啟。
2) 修改登錄機碼停用短檔名功能
快速鍵Win R開啟指令窗口,輸入regedit開啟登錄機碼視窗
找到路徑:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,將其中的NtfsDisable8dot3NameCreation這一項的值設為1,1代表不建立短檔名格式
修改完成後,需要重新啟動系統生效
附註:此方法只能禁止NTFS8.3格式檔案名稱建立,已經存在的檔案的短檔案名稱無法移除,需要重新複製才會消失。
以下兩種方法只適用於緩解GET 方法,其他方法依舊可以猜解。
###3) 關閉Web服務擴充- ASP.NET######4) 升級netFramework至4.0以上版本###以上是介紹IIS短檔名外洩漏洞修復的詳細內容。更多資訊請關注PHP中文網其他相關文章!