IIS短檔名漏洞
0x00 IIS短檔名
為了相容16位MS-DOS程式,Windows為檔名較長的檔案(和資料夾)生成了對應的DOS 8.3 短檔名。
Windows下檢視對應的短檔名,可以使用命令 dir /x
對應短檔名的規律是:
- 前六位保留
- 所有小寫字母均轉換成大寫字母
- 後續字元用~1表示
- 字尾最多顯示三位,其餘的被截斷
- 長檔名字首/資料夾名字元長度符合0-9和Aa-Zz範圍且需要大於等於9位才會生成短檔名,如果包含空格或者其他部分特殊字元,不論長度均會生成短檔案
0x01 IIS短檔名漏洞
在IIS的web服務中,有時無法直接訪問一些檔案,但是我們傳送一個存在萬用字元* 和?的請求,當IIS接收到一個檔案路徑中包含~的請求時,根據檔案是否存在返回值是不同的,我們可以利用這個方法猜解本來無法得到的檔名。
-
訪問構造的某個存在的短檔名,會返回404
-
訪問構造的某個不存在的短檔名,會返回400
0x02 影響版本
本來受到IIS短檔名漏洞影響的版本如下:
1
|
|
以上受影響範圍主要是針對HTTP GET方法,且需要同時安裝ASP.NET應用程式。
但是漏洞發現者Soroush Dalili之後再次在IIS7.5和IIS8.0的版本中發現,當使用OPTIONS來代替GET 方法時,如果請求中的短檔名是存在的,IIS會返回一個不一樣的錯誤資訊。
而且在之後的版本中此漏洞也都成功驗證。
所以影響的版本又加上了:
1
|
|
所以,短檔名漏洞存在於目前IIS的所有版本中。
0x03 漏洞復現
在windows10下開啟IIS服務
開始—–>控制面板—->程式—->啟用或關閉windows功能,勾選以下選項,安裝IIS。
在瀏覽器訪問ip地址,如果發現IIS windows資訊說明安裝成功。
IIS 安裝成功以後,會預設在C盤目錄下生成intpub目錄,網站的根目錄位於C:\inetpub\wwwroot,此時我們建立幾個asp檔案之後,再使用dir /x檢視下根目錄是否存在短檔名
我們可以看到,有的檔案有短檔名,有的檔案沒有,這是因為之前提到的,長檔名字首/資料夾名字元長度符合0-9和Aa-Zz範圍且需要大於等於9位才會生成短檔名,如果包含空格或者其他部分特殊字元,不論長度均會生成短檔案。
0x04 漏洞利用
常用的利用方式有以下幾種
短檔名洩露
我們可以寫python指令碼通過HTTP的OPTIONS方法爆破檔名,也可以下載專用的爆破工具來掃描。
apache下通過短檔名下載
當Apache執行在windows下,如果建立了一個長檔案,那麼無需猜解長檔案,直接用短檔案就可以下載了。
Net Framework的拒絕服務攻擊
當請求資料夾名稱包含~1的請求,會導致不存在該檔案的.Net framework去遞迴所有根目錄。特別是第一次請求時,會造成的檔案讀取特別多。用殭屍網路不斷向伺服器傳送此類請求,很容易耗盡對方伺服器資源。
0x05 侷限性
-
1.此漏洞只能確定前6個字元,如果後面的字元太長、包含特殊字元,很難猜解
-
2.如果檔名本身太短(無短檔名)也是無法猜解的
-
3.如果檔名前6位帶空格,8.3格式的短檔名會補進,和真實檔名不匹配
-
4.如果資料夾名前6位字元帶點“.”,掃描程式會認為是檔案而不是資料夾,最終出現誤報
-
5.不支援中文檔名,包括中文檔案和中文資料夾。一箇中文相當於兩個英文字元,故超過4箇中文字會產生短檔名,但是IIS不支援中文猜測
0x06 應對
禁止url中使用“~”或它的Unicode編碼
關閉windows的8.3格式功能
- 命令列中關閉:
1
fsutil 8dot3name set 1
- 登錄檔中禁用:
在登錄檔中找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,將其中的 NtfsDisable8dot3NameCreation這一項的值設為 1,代表不建立短檔名格式
升級netFramework至4.0以上版本
修改登錄檔禁用短檔名功能
0x07 利用
1. 猜解後臺地址
2. 猜解敏感檔案,例如備份的rar、zip、.bak、.SQL檔案等。
3. 在某些情形下,甚至可以通過短檔名web直接下載對應的檔案。比如下載備份SQL檔案。
該短檔名有以下特徵:
1. 只有前六位字元直接顯示,後續字元用~1指代。其中數字1還可以遞增,如果存在多個檔名類似的檔案(名稱前6位必須相同,且字尾名前3位必須相同)。
2. 字尾名最長只有3位,多餘的被截斷。
我們可以在啟用.net的IIS下暴力列舉短檔名,原因是:
3. 訪問構造的某個存在的短檔名,會返回404
4. 訪問構造的某個不存在的短檔名,會返回400
利用
1、 測試環境為windows server 2003 r2,開啟webdav服務和net服務。
2、使用payload驗證目標是否存在IIS短檔名漏洞,下圖顯示的404,說明目標存在該短檔名
Payload: http://192.168.10.130 /*~1*/a.aspx
http://192.168.10.130/ttt*~1*/a.aspx
注:*可以匹配n個字元,n可以為0
3、瀏覽器訪問一個不存在的短檔名,返回”Bad Request(400)”,說明目標不存在該短檔名
4、通過瀏覽器訪問上面兩個payload,根據返回的結果,可以說明目標存在IIS短檔案漏洞
5、判斷漏洞存在後,接下來手工詳細分析猜解IIS短檔名原理
5.1、在網站根目錄(C:\Inetpub\wwwroot)下建立一個abcdef123456.txt檔案
5.2、瀏覽器分別訪問http://192.168.10.130/a*~1*/a.aspx, http://192.168.10.130/b*~1*/a.aspx
5.3、通過以上兩個圖片,可以看出存在一個以a開頭的短檔名
5.4、按照上面的方法依次猜解可以得到http://192.168.10.130/abcdef*~1*/a.aspx,到此,已經猜解出來短檔名,到了這一步,需要考慮兩種情況,以abcdef開頭的是一個資料夾還是一個檔案。
如果以abcdef開頭的是一個資料夾,那麼瀏覽器訪問http://192.168.10.130/abcdef*~1/a.aspx,將返回404,如果abcdef開頭的是一個檔案,需要猜解字尾名
5.5、瀏覽器訪問http://192.168.10.130/abcdef*~1/a.aspx,根據下圖返回結果說明以abcdef開頭的不是一個資料夾,而是一個檔案
5.6、瀏覽器訪問http://192.168.10.130/abcdef*~1.a*/a.aspx,根據下圖返回說明該短檔案字尾的第一位不是a
5.7、用a-z的26個字母依次替換上述a的位置,當替換成t時,返回404頁面,說明該短檔案的第一位字尾是t
5.8、按照上面的方法依次猜解得到該短檔名的字尾是txt
5.9、到此為止,已經猜解出該短檔名為abcdef~1.txt
6、根據已經猜解出來的短檔名abcdef~1.txt,繼續猜解出該短檔名的完全檔名為abcdef123456.txt
7、使用IIS短檔名掃描軟體,獲取目標存在哪些短檔名
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一個站,密碼不是弱口令,還有驗證碼,自然不好爆破之類
掃描後臺結果顯示
訪問/test.aspx
????
雲悉資訊蒐集顯示
Iis7.5和.net都具備了可以考慮一波是否存在iis短檔名漏洞
我使用的是李劼傑的工具:
https://github.com/lijiejie/IIS_shortname_Scanner
掃描結果如下
4個目錄,共找到6個檔案,現在開始猜解檔名
最後猜到/rninde~1.asp*應該是/rnindex.aspx,訪問該頁面
發現沒有了驗證碼,我們便可以嘗試爆破登入等。
0x08 總結
IIS短檔名洩漏漏洞侷限性
這個漏洞的侷限有幾點:
1) 只能猜解前六位,以及副檔名的前3位。
2) 名稱較短的檔案是沒有相應的短檔名的。
3)需要IIS和.net兩個條件都滿足
IIS短檔名洩漏漏洞危害:
Microsoft IIS在實現上存在檔案列舉漏洞,***者可利用此漏洞列舉網路伺服器根目錄中的檔案。
危害:***者可以利用“~”字元猜解或遍歷伺服器中的檔名,或對IIS伺服器中的.Net Framework進行拒絕服務***。
相對來說這個漏洞比較雞肋,微軟也表示IIS短檔案漏洞未達到安全更新標準,需要確定何時在下一個邏輯版本中解決它。
雖然漏洞的威脅不大,但是正因不嚴重導致微軟沒有更新,現在所有版本都存在這個問題,當有人將其與其他漏洞配合起來使用時,也是有可能造成很嚴重的後果。