IIS短文件名猜解在拿權限中的巧用
Part1 前言
為了能在紅隊項目中發現更多的打點漏洞,我曾經花了不少精力,把那些大家覺得不重要的中低危漏洞拿來研究一下,發現有幾個漏洞還是很有利用價值的,比如說,“IIS短文件名猜解漏洞”。這個漏洞有以下這么幾個特點:1、危害等級是中低風險。2、在當前網站應用中還廣泛存在。3、微軟官網不太認可這個漏洞,不出補丁。4、很多客戶也選擇不修復。5、漏洞利用起來極其困難,需要很大的耐心和毅力。但是我借助此漏洞間接拿權限成功了很多次,還是有很多技巧在里面的,下面分享一下詳細過程。
Part2 研究過程
IIS短文件名猜解漏洞簡介:
首先簡單介紹一下IIS短文件名猜解漏洞:Windows系統為了兼容16位MS-DOS程序,為文件名較長的文件和文件夾生成了對應的Windows 8.3短文件名。比如文件名direct~1.asp中間有一個波浪號,這種就是短文件名了。
- 查看短文件名的方法
如下圖所示,使用windows自帶的命令即可。打開一個文件夾,使用dir /x命令,可以直接看到每個文件或者文件夾的短文件名,短文件名只保留前六位的文件名+ ~+ 1.后綴名的前三位。

- 短文件名命名規則
Windows短文件名的命名規則如下,實際上比以下描述要復雜一些,但是了解個大概即可,否則太費精力,不劃算(這段描述參考了freebuf的文章,文末附帶了freebuf文章的原文鏈接地址):
1. 只有前六位字符直接顯示,后續字符用~1指代。其中數字1還可以遞增,如果存在多個文件名類似的文件(名稱前6位必須相同,且后綴名前3位必須相同)
2. 后綴名最長只有3位,多余的被截斷,超過3位的長文件會生成短文件名
3. 所有小寫字母都會轉換成大寫字母
4. 長文件名中含有多個.,以文件名最后一個.作為短文件名后綴
5. 長文件名前綴/文件夾名字符長度符合0-9和Aa-Zz范圍且需要大于等于9位才會生成短文件名,如果包含空格或者其他部分特殊字符,不論長度均會生成短文件。
- 該漏洞的利用價值
此漏洞可以得到網站每個目錄下文件的前6位字符,其利用價值體現在:
1. 猜解網站的后臺地址。
2. 猜解敏感文件,例如網站備份的.rar、.zip、.bak、.sql文件等。
3. 獲取很多爬蟲爬不到的未授權訪問頁面、獲取WebService接口地址,從這些未授權訪問頁面中進而發現更多漏洞,如SQL注入漏洞、上傳漏洞等。
IIS短文件名猜解的利用過程:
假設IIS中間件網站目錄下有Databackup.zip這樣一個網站備份文件,使用dir /x查看,可以得到短文件名為DATABA~1.zip。如果在紅隊項目過程中,得知網站下有一個DATABA為前綴的文件名,那么就可以很容易猜到完整的數據庫文件名database.zip或者databackup.zip,那么就可以直接下載數據庫了,這對于紅隊項目是非常有幫助的。

IIS早期版本和較新版本對于IIS短文件名猜解的判斷方法是不一樣的,下面分情況搭建虛擬機環境測試一下:
- IIS6.0下GET請求判斷
本地搭建一個IIS6.0、Win2003環境,看一下如何通過IIS短文件名猜解得到服務器文件或者文件夾地址。接下來構造如下兩個URL:
http://192.168.237.128:8888/shop/databa~1****/a.aspx
如下圖所示,服務器如果存在databa開頭的文件,則顯示404響應碼:

http://192.168.237.128:8888/shop/databc~1****/a.aspx
如下圖所示:如果服務器不存在databc開頭的文件,則顯示400響應碼提示:

由此可知,通過以上判斷方法,可以得到逐步猜解出低版本IIS網站目錄下長文件名的前6位字符及后綴。但對于IIS較新版本,GET請求是判斷不出短文件名的,需要借助OPTIONS請求或者TRACE請求,HEAD請求、GET請求、POST請求都不行。
- IIS 10.0下OPTIONS請求判斷
接下來看一下IIS 10.0的情況下,同樣在wwwroot目錄下放一個databackup.zip文件:
http://192.168.237.166/databa~1****/a.aspx
如果服務器存在databa開頭的文件,則提示404響應碼。
http://192.168.237.166/databc~1****/a.aspx
如果服務器不存在databac開頭的文件名,則提示200響應碼。
- IIS 10.0下TRACE請求判斷
接下來換成TRACE請求方法試一試:
http://192.168.237.166/databa~1****/a.aspx
如果服務器存在databa開頭的文件,返回404響應碼。

如果服務器不存在databc開頭的文件,則返回501響應碼。

- 猜解方法總結如下(歡迎大家校勘):
1. 對于IIS6.0左右的低版本:
使用HEAD、GET、POST請求判斷,返回響應碼404則文件存在,返回響應碼400則文件不存在。
2. 對于IIS10.0左右的新版本:
使用OPTIONS、TRACE請求方法判斷,返回響應碼404則文件存在,返回響應碼200或者501則文件不存在。
IIS短文件名猜解實戰案例分享:
接下來分享一下我曾經做的2個實戰案例。
- 案例一:醫療行業案例
這個案例來源于一次醫療行業的紅隊評估項目。如下圖所示:通過IIS短文件名猜解,得到了如下兩個短文件名(為了防止泄露項目信息,截圖都來源于本地搭建的環境,原圖就不貼出來了)

patien~1.asp 由于是醫療系統,所以很容易聯想到單詞“病人”patient.asp
userad~1.asp 很容易聯想到添加用戶的功能頁面:useradd.asp
訪問之后發現patient.asp、useradd.asp均不存在,因為iis短文件名猜解出來的后綴名只有前三位,于是將后綴.asp換成.aspx就顯示文件存在了。
于是兩個未授權訪問頁面就出現了,對這兩個頁面的漏洞進行深度挖掘,追蹤頁面中的js鏈接地址。patient.aspx顯示如下頁面(圖片是本地虛擬機環境),搜索框存在SQLServer注入漏洞,而且是sa權限,直接拿到了服務器權限。
而useradd.aspx存在未授權添加用戶漏洞。都是常規操,就不做過多介紹了。

- 案例二:WebService接口
接下來看另一個稍微難一點的案例,掃描出一個真實文件名/h/dmtkts~1.asm

dmtkts~1.asm這個短文件名耗費了我很長時間才給試出來:后來我在想,asm后綴是什么后綴,開始以為是一個臨時文件之類的后綴,后來我突然想到了:.asm 后綴就是.net的WebService接口后綴.asmx。接下來dmtkts 這個短文件名的完整名怎么猜,讓我大傷腦筋,后來突然想到了,由于.asmx是WebService的接口,后面這個s字母應該是service的首字母,最終得到如下的完整文件名dmtktservice.asmx,最終拿到了一個asmx的任意接口調用。真是太難了。。
dmtktservice.asmx類似于如下圖片的功能(原圖就不貼了),這接口里面有一處上傳功能,后續利用上傳漏洞拿到權限的。

對IIS短文件名猜解的利用案例就舉這兩個例子吧,都是實戰案例。此外,還可以通過短文件名+字典的方式枚舉,我曾經用過幾百萬行的目錄字典、單詞字典去跑IIS中間件,但最常用的還是自己按照研發人員的命名習慣去手工嘗試。大家也可以發散思維,找到更多更好用的思路。
iis短文件名猜解腳本改造
對于iis短文件名猜解,我下載了好幾個腳本,各有優缺點吧,有的腳本不支持iis10,有的腳本算法大概是有問題,跑出的iis短文件名不全。最終我把lijiejie的腳本改造了一下,使它支持iis 10.0的猜解,腳本主要改動內容如下: