那些年讓我們心驚膽戰的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和後續版本一起發行。IIS目前只適用於Windows系統,不適用於其他作業系統。
根據Netcraft在2018年9月的最新全球Web伺服器報告顯示,Microsoft IIS依舊以9.57%的比例佔據全球第三大最繁忙伺服器,落後於Apache 34.07%和Nginx 25.45%。目前流行的Windows版本都預設安裝IIS服務,但同時IIS的安全性一直被業內詬病,一旦IIS出現高危漏洞,將會出現範圍廣、影響深的特點。
目前IIS一共發行12個版本,從IIS 1.0版本至IIS 10.0版本,IIS 1.0-4.0已經基本退出市場,IIS 5.0-10.0是Web市場主要使用的網站伺服器。隨著Windows版本釋出和不斷更新,IIS自身的安全性也有了較大的提升。在2005-2018年期間,IIS漏洞呈現逐年減少的趨勢,同時也說明了IIS漏洞POC公佈越來越少、漏洞挖掘的難度也在提升。
從上述IIS漏洞統計表格可以看出,IIS 7.5、IIS 8.5和IIS 10.0是目前全球使用最多的三款IIS版本,分別對應受影響漏洞12個、4個和2個,呈現受影響漏洞數量遞減的趨勢。同時,在歷年的IIS版本漏洞中,IIS 6.0、IIS 5.1、IIS 7.5和IIS 7.0受影響的漏洞數居前四位。
二、 IIS漏洞分析
千里目實驗室針對IIS近十幾年(2005年以後)的35個漏洞進行和整理和分析,IIS漏洞主要分佈在緩衝區溢位、認證繞過、DOS拒絕服務、程式碼執行和資訊洩露,其中以MS15-034遠端程式碼執行漏洞最為嚴重。
由上表可以看到,IIS歷年漏洞主要以遠端漏洞為主,佔漏洞總數85.71%,本地漏洞有5個,佔漏洞總數14.29%。其中5個本地漏洞分別是:(MS12-073)Microsoft IIS密碼資訊洩露漏洞CVE-2012-2531、 Microsoft IIS原始碼洩露漏洞CVE-2005-2678、 (MS17-016)Microsoft Internet資訊伺服器跨站指令碼漏洞CVE-2017-0055、 (MS16-016)IIS WEBDAV特權提升漏洞CVE-2016-0051、 (MS08-005)Microsoft IIS 檔案更改通知本地許可權提升漏洞CVE-2008-0074。
以下主要針對IIS漏洞中可以遠端利用的重點漏洞做分析和復現:
1. 緩衝區溢位漏洞
1.1 (MS09-053)Microsoft IIS FTPd服務NLST命令棧緩衝區CVE-2009-3023
1.1.1 漏洞描述
Microsoft IIS內嵌的FTP伺服器中存在基於棧的緩衝區溢位漏洞。如果遠端攻擊者對帶有特製名稱的目錄釋出了包含有萬用字元的FTP NLST(NAME LIST)命令的話,就可以觸發這個溢位,導致執行任意程式碼。僅在攻擊者擁有寫訪問許可權的情況下才可以建立帶有特殊名稱的目錄。
1.1.2 漏洞分析和復現
·漏洞影響版本:IIS 5.0、IIS 5.1、IIS 6.0
· 漏洞分析:
IIS包括用於通過TCP計算機網路交換和操作檔案的FTP伺服器服務。它預設偵聽埠21以獲取來自FTP客戶端的傳入連線。IIS支援的FTP命令之一是名稱列表(NLST)命令。此命令用於將目錄列表從伺服器傳輸到客戶端。該命令的語法如下:
NLST <SPACE> <pathname> <CRLF>
此命令中的路徑名應指定目錄或其他特定於系統的檔案組描述符;在pathname為NULL時,使用當前目錄。NLST命令可以使用諸如“*”之類的萬用字元來引用多個路徑。
Microsoft Internet資訊服務(IIS)中存在緩衝區溢位漏洞。該漏洞是由於處理NLST FTP命令時邊界檢查不足造成的。當FTP使用者請求包含萬用字元的路徑名過長的目錄列表時,易受攻擊的程式碼會將目錄路徑名複製到0x9F(159)位元組的基於堆疊的緩衝區中,而不進行邊界驗證。提供包含大於0x9F(159)位元組的路徑名會使堆疊緩衝區溢位,從而可能會覆蓋關鍵程序資料(如函式返回地址)。
遠端身份驗證的攻擊者可以通過連線到易受攻擊的IIS FTP伺服器並向目標伺服器傳送惡意NLST命令來利用此漏洞。成功利用將導致使用System許可權執行程式碼。如果程式碼執行攻擊不成功,可能會導致受影響的FTP會話異常終止。
注意:為了成功利用此漏洞,NLST命令中指定的長路徑名必須存在於目標系統上。因此,利用此漏洞的攻擊可能伴隨著MKD命令的使用。
· 漏洞型別:可遠端利用,存在緩衝區溢位漏洞,可觸發程式碼執行
· 漏洞復現:
復現環境:Win XP SP3 x64專業版,預設IIS 5.1
1. 搭建好IIS FTP靶機環境,測試anonymous預設匿名使用者可用,且可建立和讀寫目錄;
2. 測試正常MKD建立和NLST正常長度的目錄的功能是否正常:
以上somefolder為FTP伺服器上正常長度資料夾,NLST命令執行成功並返回結果提示226。
3. 測試建立和NLST異常目錄長度,伺服器返回150,開啟資料連線,成功執行命令。
· 漏洞緩解:
1. 此漏洞僅在IIS 5.x和6.0版本存在,升級IIS版本或者更新MS09-053補丁即可規避此漏洞;
2. 此漏洞成功利用的條件主要包括:IIS啟用FTP服務且存在FTP預設站點、攻擊者登陸FTP的賬戶有建立和讀寫資料夾的許可權。
2. DOS拒絕服務漏洞
2.1 (MS07-041)Microsoft IIS 5.1遠端緩衝區溢位漏洞 CVE-2005-4360
2.1.1 漏洞描述
Microsoft IIS處理某些畸形的HTTP請求時存在漏洞,遠端攻擊者可能利用此漏洞對伺服器進行拒絕服務攻擊。遠端攻擊者可以使用WEB瀏覽器之類的工具傳送特製的匿名HTTP請求導致IIS服務程序inetinfo.exe崩潰。僅在資料夾的"執行許可權"設定為"指令碼和可執行程式"時才會出現這個漏洞。有漏洞的虛擬資料夾包括"/_vti_bin"等。此外如果提交惡意請求還可能會觸發緩衝區溢位,導致在使用者系統上執行任意程式碼。
2.1.2 漏洞分析和復現
· 漏洞影響版本:IIS 5.1
· 漏洞分析:
IIS包括一個能夠提供靜態和動態內容的Web伺服器元件。IIS的Web元件提供Web應用程式功能。通過Web應用程式,伺服器可以在後端執行指令碼,並將生成的內容提供給請求客戶端。客戶端可以請求許多可執行資源,例如Perl指令碼、Active Server Pages(ASP)或動態連結的庫資源。用於提供動態動態內容的虛擬目錄需要配置後臺執行指令碼的許可權。
Microsoft Internet Information Services產品的HTTP伺服器元件中存在可遠端利用的拒絕服務漏洞。在特殊情況下,當多次請求動態連結的庫資源時,受影響的服務可能會因此而關閉。由於伺服器無法處理格式錯誤的URL請求,因此建立了該漏洞。惡意請求必須滿足幾個條件才能觸發此漏洞。請求URL必須包含來自以下字元的有限集合中的字元(注意,不可見字元需要使用以下字元範圍的URL編碼形式):
• %3f
• ”
• *
• :
• <
• >
•字元%01 – %1f的範圍
請求還必須包含波形符“~”字元,後面跟一個十進位制數字。
· 漏洞型別:可遠端利用,可觸發DOS攻擊
· 漏洞復現:
復現環境:Win XP SP3 x64專業版,預設IIS 5.1
1. 配置IIS預設wwwroot根目錄下的虛擬目錄_vti_bin執行許可權為“指令碼和可執行檔案”許可權;
2. 瀏覽器傳送惡意url遠端訪問靶機環境,復現成功,伺服器返回500錯誤:
Eg:http://192.168.180.200/_vti_bin/.dll/%1f\~0
· 漏洞緩解:
1. 此漏洞僅在IIS 5.1版本存在,升級IIS版本或者更新MS07-041補丁即可規避此漏洞;
2. 此漏洞成功利用的條件主要包括:要求在伺服器端將請求的虛擬目錄配置為“指令碼和可執行檔案”許可權,不開啟此許可權的伺服器不存在漏洞。
2.2 (MS09-053)Microsoft IIS FTP伺服器遞迴列表拒絕服務漏洞 CVE-2009-2521
2.2.1 漏洞描述
IIS 5.0至7.0版本的FTP服務在處理遞迴目錄列表請求時存在棧消耗漏洞。擁有對目錄寫訪問許可權的遠端攻擊者可以通過提交包含有萬用字元(如星形識別符號)的請求導致拒絕服務(守護程序崩潰)。
2.2.2 漏洞分析和復現
· 漏洞影響版本:IIS 5.0、IIS 5.1、IIS 6.0、IIS 7.0
· 漏洞分析:
通過包含萬用字元的list(ls)-R命令在Microsoft IIS FTP伺服器5.0到7.0中觸發拒絕服務條件,即ls "-R p*/../"命令可導致FTP伺服器拒絕服務。 此漏洞利用有三個條件:
(1)一個有效的ftp帳戶,擁有隻讀或寫入許可權;
(2)“FTP釋出”服務必須在啟動型別中配置為“手動”模式;
(3) FTP根目錄下至少有一個目錄。
· 漏洞型別:可遠端利用,可觸發DOS攻擊
· 漏洞復現:
復現環境:Win XP SP3 x64專業版,預設IIS 5.1
1. 新增FTP伺服器角色,IIS資訊服務管理控制檯“FTP站點下”啟動FTP預設站點
2. 配置ftp預設使用者anonymous/anonymous,擁有讀寫目錄許可權;
3. 目錄下建立一個資料夾BB,然後輸入ls "-R p*/../",成功復現DOS拒絕服務,ftp連線關閉:
中間很多重複:
p*/../BB: BB
FTP伺服器提示“遠端主機關閉連線”,FTP拒絕服務,漏洞復現成功。
· 漏洞緩解:
1. 此漏洞僅在IIS 5.0-7.0版本存在,升級IIS版本或者更新MS09-053補丁即可規避此漏洞;
2. 此漏洞成功利用的條件主要包括:IIS啟用FTP服務且存在FTP預設站點、攻擊者登陸FTP的賬戶有建立和讀寫資料夾的許可權。
3. 認證繞過漏洞
3.1 IIS認證繞過和原始碼洩露漏洞復現
3.1.1 漏洞描述
Microsoft IIS(Internet Information Server)是Microsoft Windows系統預設自帶的Web伺服器軟體,其中預設包含FTP服務。Microsoft IIS中存在認證繞過漏洞和原始碼洩露漏洞,該漏洞源於對使用者提供的輸入未經正確的驗證。攻擊者可利用這些漏洞在伺服器程序上下文中獲取密碼保護資源和檢視原始碼檔案的未授權訪問,且有助於進一步攻擊。
3.1.2 漏洞分析和復現
· 漏洞影響版本:IIS 6.0、IIS 7.5
· 漏洞分析:
Microsoft IIS由於無法正確清理使用者提供的輸入,容易出現身份驗證繞過漏洞和原始碼洩露漏洞。主要包括以下三類繞過:
(1) 安裝了PHP的Microsoft IIS 6.0身份驗證繞過:
IIS / 6.0載入受保護(如:admin)目錄中的PHP檔案需要使用者認證資訊(使用者名稱和密碼訪問),如果將“:: $ INDEX_ALLOCATION”字尾附加到目錄名稱後面,存在繞過認證並可能訪問管理檔案等特殊情況,導致IIS伺服器重要資訊洩露;
Eg:/admin::$INDEX_ALLOCATION/index.php
(2) Microsoft IIS 7.5經典ASP身份驗證繞過:
配置了經典ASP和.NET Framework 4.0的Microsoft IIS 7.5,通過將“:$ i30:$ INDEX_ALLOCATION”字尾附加到需要認證的請求目錄名稱後面,可以繞過經典的ASP檔案訪問限制;
Eg:舉例:/admin:$i30:$INDEX_ALLOCATION/index.asp
(3) Microsoft IIS 7.5 .NET原始碼公開和身份驗證繞過:
在配置中安裝了PHP的Microsoft IIS / 7.5,存在認證繞過漏洞;
Eg:http://<victimIIS75>/admin:$i30:$INDEX_ALLOCATION/admin.php
除此之外,通過將/.php附加到ASPX檔案(或使用未通過請求過濾規則阻止的.NET框架的任何其他檔案,如錯誤配置:.CS,.VB等檔案)。IIS 7.5使用檔案的完整原始碼進行響應,並將其作為PHP程式碼執行。這意味著通過使用上傳功能,可以(在特殊情況下)執行任意PHP程式碼。
Eg: http://<victimIIS75>/Default.aspx/.php (php任意程式碼執行)
· 漏洞型別:可遠端利用,可觸發認證繞過和資訊洩露
· 漏洞復現:
復現環境:Windows 7 x64位,預設IIS 7.5
以下驗證復現上述(3)的漏洞,(1)和(2)類似此處不做驗證:
1. IIS網站根目錄下建立admin使用者目錄,關閉預設使用者認證,換言之,訪問/admin/index.php目錄下的檔案需要認證資訊,認證失敗或者無認證資訊將會返回401未授權頁面;
2. 配置完成後,重啟IIS伺服器,瀏覽器遠端訪問此檔案:http://192.168.180.207/admin/index.php,預設IIS賬戶訪問提示401未授權;
3. 接下來,利用:$i30:$INDEX_ALLOCATION來繞過此限制,瀏覽器遠端訪問:
http://192.168.180.207/admin:$i30:$INDEX_ALLOCATION/index.php,成功繞過並訪問到敏感資訊;
4. 除此之外,如果目標站點限制上傳和訪問php檔案,可以利用上傳aspx(.net支援解析的檔案型別)檔案逃避限制,將其當做php程式碼執行;
Eg:網站目錄下有一個index.aspx的檔案,裡面寫有php程式碼,正常通過http://192.168.180.207/admin:$i30:$INDEX_ALLOCATION/index.aspx訪問此檔案無法執行程式碼,通過在末尾加上index.aspx/.php形式訪問將會成功執行php程式碼;
a. 正常繞過訪問index.aspx檔案,頁面返回亂碼,未執行phpinfo程式碼:
b. 通過在末尾加上/.php,成功執行php程式碼:
· 漏洞緩解:
1. IIS 7.5 配置.NET Framework 2.0不受上述(2)的繞過影響;
2. 攻擊者需要事先獲取IIS伺服器受認證保護目錄;
4. 資訊洩露漏洞
4.1 Microsoft IIS 短檔名洩露漏洞
4.1.1 漏洞描述
IIS短檔名漏洞是由於HTTP請求中攜帶舊DOS 8.3名稱約定(SFN)的代字元(~)波浪號引起的。它允許遠端攻擊者在Web根目錄下公開檔案和資料夾名稱(不應該可被訪問)。攻擊者可以找到通常無法從外部直接訪問的重要檔案,並獲取有關應用程式基礎結構的資訊。
4.1.2 漏洞分析和復現
· 漏洞影響版本:IIS 5.0-10.0全系列版本
· 漏洞分析:
Windows 支援以 8.3 格式生成與 MS-DOS 相容的(短)檔名,以允許基於 MS-DOS 或 16 位 Windows的程式訪問這些檔案。基於Windows的IIS伺服器預設根目錄C:\inetpub\wwwroot下的網頁尾本檔案和目錄符合一定條件時,會生成相應的短檔名。此時,攻擊者利用HTTP的DEBUG、OPTIONS、GET、POST、HEAD、TRACE等方法攜帶波浪號,可以對IIS伺服器短檔名進行暴力猜解,依據返回的頁面資訊和狀態碼來確認真實存在的檔名,從而獲取伺服器敏感資訊,為下一步攻擊做準備。
· 漏洞型別:可遠端利用,可觸發資訊洩露
· 漏洞復現:
復現環境:Windows 7 x64位,預設IIS 7.5
1. 通過cmd下進入IIS網站根目錄C:\inetpub\wwwroot,輸入“dir /x”檢視已存在的短檔名:
2. 使用公開POC或者掃描程式探測目標靶機的短檔名,成功猜解到伺服器根目錄短檔名稱:
· 漏洞緩解:
1. 限制IIS伺服器HTTP方法,除了必要的GET、POST方法,其他HTTP方法建議關閉,視情況開啟;
2. IIS伺服器檔案建議使用複雜字元或者中文命名,增加後期攻擊者暴力破解難度;
3. 針對已存在的IIS伺服器,建議關閉NTFS 8.3檔案格式的支援或者修改登錄檔禁用短檔名功能。
注:詳細原理和解決方案請參考:https://www.freebuf.com/articles/web/172561.html
5. 程式碼執行漏洞
5.1 Microsoft IIS畸形副檔名繞過安全限制漏洞 CVE-2009-4444
5.1.1 漏洞描述
IIS伺服器錯誤的執行了帶有多個副檔名的檔案中所包含的ASP程式碼。例如,malicious.asp;.jpg被執行為了ASP檔案。很多檔案上傳程式僅檢查副檔名的最後部分,因此這可能導致繞過保護機制向伺服器上傳惡意可執行檔案。
5.1.2 漏洞分析和復現
· 漏洞影響版本:IIS 6.0
· 漏洞分析:
此漏洞主要原因是IIS第三方上傳應用沒有限制檔案上傳格式或者限制不夠嚴格,只檢查了檔案末尾的格式,導致攻擊者可以將如Asp webshell偽裝成malicious.asp;.jpg檔案格式上傳到IIS伺服器。IIS的Classic ASP功能在處理asp檔案時,被此畸形檔案格式的分號截斷了,認為是asp檔案並進行相應的解析處理。攻擊者則在獲取上傳路徑後通過遠端訪問執行此webshell,控制IIS伺服器甚至Windows宿主機器。
· 漏洞型別:可遠端利用,檔案上傳繞過可觸發程式碼執行
· 漏洞復現:
復現環境:Win server 2003 Sp2 32位企業版,預設IIS 6.0
1. IIS伺服器根目錄下建立一個名為aspwebshell.asp;.jpg的檔案,用記事本開啟,放入asp webshell程式碼(實際利用過程中是通過第三方應用上傳繞過漏洞上傳此檔案,並設法獲取此上傳路徑);
2. 通過瀏覽器遠端訪問此檔案,http://192.168.180.201/aspwebshell.asp;.jpg,成功執行asp webshell程式碼:
· 漏洞緩解:
1. 嚴格限制IIS第三方應用上傳檔案的格式;
2. 此漏洞僅影響IIS 6.0,其他版本解析asp檔案不會被分號截斷,可升級至無此漏洞的IIS版本。
5.2 (MS15-034)Microsoft IIS遠端程式碼執行漏洞復現 CVE-2015-1635
5.2.1 漏洞描述
Microsoft Windows是美國微軟(Microsoft)公司釋出的一系列作業系統。Microsoft Internet Information Services(IIS)是一套運行於Microsoft Windows中的網際網路基本服務。使用Microsoft IIS 6.0以上版本的Microsoft Windows的HTTP協議堆疊(HTTP.sys)中存在遠端執行程式碼漏洞,該漏洞源於HTTP.sys檔案沒有正確分析經特殊設計的HTTP請求。成功利用此漏洞的攻擊者可以在系統帳戶的上下文中執行任意程式碼。
5.2.2 漏洞分析和復現
· 漏洞影響版本:IIS 7.5、IIS 8.0、IIS 8.5
· 漏洞分析:
IIS程序w3wp.exe接收到HTTP請求後,將資料快取到核心中,並整合HTTP迴應頭,最後由http.sys組織資料包經由網路核心元件傳送出去。請求中包括Range物件的指定範圍,而快取中則包含了http檔案和大小資訊等。
根據公開POC,構造包含“Range: bytes=0-18446744073709551615”的HTTP請求併發送到IIS 7.5-8.5伺服器,如果IIS伺服器返回“Requested Range Not Satisfiable”,則存在漏洞,如果返回“The request has an invalid header name”或者沒有迴應,則說明漏洞已經修補或者不存在漏洞。
· 漏洞型別:可遠端利用,可觸發程式碼執行
· 漏洞復現:
復現環境:Win server 2008 R2 64位企業版,預設IIS 7.5
1. 開啟IIS預設網站
2. 根據公開poc傳送包含特殊設計的Range欄位攻擊靶機環境,成功檢測到漏洞:
· 漏洞緩解:
1. 禁用 IIS 核心快取,詳情見微軟官方公告:
https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2015/ms15-034
2. 升級IIS至IIS 10.0版本,此版本不存在此漏洞。
三、 漏洞總結
IIS 遠端漏洞主要包括緩衝區溢位、認證繞過、拒絕服務、程式碼執行和資訊洩露漏洞,本地漏洞主要分佈在資訊洩露和許可權提升漏洞分類,大部分漏洞利用難度較大,但是一旦成功被攻擊者利用,影響的不僅僅只是IIS伺服器,甚至可能是執行IIS的Windows主機。如果使用者主機被利用,那麼攻擊者可以將此臺主機當作肉雞攻擊內網中的其他主機、伺服器或者網路裝置等,後果不堪設想。
如果IIS伺服器的網站配置不當,攻擊者可以通過IIS短檔名猜解和暴力破解使用者隱私檔案並進行認證繞過訪問,獲取使用者隱私資訊。此外,不合理的上傳限制也會導致攻擊者上傳含有惡意程式碼或webshell並偽裝成合法的檔案,進而導致IIS伺服器被攻陷。攻擊者利用提權漏洞或者命令執行等漏洞,對IIS伺服器甚至是Windows作業系統進行進一步的攻擊。無論是對IIS伺服器本身的服務還是該IIS伺服器所處的網路環境,IIS漏洞都是一個極大的隱患,也讓IIS網站管理員和不少運維人員心驚膽戰。