Известный рассадник дырявых скриптов www.freecode.com изобилует примерами небезопасных скриптов. Не берите оттуда ничего. Рассмотрим несколько примеров:
Скрипт-менеджер рекламных объявлений
Это первый скрипт с www.freecode.com.
# First version 1.1
# Dan Bloomquist dan@lakeweb.net
Автор передаёт все параметры, с которыми был вызван скрипт в %DATA. Он не очищает '..', не очишает и нулевые байты. Итак, поглядим код...
#This sets the real paths to the html and lock files.
#It is done here, after the POST data is read.
#of the classified page.
$pageurl= $realpath . $DATA{ 'adPath' } . ".html";
$lockfile= $realpath . $DATA{ 'adPath' } . ".lock";
Используя 'adPath=/../../../../../etc/passwd%00' - мы можем указать $pageurl на файл с паролями. Посмотрим на $lockfile. Мы не можем использовать пайп для наших нужд - так как расширение (.html) добавляется в последнюю очередь.
#Read in the classified page
open( FILE,"$pageurl" ) || die "can't open to read
$pageurl: $!\n";
@lines= ;
close( FILE );
Тут в $pageurl заносится имя файла, коорый затем открывается. К счастью для автора, он немедленно окрывает $pageurl на запись. Итак, мы должны иметь права на запись в то, что, вообще-то пытаемся открыть на чтение. Это ограничивает наши возможности использования данной уязвимости, но это есть живой пример того, как сам того не зная, автор сильно связал нам руки в раскалывании серверов через его скрипт.
Весьма интересно открывается и мейлер.
#Send your mail out.
#
open( MAIL, "|$mailprog $DATA{ 'adEmail' }" )
|| die "can't open sendmail: $adEmail: $!\n";
Ох.. это мы видели уже сто раз. Не проверяются ни символы перенаправления потока данных, ни пайпы.. мы можем выполнить любую команду через это.
Так же я нашёл простенький логгер данных, которые пользователь вводит в веб-форму.
# flexform.cgi
# Written by Leif M. Wright
# leif@conservatives.net
Итак, входные данные передаются в %CONTENTS, и опять никакой поверки на подозрительные символы. Затем
$output = $basedir . $contents{'file'};
open(RESULTS, ">>$output");
Используя стандартный выход за пределы папки, куда нас посадили (/../../) , нам даже не придётся использовать нефильтрацию 0x00. Но что бы мы не открыли - файл открывается для дописывания, и поэтому мы должны иметь права на запись в тот файл, который пытаемся открыть. По этой же причине не сработает и pipe (|) bug.
Итак, на сегодня обзор недокументированных возможностей различных скриптов, и рассказы о том, как их сделать более безопасными, окочнены. Спасибо всем за внимание!
.rain.worest.puppy. [ADM/Wiretrip] rfp@wiretrip.net
Last-modified: Thu, 27 Jan 2000 16:40:27 GMT