精华区 [关闭][返回]

当前位置:月光软件>>讨论区精华>>〖电脑技术〗>>● WinNT系统>>Connectivity>>网络服务>>IIS服务>>WEB服务CGI接口漏洞分析

主题:WEB服务CGI接口漏洞分析
发信人: yurer(孤星)
整理人: ipaq(2001-05-24 21:23:01), 站内信件
WEB服务CGI接口漏洞分析


  分析了一段时间的CGI接口,感觉各种WEB服务器对一些变量好象不是很统一,也没明白一些
安全要求,所以造成一些安全上的漏洞,在此作一简要分析。因为是根据个人的一些理解分析,
所以错误在所难免,还望大家批评指正。

  主要问题是几个变量PATH_INFO、PATH_TRANSLATED、SCRIPT_NAME的处理不统一。下面
是MSDN的关于这几个变量的说明,为了清楚,也把相关两个一起列出,另两个变量这两种WEB
服务器应该说都是正确处理。

PATH_INFO Additional path information, as given by the client. This comprises the 
trailing part of the URL after the script name but before the query string (if any). 
PATH_TRANSLATED This is the value of PATH_INFO, but with any virtual path name 
expanded into a directory specification. 
QUERY_STRING The information which follows the ? in the URL that referenced this script. 
REQUEST_METHOD The HTTP request method. 
SCRIPT_NAME The name of the script program being executed. 

  为了方便说清楚,也好让大家有个印象,举一个具体实例,看看这几个变量到底是指的
什么吧。比如有映射.php,那么请求:

  “GET /test.php/aaa/bbb?cgivartest HTTP/1.1”,REQUEST_METHOD=GET;QUERY_STRING=cgivartest;这是不容质疑的,那另三个变量是什么呢?
个人觉得MSDN里面的定义还比较准确,就是上面那几个定义。照那么说来应该

SCRIPT_NAME=test.php,这是那个要执行(也可能是被别的程序解释执行)的程序,
PATH_INFO=/aaa/bbb,“script name”之后“query string”之前,假如WEB主目录是
“d:\inetpub\wwwroot”,那么PATH_TRANSLATED=d:\inetpub\wwwroot\aaa\bbb。

  但实际情况是如何的呢,让我们来看看。用常用的两种WEB服务器建立两个环境,

以做对比,看看这两种WEB服务器的处理。

环境:

  1、win2000+apache1.3.14+php4;
  2、win2000+iis5.0+php4;

  具体配置我就不说了,相信大家都是配置高手,不用我在此多费口舌。

  在每个WEB服务里面建立一个文件test.php,文件内容如下:
phpinfo();
?>
  大家一看就知道是干什么,简单建立这么一个文件,方便我们查看一些WEB变量。

  1、apache下直接用php.exe加载;

http://192.168.8.48/php/php.exe/abcde.php/aa/..%5c../test.php?cgivartest

  得到:

Environment
Variable Value 

SCRIPT_FILENAME d:/php4/php.exe 
GATEWAY_INTERFACE CGI/1.1 
SERVER_PROTOCOL HTTP/1.1 
REQUEST_METHOD GET 
QUERY_STRING cgivartest 
REQUEST_URI /php/php.exe/abcde.php/aa/..%5c../test.php?cgivartest 
SCRIPT_NAME /php/php.exe/abcde.php/aa/..\.. 
PATH_INFO /abcde.php/aa/../../test.php 
PATH_TRANSLATED d:\program files\apache group\apache\htdocs\test.php 



  2、apache下用映射加载:

http://192.168.8.48/AB.PHP/AA/..%5C../test.php?cgivartest

  得到:

Environment
Variable Value 

SCRIPT_FILENAME d:/php4/php.exe 
GATEWAY_INTERFACE CGI/1.1 
SERVER_PROTOCOL HTTP/1.1 
REQUEST_METHOD GET 
QUERY_STRING cgivartest 
REQUEST_URI /AB.PHP/AA/..%5C../test.php?cgivartest 
SCRIPT_NAME /php/php.exe/AB.PHP/AA/..\.. 
PATH_INFO /AB.PHP/AA/../../test.php 
PATH_TRANSLATED d:\program files\apache group\apache\htdocs\test.php 

  3、iis下cgi接口加载:

http://192.168.8.48:81/abc.php/aa/..%c1%1c../test.php?cgivartest

  得到:

Environment
Variable Value 

GATEWAY_INTERFACE CGI/1.1 
PATH_INFO /abc.php/aa/..\../test.php 
PATH_TRANSLATED d:\inetpub\wwwroot\abc.php\aa\..\..\test.php 
QUERY_STRING cgivartest 
REQUEST_METHOD GET 
SCRIPT_NAME /abc.php 
SERVER_PROTOCOL HTTP/1.1 

[关闭][返回]






转载请注明:转载自 月光程序代码网 [ http://www.moon-soft.com ]