Техника сетевых атак
Шрифт:
Например, если набрать в командой строке “perl xxx|dir”, где ‘xxx’ имя любого, даже не обязательно существующего, скрипта, произойдет следующее: сперва, интерпретатором будет предпринята попытка запустить файл ‘xxx’, затем, независимо от успешности предыдущей операции, будет выполнена команда ‘dir’.
Врезка «замечание»
Выполнить любую команду Perl, например, ‘exec’ можно с помощью ключа командной строки, ‘-e’, о чем сообщается даже в короткой справке, выдаваемой при указании ключа ‘-h’ в командной строке.
Ниже приведен пример (на диске, прилагаемом к книге, он находится в файлах “/SRC/form.htm” и “/SRC/form.pl”) импровизированного виртуального магазина, занимающегося продажей товара через Internet c оплатой по кредитным карточкам. Перед первой покупкой посетителю (как это заведено в большинстве систем электронной торговли) необходимо зарегистрироваться - ввести свое имя и номер кредитной карты. Здесь не будет обсуждаться вопрос контроля достоверности представленной информации (это тема для отдельного разговора). Скрипт просто запоминает введенные сведения, и сверят всякий раз при загрузке.
· «HTML»
· «HEAD»
· «TITLE»VIRTUAL SHOP's "Hamburg"«/title»
· «META charset=windows-1251»
· «/HEAD»
·
· «BODY»
· «H1»«CENTER»VIRTUAL SHOP's "«U»Hamburg«/U»"«/CENTER»
· «HR»
· «/H1»
· «CENTER»
· «form method="POST" action="form.pl"»
· «br»Name:
· «BR»
· «input type="text" size="30" maxlength="300" name="name" value="Vasia"»
· «BR»
· «br»Credit card number:
· «BR»
· «input type="text" size="30" maxlength="30" name="card" value="OC271191"»
· «BR»
· «BR»
· «input type="submit" value="Welcome"»
· «/form»
· «/div»
· «HR»
· «/body»
·
· «/html»
·
· #!/usr/local/bin/perl
· print "Content-type: text/html\n\n";
· print "«HEAD» «title»VIRTUAL SHOPs 'Hamburg'«/title»«/head»\n";
· print "«BODY» «H1»«CENTER»VIRTUAL SHOPs '«U»Hamburg«/U»'«/H1»«/CENTER»«HR»«BR»\n";
·
· parseparameters;
· $Name=$parameters{'name'};
· $Card=$parameters{'card'};
· $Passwd="None";
· $file="users.dat";
·
· open(F,"«$file") || die "File $file not exist!\n";
·
· while($f=«F»)
· {
· $tmp=«F»;
· if ("$Name\n"=~$f)
· {
· if ($tmp!~$Card)
· {
· print "«CENTER»«H1»Wrong Card Number«/H1»«HR»";
· die;
·}
·
· $Passwd=$tmp;
·}
·}
·
· if ($Passwd=~/None/)
· {
· open(F,"»$file");
· print F "$Name\n";
· print F "$Card\n";
· close(F);
· print "«B»New Buyer!«/B»«BR»\n";
·}
·
· print «EOF;
· Buyer:$Name
· «BR»
· Card:$Card
· «TABLE width=100% border=1»
· «TR»
· «TH»Product ID
· «TH»Product Name
· «TH»Purchase
· «TR»
· «TD»Y2ZA
· «TD»Mice
· «TD»1 dollar
· «TR»
· «TD»ZG6T
· «TD»Mice Pad
· «TD»5 dollar
· «TR»
· «TD»3 FZ9Y
· «TD»CD-ROM RACK
· «TD»7 dollar
· «/table»
· «HR»
· «CENTER»
· «form method="POST" action="buy.pl"»
· Product ID:
· «input type="text" size="30" maxlength="30" name="$Name"; value="Y2ZA"»
· «input type="submit" value="Buy"»
· «/form»
· EOF
·
·
·
· sub parseparameters(;$) {
· local $_ = shift || $ENV{"REQUEST_METHOD"};
· my $buffer;
·