IIS是一種Web(網頁)服務組件,其中包括Web服務器、FTP服務器、NNTP服務器和SMTP服務器,分別用于網頁瀏覽、文件傳輸、新聞服務和郵件發送等方面,它使得在網絡(包括互聯網和局域網)上發布信息成了一件很容易的事。
IIS的安全脆弱性曾長時間被業內詬病,一旦IIS出現遠程執行漏洞威脅將會非常嚴重。遠程執行代碼漏洞存在于 HTTP 協議堆棧 (HTTP.sys) 中,當 HTTP.sys 未正確分析經特殊設計的 HTTP 請求時會導致此漏洞。 成功利用此漏洞的攻擊者可以在系統帳戶的上下文中執行任意代碼,可以導致IIS服務器所在機器藍屏或讀取其內存中的機密數據。
1. 漏洞介紹及成因
IIS Server在Web服務擴展中開啟了WebDAV,配置了可以寫入的權限,造成任意文件上傳。
版本:IIS 6.0
2. 漏洞復現
1)開啟WebDAV和寫權限;
2) 利用burp測試抓包,將GET請求改為OPTIONS;
3)利用工具進行測試;
成功上傳,再上傳一句話木馬,然后用菜刀連接,getshell;
3. 漏洞修復
關閉WebDAV和寫權限;
1. 漏洞介紹及成因
IIS的短文件名機制,可以暴力猜解短文件名,訪問構造的某個存在的短文件名,會返回404,訪問構造的某個不存在的短文件名,返回400。
2. 漏洞復現
1)在網站根目錄下添加aaaaaaaaaa.html文件;
2)進行猜解;
3. 漏洞修復
修復方法:
1)升級.net framework;
2)修改注冊表禁用短文件名功能;
快捷鍵Win+R打開命令窗口,輸入regedit打開注冊表窗口,找到路徑:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,將其中的 NtfsDisable8dot3NameCreation這一項的值設為 1,1代表不創建短文件名格式,修改完成后,需要重啟系統生效。
3)CMD關閉NTFS 8.3文件格式的支持;
4)將web文件夾的內容拷貝到另一個位置,如c:\www到d:\w,然后刪除原文件夾,再重命名d:\w到c:\www。
修復后:
4. 局限性
1) 此漏洞只能確定前6個字符,如果后面的字符太長、包含特殊字符,很難猜解;
2) 如果文件名本身太短(無短文件名)也是無法猜解的;
3) 如果文件名前6位帶空格,8.3格式的短文件名會補進,和真實文件名不匹配;
1. 漏洞介紹及成因
在IIS6.0處理PROPFIND指令的時候,由于對url的長度沒有進行有效的長度控制和檢查,導致執行memcpy對虛擬路徑進行構造的時候,引發棧溢出,從而導致遠程代碼執行。
2. 漏洞復現
1)漏洞環境搭建
在windows server 2003 r2 32位上安裝iis6.0;
2)觸發漏洞
在本地執行exp,exp如下:
執行成功后,服務器端彈出計算器:
3. 漏洞修復
1)關閉WebDAV服務;
2)使用相關防護設備;
1. 漏洞介紹及成因
IIS 6.0在處理含有特殊符號的文件路徑時會出現邏輯錯誤,從而造成文件解析漏洞。這一漏洞有兩種完全不同的利用方式:
/test.asp/test.jpg
test.asp;.jpg
2. 漏洞復現
利用方式1
第一種是新建一個名為”test.asp”的目錄,該目錄中的任何文件都被IIS當作asp程序執行(特殊符號是“/”);
利用方式2
第二種是上傳名為”test.asp;.jpg”的文件,雖然該文件真正的后綴名是”.jpg”,但由于含有特殊符號”;”,仍會被IIS當做asp程序執行;
IIS7.5文件解析漏洞
test.jpg/.php
URL中文件后綴是.php,便無論該文件是否存在,都直接交給php處理,而php又默認開啟”cgi.fix_pathinfo”功能,默認會對文件進行“修理”,何謂“修理”呢?舉個例子,當php遇到路徑為”/aaa.xxx/bbb.yyy”的時侯,若”/aaa.xxx/bbb.yyy”不存在,則會去掉最后的“bbb.yyy”,然后判斷”/aaa.xxx”是否存在,若存在,則把“/aaa.xxx”當作文件。
若有文件test.jpg,訪問時在其后加/.php,便可以把”test.jpg/.php”交給php,php修理文件路徑”test.jpg/.php”得到”test.jpg”,該文件存在,便把該文件作為php程序執行了。
3. 漏洞修復
1)對新建目錄文件名進行過濾,不允許新建包含‘.’的文件;
2)曲線網站后臺新建目錄的功能,不允許新建目錄;
3)限制上傳的腳本執行權限,不允許執行腳本;
4)過濾.asp/xm.jpg,通過ISApi組件過濾。
1、當WEB目錄下,文件名以 xxx.asp;xxx.xxx 來進行命名的時候,此文件將送交asp.dll解析(也就是執行腳本)
2、當WEB目錄下,在訪問以 xxx.asp 命名的目錄下的任意文件時,此文件將送交asp.dll解析(也就是執行腳本)
我們都知道IIS6中間件主要解析的就是asp語言的文件,如果你放入一個java語言的文件,php語言的文件他是不會進行解析的,只能當做文本文件進行顯示出來,而里面語法所表達的意思是不會執行的。那么從iis底層審計原理和測試發現IIS6在解析文件時存在如下問題:
1、后綴如下會被當做asp程序進行執行 .asp .cer .asa .cdx
2、IIS 6.0在處理含有特殊符號的文件路徑時會出現邏輯錯誤,從而造成文件解析漏洞。這一漏洞有兩種完全不同的利用方式: /test.asp/test.jpg test.asp;.jpg
為什么說這樣的解析我們叫做漏洞呢?而不叫做多一種解析方式呢?
主要的原因是很多研發在編寫上傳功能的時候會進行黑名單活著白名單的判斷,而往往不了解這種解析漏洞,忽略了這種校驗,從而被其他人繞過上傳能解析的大小馬。
比如:有一個頭像上傳功能,開發者后臺只允許上傳后綴為jpg的文件,其他文件不允許上傳,而黑客利用第二條解析漏洞上傳了個1.asp;.jpg這時候能順利的將該文件上傳到服務器中,如果服務器只是將其按照圖片解析,那么里面插入的asp馬腳本就解析不成功無法發揮馬的作用,但是iis6會將其安裝asp文件解析,因此這個馬就能起到馬的作用,從而被黑客利用。
而iis6由于是設計上的缺陷,因此該漏洞沒有廠家的修復方案,只要研發在本身上傳功能上對上述漏洞進行過濾。
漏洞影響 IIS7 及IIS7.5 在使FastCGI方式調用php時,在php.ini里設置cgi.fix_pathinfo=1
使得訪問任意文件URL時,在URL后面添加“/x.php”等字符時,該文件被iis當php文件代碼解析。
如制作1.gif圖片馬(在圖片中插入php馬腳本)正常情況下訪問 http://127.0.0.1/1.gif 的內容為正常的圖片,里面的php腳本并不會執行,因為IIS7/IIS7.5只會按照圖片的解析格式來進行解析。當訪問 http://127.0.0.1/1.gif/1.php可以看到1.gif里的php代碼被iis解析執行了。 那么“黑客”在具體利用網站漏洞的時候,先可以通過網站提供的圖片上傳功能(也可以是其他的手段)上傳一個包含了惡意PHP代碼的圖片文件。然后通過上面描敘方法,讓iis解析執行任意惡意的php代碼,控制網站及主機,最終導致網站被“脫庫”、“掛馬”、“植入非法seo鏈接”等等嚴重后果。
IIS7/IIS7.5解析漏洞的修復方案有如下幾個:
第1種方案:繼續使用FastCGI方式調用PHP,要解決這個安全問題可以在php.ini里設置 cgi.fix_pathinfo=0 ,修改保存后建議重啟iis(注意可能影響到某些應用程序功能)。
第2種方案:使用ISAPI的方式調用PHP。(注意:PHP5.3.10已經摒棄了 ISAPI 方式)
第3種方案:可以使用其他web服務器軟件,如apache等。