小
小鱼巫师
受影响的软件及系统:
==================
- Microsoft IIS 4.0
- Microsoft IIS 5.0
综述:
=====
NSFOCUS安全小组发现微软IIS 4.0/5.0在处理CGI程序文件名时存在一个安全
漏洞,攻击者可能利用这个漏洞查看系统文件或者执行任意系统命令。
漏洞分析:
==========
Microsoft IIS 4.0/5.0在处理CGI程序(.exe, .pl, .php等等)时, 对用户请求
的CGI程序名没有做完整的安全检查。如果文件名中包含一个特殊字符,可能导
致IIS错误地打开或者执行文件。
1. 如果用户构造一个特殊的HTTP请求,要求IIS执行一个可执行目录下的".exe"
或者".com"后缀结尾的程序。IIS会试图加载这个程序,加载时会首先检查这个
文件是否存在以及此文件的类型。攻击者通过在文件名中添加一个特殊字符-双引
号,导致加载程序错误地检查了另外一个不同的文件。如果此文件满足以下条件:
(1) 此文件存在
(2) 此文件是一个批处理文件(".bat"文件)或者".cmd"文件
(3) 文件是一个大于零字节的纯文本文件
IIS会自动调用"cmd.exe"对其进行解释。初始文件名的其他部分被当作批处理
文件的参数传递给"cmd.exe",攻击者可以使用"&"等符号来执行任意命令。
2. 如果系统中安装了一些脚本解释器(php.exe,perl.exe等等)以及映射,当用
户要求执行对应的CGI脚本程序(.php3, .pl等等)时,IIS会将用户提供的文件
名交给脚本解释器解释。如果攻击者在文件中使用某些特殊字符,将使该解释
器打开一个WEB目录以外的文件,依赖于解释器的处理方式,攻击者可能获取文
件的部分或者全部内容。
漏洞测试:
==========
1. 执行任意命令
在一个可执行目录下创建一个批处理文件: test.bat. 它的内容可以是任意
的, 例如:"abc". 提交下列URL:
http://site/scripts/test.bat"+&+dir+c:/+.exe (IIS 5.0)
或者
http://site/scripts/test.bat"+&+dir+c:/+.com (IIS 5.0)
将会得到C:\目录的列表。
由于IIS会在可执行文件名前后增加一个双引号,因此,在交给"CMD.exe"执
行的时候就类似下列格式:
CMD.exe "D:\interpub\scripts\test.bat" & dir C:/ .exe"
因此攻击者可能以IUSER_machinename用户的身份执行任意命令,而且并不
要求可执行虚拟目录与"WINNT\system32\CMD.exe"在同一个驱动器上.
对于IIS 4.0 <SP6以及那些打了MS00-057中补丁的IIS 4.0/5.0,可以使用下列
URL:
http://site/scripts/test.bat"+"&+dir+c:/+.exe
对于IIS 4.0 + SP6/SP6a, 可以结合"%c1%1c"的漏洞:
http://site/scripts/test.bat"+"+&+dir+c:/+/..%c1%1c..%c1%1c
..%c1%1c..%c1%1cwinnt/system32/route.exe
("winnt/system32/route.exe"可以用任意一个存在的可执行程序(.com/
.exe)名代替)
注意:将要执行的命令放到参数部分也是可以的,例如:
http://site/scripts/a.bat"+".exe?+&+dir
微软开始提供的补丁没有考虑这一情况,我们推荐您尽快使用微软重新
发布的新补丁。
尽管缺省情况下IIS的可执行目录中并不包含批处理文件,但是攻击者仍然
有可能利用此漏洞。考虑以下两种情况:
(1) 如果系统管理员安装了某个CGI应用程序,允许用户在可执行目录下创
建文件。例如某些计数器程序,允许用户创建自己的数据文件,尽管用
户不能控制数据文件的内容,但是可以指定其文件名。因此攻击者就可
以利用这个漏洞来执行命令。
(2) MSSQL或者Perl软件包都自带一些批处理文件。如果系统管理员安装了
MSSQL或者Perl,并且与IIS某个虚拟可执行目录在同一个驱动器,那么
攻击者也结合"%c1%1c"的漏洞来进行攻击.
(参见NSFOCUS安全公告 SA2000-06:
http://www.nsfocus.com/sa-06.htm)
例如:MSSQL7缺省安装后其\install目录下会有两个批处理文件:
D:\mssql7\install\pubimage.bat
D:\mssql7\install\pubtext.bat
(假设MSSQL7装在D:\)
如果IIS的"\scripts"目录也被映射到"D:\interpub\scripts",那么使用
如下的URL也可以执行任意命令:
http://site/scripts/..%c1%1c../..%c1%1c../mssql7/install/pubtext
.bat"+&+dir+c:\+.exe
另外,如果网站允许用户上传".bat"或者".cmd"后缀的文件,同样可能遭
受此种攻击。
2. 泄漏文件内容
如果系统安装了php.exe(PHP3),攻击者可能看到某些WEB目录以外的文件:
http://target/."./."./winnt/win.ini%20.php3
临时解决方法:
===========
1. 确保没有不必要的批处理文件和".cmd"文件,并保证批处理文件和".cmd"文件
不与任何的虚拟可执行目录在同一个驱动器上
2. 设置CMD.exe的访问权限,禁止guests组访问CMD.exe
厂商状态:
==========
我们于2000年10月20日将此问题通知微软。
微软已就此发布了一个安全公告(MS00-086) 以及相应补丁。
2000年11月21日,微软重新发布了MS00-086以及新的补丁。
您可以在下列地址看到微软安全公告的详细内容:
http://www.microsoft.com/technet/security/bulletin/ms00-086.asp
补丁程序可以在下列地址下载:
. Internet Information Server 4.0:
http://www.microsoft.com/ntserver/nts/downloads/critical/q277873
. Internet Information Services 5.0:
http://www.microsoft.com/Windows2000/downloads/critical/q277873
附加信息:
==========
通用漏洞批露(Common Vulnerabilities and Exposures)组织CVE已经为此问题
分配了一个候选名 CAN-2000-0886。此名字是为了收录进CVE列表做候选之用,
(http://cve.mitre.org)CVE列表致力于使安全问题的命名标准化。候选名在被
正式加入CVE列表之前可能会有较大的变化。
==================
- Microsoft IIS 4.0
- Microsoft IIS 5.0
综述:
=====
NSFOCUS安全小组发现微软IIS 4.0/5.0在处理CGI程序文件名时存在一个安全
漏洞,攻击者可能利用这个漏洞查看系统文件或者执行任意系统命令。
漏洞分析:
==========
Microsoft IIS 4.0/5.0在处理CGI程序(.exe, .pl, .php等等)时, 对用户请求
的CGI程序名没有做完整的安全检查。如果文件名中包含一个特殊字符,可能导
致IIS错误地打开或者执行文件。
1. 如果用户构造一个特殊的HTTP请求,要求IIS执行一个可执行目录下的".exe"
或者".com"后缀结尾的程序。IIS会试图加载这个程序,加载时会首先检查这个
文件是否存在以及此文件的类型。攻击者通过在文件名中添加一个特殊字符-双引
号,导致加载程序错误地检查了另外一个不同的文件。如果此文件满足以下条件:
(1) 此文件存在
(2) 此文件是一个批处理文件(".bat"文件)或者".cmd"文件
(3) 文件是一个大于零字节的纯文本文件
IIS会自动调用"cmd.exe"对其进行解释。初始文件名的其他部分被当作批处理
文件的参数传递给"cmd.exe",攻击者可以使用"&"等符号来执行任意命令。
2. 如果系统中安装了一些脚本解释器(php.exe,perl.exe等等)以及映射,当用
户要求执行对应的CGI脚本程序(.php3, .pl等等)时,IIS会将用户提供的文件
名交给脚本解释器解释。如果攻击者在文件中使用某些特殊字符,将使该解释
器打开一个WEB目录以外的文件,依赖于解释器的处理方式,攻击者可能获取文
件的部分或者全部内容。
漏洞测试:
==========
1. 执行任意命令
在一个可执行目录下创建一个批处理文件: test.bat. 它的内容可以是任意
的, 例如:"abc". 提交下列URL:
http://site/scripts/test.bat"+&+dir+c:/+.exe (IIS 5.0)
或者
http://site/scripts/test.bat"+&+dir+c:/+.com (IIS 5.0)
将会得到C:\目录的列表。
由于IIS会在可执行文件名前后增加一个双引号,因此,在交给"CMD.exe"执
行的时候就类似下列格式:
CMD.exe "D:\interpub\scripts\test.bat" & dir C:/ .exe"
因此攻击者可能以IUSER_machinename用户的身份执行任意命令,而且并不
要求可执行虚拟目录与"WINNT\system32\CMD.exe"在同一个驱动器上.
对于IIS 4.0 <SP6以及那些打了MS00-057中补丁的IIS 4.0/5.0,可以使用下列
URL:
http://site/scripts/test.bat"+"&+dir+c:/+.exe
对于IIS 4.0 + SP6/SP6a, 可以结合"%c1%1c"的漏洞:
http://site/scripts/test.bat"+"+&+dir+c:/+/..%c1%1c..%c1%1c
..%c1%1c..%c1%1cwinnt/system32/route.exe
("winnt/system32/route.exe"可以用任意一个存在的可执行程序(.com/
.exe)名代替)
注意:将要执行的命令放到参数部分也是可以的,例如:
http://site/scripts/a.bat"+".exe?+&+dir
微软开始提供的补丁没有考虑这一情况,我们推荐您尽快使用微软重新
发布的新补丁。
尽管缺省情况下IIS的可执行目录中并不包含批处理文件,但是攻击者仍然
有可能利用此漏洞。考虑以下两种情况:
(1) 如果系统管理员安装了某个CGI应用程序,允许用户在可执行目录下创
建文件。例如某些计数器程序,允许用户创建自己的数据文件,尽管用
户不能控制数据文件的内容,但是可以指定其文件名。因此攻击者就可
以利用这个漏洞来执行命令。
(2) MSSQL或者Perl软件包都自带一些批处理文件。如果系统管理员安装了
MSSQL或者Perl,并且与IIS某个虚拟可执行目录在同一个驱动器,那么
攻击者也结合"%c1%1c"的漏洞来进行攻击.
(参见NSFOCUS安全公告 SA2000-06:
http://www.nsfocus.com/sa-06.htm)
例如:MSSQL7缺省安装后其\install目录下会有两个批处理文件:
D:\mssql7\install\pubimage.bat
D:\mssql7\install\pubtext.bat
(假设MSSQL7装在D:\)
如果IIS的"\scripts"目录也被映射到"D:\interpub\scripts",那么使用
如下的URL也可以执行任意命令:
http://site/scripts/..%c1%1c../..%c1%1c../mssql7/install/pubtext
.bat"+&+dir+c:\+.exe
另外,如果网站允许用户上传".bat"或者".cmd"后缀的文件,同样可能遭
受此种攻击。
2. 泄漏文件内容
如果系统安装了php.exe(PHP3),攻击者可能看到某些WEB目录以外的文件:
http://target/."./."./winnt/win.ini%20.php3
临时解决方法:
===========
1. 确保没有不必要的批处理文件和".cmd"文件,并保证批处理文件和".cmd"文件
不与任何的虚拟可执行目录在同一个驱动器上
2. 设置CMD.exe的访问权限,禁止guests组访问CMD.exe
厂商状态:
==========
我们于2000年10月20日将此问题通知微软。
微软已就此发布了一个安全公告(MS00-086) 以及相应补丁。
2000年11月21日,微软重新发布了MS00-086以及新的补丁。
您可以在下列地址看到微软安全公告的详细内容:
http://www.microsoft.com/technet/security/bulletin/ms00-086.asp
补丁程序可以在下列地址下载:
. Internet Information Server 4.0:
http://www.microsoft.com/ntserver/nts/downloads/critical/q277873
. Internet Information Services 5.0:
http://www.microsoft.com/Windows2000/downloads/critical/q277873
附加信息:
==========
通用漏洞批露(Common Vulnerabilities and Exposures)组织CVE已经为此问题
分配了一个候选名 CAN-2000-0886。此名字是为了收录进CVE列表做候选之用,
(http://cve.mitre.org)CVE列表致力于使安全问题的命名标准化。候选名在被
正式加入CVE列表之前可能会有较大的变化。