受影響的軟件及系統(tǒng):
==================
- Microsoft IIS 4.0
- Microsoft IIS 5.0
不受影響的軟件及系統(tǒng):
===================
- Windows IIS 4.0 (sp6/sp6a 沒有安裝其他新的hotfix)
綜述:
=====
NSFOCUS安全小組發(fā)現(xiàn)微軟IIS 4.0/5.0在處理CGI程序文件名時(shí)存在一個(gè)安全
漏洞,由于錯(cuò)誤地對(duì)文件名進(jìn)行了兩次解碼,攻擊者可能利用這個(gè)漏洞執(zhí)行任意
系統(tǒng)命令。
漏洞分析:
==========
IIS在加載可執(zhí)行CGI程序時(shí),會(huì)進(jìn)行兩次解碼。第一次解碼是對(duì)CGI文件名進(jìn)行http
解碼,然后判斷此文件名是否為可執(zhí)行文件,例如檢查后綴名是否為".exe"或".com"
等等。在文件名檢查通過之后,IIS會(huì)再進(jìn)行第二次解碼。正常情況下,應(yīng)該只對(duì)該
CGI的參數(shù)進(jìn)行解碼,然而,IIS錯(cuò)誤地將已經(jīng)解碼過的CGI文件名和CGI參數(shù)一起進(jìn)行
解碼。這樣,CGI文件名就被錯(cuò)誤地解碼了兩次。
通過精心構(gòu)造CGI文件名,攻擊者可以繞過IIS對(duì)文件名所作的安全檢查,例如對(duì)"../"
或"./"的檢查,在某些條件下,攻擊者可以執(zhí)行任意系統(tǒng)命令。
例如,對(duì)于''這個(gè)字符,正常編碼后是%5c。這三個(gè)字符對(duì)應(yīng)的編碼為:
'%' = %25
'5' = %35
'c' = %63
如果要對(duì)這三個(gè)字符再做一次編碼,就可以有多種形式,例如:
%255c
%%35c
%%35%63
%25%35%63
...
因此,".."就可以表示成"..%255c"或"..%%35c"等等形式。
在經(jīng)過第一次解碼之后,變成"..%5c"。IIS會(huì)認(rèn)為這是一個(gè)正常的字符串,
不會(huì)違反安全規(guī)則檢查。而在第二次被解碼之后,就會(huì)變成".."。因此
攻擊者就可以使用".."來進(jìn)行目錄遍歷,執(zhí)行web目錄之外的任意程序。
漏洞測(cè)試:
例如,如果TARGET存在一個(gè)虛擬可執(zhí)行目錄(scripts),并且它與
windows系統(tǒng)在同一驅(qū)動(dòng)器上。那么提交類似下列請(qǐng)求:
http://TARGET/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:
就會(huì)列出C:的根目錄。
當(dāng)然,對(duì)于'/'或者'.'做變換同樣可以達(dá)到上面的效果。
例如:"..%252f", ".%252e/"...
注意:攻擊者只能以IUSER_machinename用戶的權(quán)限執(zhí)行命令。
臨時(shí)解決方法:
1、如果不需要可執(zhí)行的CGI,可以刪除可執(zhí)行虛擬目錄,例如 /scripts等等。
2、如果確實(shí)需要可執(zhí)行的虛擬目錄,建議將可執(zhí)行虛擬目錄單獨(dú)放在一個(gè)分區(qū)
3、將所有可被攻擊者利用的命令行工具移到另外一個(gè)目錄中并禁止GUEST組訪問。