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规则详解