Microsoft IIS CGI文件名错误解码漏洞发布时间:2001-05-16 更新时间:2001-05-16 严重程度:高 威胁程度:普通用户访问权限 错误类型:输入验证错误 利用方式:服务器模式 CVE(CAN) ID:CVE-2001-0333 受影响系统 受影响的软件及系统:详细描述 <*Microsoft IIS CGI Filename Decode Error Vulnerability *> <keyword: CGI Filename Decode Error> 综述: ===== 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存在一个虚拟可执行目录(scripts),并且它与 windows系统在同一驱动器上。那么提交类似下列请求: http://TARGET/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\ 就会列出C:\的根目录。 当然,对于'/'或者'.'做变换同样可以达到上面的效果。 例如:"..%252f", ".%252e/"... 注意:攻击者只能以IUSER_machinename用户的权限执行命令。 解决方案 临时解决方法: =========== 1、如果不需要可执行的CGI,可以删除可执行虚拟目录,例如 /scripts等等。 2、如果确实需要可执行的虚拟目录,建议将可执行虚拟目录单独放在一个分区 3、将所有可被攻击者利用的命令行工具移到另外一个目录中并禁止GUEST组 访问。 您可以在下列地址看到微软安全公告的详细内容: http://www.microsoft.com/technet/security/bulletin/ms01-026.asp 补丁程序可以在下列地址下载: . Microsoft IIS 4.0: http://www.microsoft.com/Downloads/Release.asp?ReleaseID=29787 . Microsoft IIS 5.0: http://www.microsoft.com/Downloads/Release.asp?ReleaseID=29764 相关信息 Nsfocus安全小组(security@nsfocus.com) 文章摘自:http://www.nsfocus.com |