7. IIS短文件/文件夾漏洞(匯總整理)


漏洞的成因與分析:

1)利用“~”字符猜解暴露短文件/文件夾名。

2).Net Framework的拒絕服務攻擊。

現在看大部分的分析討論都是第一個的。第二個比較少。這里簡單復述一下其他研究人員的分析。

1)利用“~”字符猜解暴露短文件/文件夾名

 Windows 還以 8.3 格式生成與 MS-DOS 兼容的(短)文件名,以允許基於 MS-DOS 或 16 位 Windows的程序訪問這些文件。在cmd下輸入“dir /x”即可看到短文件名的效果。

Soroush Dalili的說法是,通配符”*” 和 “?”發送一個請求到iis,當IIS接收到一個文件路徑中包含”~”的請求時,它的反應是不同的.基於這個特點,可以根據http的響應區分一個可用或者不可用

aegis_inst.exe對應的短文件名為aegis_~1.exe。根據此特性,我們能夠通過訪問短文件名間接訪問它對應的文件。

由於短文件名的長度固定(xxxxxx~xxxx),因此黑客可直接對短文件名進行暴力破解 ,從而訪問對應的文件。

舉個例子,有一個數據庫備份文件 backup_www.abc.com_20150101.sql ,它對應的短文件名是backup~1.sql 。因此黑客只要暴力破解出backup~1.sql即可下載該文件,

而無需破解完整的文件名。

其實, 也就只能確定前6個字符,如果后面的字符太長、包含特殊字符,那么就很難猜解。另外如果文件本身太短也是無法猜解的。Soroush Dalilide研究是通過對目標網站或同類型網站

爬蟲,爬出建立一個字典庫,再與得到的短文件名來猜剩下的字符。第二是可以利用fuzzdb(一個應用程序模糊測試(fuzzing)數據庫)來猜解。第三個是結合OWASP的 dirbuster(一款路徑

及網頁暴力破解的工具)。

另外,Soroush Dalilide研究中還提到可以繞過Basic and Windows認證,猜解認證目錄下的文件。以下是II5.0繞過認證的方法:詳細可見原文研究http://soroush.secproject.com/blog/2010/07/iis5-1-directory-authentication-bypass-by-using-i30index_allocation/

“/AuthNeeded:$i30:$INDEX_ALLOCATION/secretfile.asp”

Instead of:

“/AuthNeeded/secretfile.asp”

但是並不是所有版本的IIS都能夠繞過認證。應該是在可繞過的前提下猜解,形式如下:

/AuthNeeded::$Index_Allocation/*~1*/.aspx

或者

/AuthNeeded:$I30:$Index_Allocation/*~1*/.aspx

 

2).Net Framework的拒絕服務攻擊

Soroush Dalilide研究發現,當請求文件夾名稱包含~1的請求,會導致不存在該文件的.Net framework去遞歸所有根目錄。特別是第一次請求時,會造成的文件讀取特別多。

漏洞利用代碼:

http://www.exploit-id.com/dospoc/net-framework-tilde-character-dos

在wooyun網站上也有相關的討論。

http://zone.wooyun.org/content/487

其中完美世界那個漏洞就是用的這種手法。

http://www.wooyun.org/bugs/wooyun-2010-09202

 

關於windows文件名背景知識:
Windows 支持的長文件名最多為 255 個字符。Windows 還以 8.3 格式生成與 MS-DOS 兼容的(短)文件名,以允許基於 MS-DOS 或 16 位 Windows 的程序訪問這些文件。

Windows 按以下方式從長文件名生成短文件名:

        Windows 刪除文件名中的任何無效字符和空格。無效字符包括:. ” / \ [ ] : ; = , 

由於短文件名只能包含一個英文句點 (.),因此,Windows 將刪除文件名中的其他英文句點,即使文件名中最后一個英文句點后面是有效的非空格字符,也是如此。

例如,

Windows 從長文件名 This is a really long filename.123.456.789.txt    生成短文件名: Thisis~1.txt

否則,

Windows 將忽略最后一個英文句點,而使用倒數第二個英文句點。例如,Windows 從長文件名

        This is a really long filename.123.456.789.       生成短文件名:  Thisis~1.789

生成短文件名如果需要的話,Windows 將文件名截斷為 6 個字符,並在后邊附加一個波形符 (~) 和一個數字。例如,創建的每個以”~1″結尾的唯一文件名。復制文件名以”~2″、”~3″等結尾。

生成短文件名Windows 將文件擴展名截斷為 3 個字符或更短。

生成短文件名Windows 將文件名及擴展名中的所有字符轉為大寫。

例如:假設 http://www.f4ck.net/iloveyou.txt 這個文件是存在的

暴力猜解:

1.訪問 http://www.f4ck.net/*~1*/.aspx

            404   存在短文件名~的文件/文件夾

            400   不存在短文件名~的文件/文件夾

2.訪問 http://www.f4ck.net/a*~1*/.aspx

            404   存在a開頭的短文件名~的文件/文件夾      

            400   不存在a開頭的短文件名~的文件/文件夾

以此類推,直到猜解到第六位為止,猜出來應該為ilovey~1

猜解后綴名,即可猜解出ilovey~1.txt

這樣的話在 IIS 環境下,可以繼續總結規則+字典爆破猜解出文件全名

若在apache環境下,可以直接訪問 http://www.f4ck.net/ilovey~1.txt

 

漏洞的利用:

 

漏洞的利用,需要使用到通配符。在windows中,可以匹配n個字符,n可以為0. 判斷某站點是否存在IIS短文件名暴力破解,構造payload,分別訪問如下兩個URL:

1. http://www.target.com/*~1****/a.aspx 2. http://www.target.com/l1j1e*~1****/a.aspx


這里我使用了4個星號,主要是為了程序自動化猜解,逐個猜解后綴名中的3個字符,實際上,一個星號與4個星號沒有任何區別(上面已經提到,*號可以匹配空)。

如果訪問第一個URL,返回404, 而訪問第二個URL,返回400, 則目標站點存在漏洞。

判斷漏洞存在后,繼續猜解目錄下是否存在一個a開頭的文件或文件夾,訪問:

http://www.target.com/a*~1****/a.aspx

如果存在,將返回404。 如此反復,不斷向下猜解完所有的6個字符。
猜解完之后,得到的序列應該類似:

http://www.target.com/abcdef*~1****/a.aspx

到了這一步,需要考慮兩種情況,如果以abcdef開頭的是一個文件夾,則

http://www.target.com/abcdef*~1/a.aspx

將返回404.
如果abcdef開頭的是一個文件,則自動提交

http://www.target.com/abcdef*~1*g**/a.aspx

用a-z的26個字母替換上述g的位置,應該能得到多個404頁面。(記住一點,404代表的是存在。)如果下面的地址返回404,

http://www.target.com/abcde*~1*g**/a.aspx

則代表擴展名中肯定存在g。
按照上面的思路,繼續猜解g后面的字符,直到后綴名中的3個字符都猜解完,就可以了。

以上介紹了怎么手工猜解,這個漏洞的意義何在:

1. 猜解后台地址 2. 猜解敏感文件,例如備份的rar、zip、.bak、.SQL文件等。 3. 在某些情形下,甚至可以通過短文件名web直接下載對應的文件。比如下載備份SQL文件。

該短文件名有以下特征:

1. 只有前六位字符直接顯示,后續字符用~1指代。其中數字1還可以遞增,如果存在多個文件名類似的文件(名稱前6位必須相同,且后綴名前3位必須相同)。

2. 后綴名最長只有3位,多余的被截斷。

我們可以在啟用.net的IIS下暴力列舉短文件名,原因是:

3. 訪問構造的某個存在的短文件名,會返回404

4. 訪問構造的某個不存在的短文件名,會返回400

 

漏洞的局限性:

這個漏洞的局限有幾點:

1) 只能猜解前六位,以及擴展名的前3位。

2) 名稱較短的文件是沒有相應的短文件名的。

3)需要IIS和.net兩個條件都滿足

 

IIS短文件名泄漏漏洞危害:

Microsoft IIS在實現上存在文件枚舉漏洞,***者可利用此漏洞枚舉網絡服務器根目錄中的文件。
危害:***者可以利用“~”字符猜解或遍歷服務器中的文件名,或對IIS服務器中的.Net Framework進行拒絕服務***。

 

修復建議:

1)通用有效方法:

      禁用windows系統中的短文件名功能。

      打開注冊表,並打開此目錄:HKLM\SYSTEM\CurrentControlSet\Control\FileSystem

      修改目錄下 NtfsDisable8dot3NameCreation的值為1

      或者直接使用cmd命令:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v NtfsDisable8dot3NameCreation /d 1 /t REG_DWORD /f

      修改完成后,重新啟動系統生效,不過此修改只能禁止NTFS8.3格式文件名創建,已經存在的文件的短文件名無法移除

2)簡單有效方法:CMD命令:

     Windows Server 2008 R2

     查詢是否開啟短文件名功能:fsutil 8dot3name query

     關閉該功能 :fsutil 8dot3name set 1

    

     Windows Server 2003

     關閉該功能 :fsutil behavior set disable8dot3 1

3)手動驗證:

     新建文件夾並創建幾個文件,打開CMD進入該文件夾呢執行dir /x 檢測,看不到有顯示短文件名則成功。

4)  其他方法:

    禁止url中使用“~”或它的Unicode編碼。

    關閉NTFS 8.3文件格式的支持。該功能默認是開啟的,對於大多數用戶來說無需開啟。

    如果是虛擬主機空間用戶,可采用以下修復方案:

           如果你的web環境不需要asp.net的支持你可以進入Internet 信息服務(IIS)管理器 --- Web 服務擴展 - ASP.NET 選擇禁止此功能。

           升級net framework 至4.0以上版本。將web文件夾的內容拷貝到另一個位置,比如 D:\www 到 D:\www.back,然后刪除原文件夾D:\www,再重命名D:\www.back到D:\www。如果不重新復制,已經存在的短文件名則是不會消失的。 攻擊者可以利用“~”字符猜解或遍歷服務器中的文件名,或對IIS服務器中的.Net Framework進行拒絕服務攻擊。

 

注: 1.windows Server 2003修改后需要重新啟動服務器才能生效!

        2.已存在的文件短文件名不會取消,只對以后創建的文件有效

 

參考鏈接:

http://www.freebuf.com/articles/4908.html

https://blog.csdn.net/baidu_38795342/article/details/79483865

https://segmentfault.com/a/1190000006225568

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM