Microsoft IIS CGI文件名錯誤解碼漏洞
受影響的軟件及系統:
==================
- Microsoft IIS 4.0
- Microsoft IIS 5.0
不受影響的軟件及系統:
===================
- Windows IIS 4.0 (sp6/sp6a 沒有安裝其他新的hotfix)
綜述:
=====
NSFOCUS安全小組發現微軟IIS 4.0/5.0在處理CGI程序文件名時存在一個安全
漏洞,由于錯誤地對文件名進行了兩次解碼,攻擊者可能利用這個漏洞執行任意
系統命令。
漏洞分析:
==========
IIS在加載可執行CGI程序時,會進行兩次解碼。第一次解碼是對CGI文件名進行http
解碼,然后判斷此文件名是否為可執行文件,例如檢查后綴名是否為".exe"或".com"
等等。在文件名檢查通過之后,IIS會再進行第二次解碼。正常情況下,應該只對該
CGI的參數進行解碼,然而,IIS錯誤地將已經解碼過的CGI文件名和CGI參數一起進行
解碼。這樣,CGI文件名就被錯誤地解碼了兩次。
通過精心構造CGI文件名,攻擊者可以繞過IIS對文件名所作的安全檢查,例如對"../"
或"./"的檢查,在某些條件下,攻擊者可以執行任意系統命令。
例如,對于'\'這個字符,正常編碼后是%5c。這三個字符對應的編碼為:
'%' = %25
'5' = %35
'c' = %63
如果要對這三個字符再做一次編碼,就可以有多種形式,例如:
%255c
%%35c
%%35%63
%25%35%63
...
因此,"..\"就可以表示成"..%255c"或"..%%35c"等等形式。
在經過第一次解碼之后,變成"..%5c"。IIS會認為這是一個正常的字符串,
不會違反安全規則檢查。而在第二次被解碼之后,就會變成"..\"。因此
攻擊者就可以使用"..\"來進行目錄遍歷,執行web目錄之外的任意程序。
漏洞測試:
==========
例如,如果TARGET存在一個虛擬可執行目錄(s),并且它與
windows系統在同一驅動器上。那么提交類似下列請求:
http://TARGET/s/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:
就會列出C:\的根目錄。
當然,對于'/'或者'.'做變換同樣可以達到上面的效果。
例如:"..%252f", ".%252e/"...
注意:攻擊者只能以IUSER_machinename用戶的權限執行命令。
臨時解決方法:
===========
1、如果不需要可執行的CGI,可以刪除可執行虛擬目錄,例如 /s等等。
2、如果確實需要可執行的虛擬目錄,建議將可執行虛擬目錄單獨放在一個分區
3、將所有可被攻擊者利用的命令行工具移到另外一個目錄中并禁止GUEST組
訪問。
關鍵字:虛擬目錄、IIS、CGI、驅動器
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解