«Техника сетевых атак»

Вид материалаКраткое содержание

Содержание


VIRTUAL SHOP's "Hamburg"
VIRTUAL SHOPs 'Hamburg'
Wrong Card Number
Рисунок 025 Импровизированный виртуальный магазин
Рисунок 026 Просмотр содержимого странички в виде HTML
Подобный материал:
1   ...   37   38   39   40   41   42   43   44   ...   51

VIRTUAL SHOP's "Hamburg"
















    • #!/usr/local/bin/perl
    • print "Content-type: text/html\n\n";
    • print " VIRTUAL SHOPs 'Hamburg'\n";
    • print "

      VIRTUAL SHOPs 'Hamburg'



      \n";

    • parseparameters();
    • $Name=$parameters{'name'};
    • $Card=$parameters{'card'};
    • $Passwd="None";
    • $file="users.dat";

    • open(F,"<$file") || die "File $file not exist!\n";

    • while($f=)
    • {
    • $tmp=;
    • if ("$Name\n"=~$f)
    • {
    • if ($tmp!~$Card)
    • {
    • print "

      Wrong Card Number


      ";
    • die;
    • }

    • $Passwd=$tmp;
    • }
    • }

    • if ($Passwd=~/None/)
    • {
    • open(F,">>$file");
    • print F "$Name\n";
    • print F "$Card\n";
    • close(F);
    • print "New Buyer!
      \n";
    • }

    • print <
    • Buyer:$Name


    • Card:$Card





  • Product ID
  • Product Name
  • Purchase
  • Y2ZA
  • Mice
  • 1 dollar
  • ZG6T
  • Mice Pad
  • 5 dollar
  • 3 FZ9Y
  • CD-ROM RACK
  • 7 dollar





  • EOF



  • sub parseparameters(;$) {
  • local $_ = shift || $ENV{"REQUEST_METHOD"};
  • my $buffer;

  • $buffer = $ENV{"QUERY_STRING"} if (/[Gg][Ee][Tt]$/);
  • read(STDIN, $buffer, $ENV{"CONTENT_LENGTH"}) if (/[Pp][Oo][Ss][Tt]$/);

  • @_ = split(/&/, $buffer);
  • for (@_) {
  • tr/+/ /;
  • s/%(..)/pack("c",hex($1))/ge;
  • (my $key, my $value) = split(/=/, $_);
  • $parameters{lc($key)} = $value;
  • }
  • }


  • Если ввести имя пользователя и код кредитной карточки302 (например, “Kris Kaspersky; oc674-ui56”) и нажать кнопку “Welcome”, то сервер поприветствует нового покупателя и предложит ввести код товара для покупки. На первый взгляд все работает нормально…




    Рисунок 025 Импровизированный виртуальный магазин



    Для того чтобы совершить покупку от чужого имени требуется знать номер кредитной карточки, который известен только ее обладателю. Но в данном случае сервер хранит информацию обо всех посетивших его пользователях, и существует возможность «подсунуть» чужое имя взамен своего. Для изучения содержимого странички, необходимо выбрать в меню браузера пункт «Просмотри в виде HTML»




    Рисунок 026 Просмотр содержимого странички в виде HTML



    Появится следующий код, содержащий, по крайней мере, одну грубейшую ошибку, которая позволяет осуществлять покупки от имени чужих лиц.

    • Product ID
    • Product Name
    • Purchase

    • Y2ZA
    • Mice
    • 1 dollar

    • ZG6T
    • Mice Pad
    • 5 dollar

    • 3 FZ9Y
    • CD-ROM RACK
    • 7 dollar







    Алгоритм работы магазина в общих чертах следующий: при нажатии на кнопку «Buy» вызывается скрипт “buy.pl”, которому передаются два параметра – имя пользователя и код покупаемого товара. А номер кредитной карточки в передаваемых параметрах отсутствует. Очевидно, скрипт “buy.pl” самостоятельно извлекает его из базы, используя имя покупателя. Поскольку пользователь не может модифицировать файлы, хранящиеся на сервере, такая схема защиты на первый взгляд кажется вполне надежной. Но что мешает злоумышленнику сохранить страничку на свой локальный диск и, отредактировав по своему желанию, запустить ее оттуда?

    Чтобы не нарушить работоспособности скрипта, необходимо все относительные ссылки заменить абсолютными, то есть с полным указанием протокола, имени узла и пути к файлу. Исправленный вариант может выглядеть так (на диске, прилагаемом к книге, он находится в файле “/SRC/form_hack.php)303:

    • ...