[摘要]` & $ ! # ( ) [ ] : { } ’ " 每一个这种字符在shell中都起着特殊的作用。例如,假如你想利用finger来查询一台计算机并将结果存储到一个文件...
` & $
! # ( ) [ ] : {
} ’ "
每一个这种字符在shell中都起着特殊的作用。例如,假如你想利用finger来查询一台计算机并将结果存储到一个文件中,你可以在命令行中如下输入:
finger @fake.machine.org > results
这会使用finger查询主机fake.machine.org并将查询结果保存到一个文本文 件results中。这个>字符在这里是一个重定向符。如果你要实际地使用>字符——例如,你想将它回显到屏幕上——你将需要在这个字符前加一个反斜杠。举个例子,下面将向屏幕输出一个符号>:
echo \>
这被称为转义字符(escaping or sanitizing the character string)。
hacker是怎样利用这个作为他(她)的优势的?观察以下程序3中用perl编写的finger程序。这个程序所做的是允许用户查询一个用户和一台主机的详细信息,并且,这个CGI可以查询用户并显示结果。
[page_break]程序3. finger.cgi.
#!/usr/local/bin/perl
# finger.cgi - an unsafe finger gateway
require ’cgi-lib.pl’;
print &PrintHeader;
if (&ReadParse(*in)) {
print "\n";
print `/usr/bin/finger $in`;
print "\n";
}
else {
print " \n";
print "\n";
print "\n\n";
print "Finger Gateway\n";
print "\n";
print "User@Host: \n";
print "\n";
print "\n";
print " \n";
}
乍一看,这个程序好象没有什么害处。因为是用Perl编写的,不会有bufferoverflow的危险。我使用了finger的完全路径,这样gateway不会被伪造的finger程序所欺骗。如果输入是一个不合适的格式,那么gateway将返回一个错误而不会被人利用。
但是,如果我尝试如下的输入会怎样呢(如图1所示)
nobody@nowhere.org;/bin/rm -rf /
FINGER GATEWAY
___________________________________
User@Host:
关键词:CGI的安全(二)