1. 程式人生 > 其它 >IIS短檔名漏洞

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
2
3
4
5
6
7
8
9
10
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 XP Professional和Windows XP Media Center 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(遠端啟用<customErrors>或沒有web.config)
IIS 7.5,Windows 2008(經典管道模式)
注意:IIS使用.Net Framework 4時不受影響

以上受影響範圍主要是針對HTTP GET方法,且需要同時安裝ASP.NET應用程式。

但是漏洞發現者Soroush Dalili之後再次在IIS7.5和IIS8.0的版本中發現,當使用OPTIONS來代替GET 方法時,如果請求中的短檔名是存在的,IIS會返回一個不一樣的錯誤資訊。

而且在之後的版本中此漏洞也都成功驗證。
所以影響的版本又加上了:

1
2
3
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的所有版本中。

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短檔案漏洞未達到安全更新標準,需要確定何時在下一個邏輯版本中解決它。

雖然漏洞的威脅不大,但是正因不嚴重導致微軟沒有更新,現在所有版本都存在這個問題,當有人將其與其他漏洞配合起來使用時,也是有可能造成很嚴重的後果。