ЖУРНАЛ ХАКЕР

PERL, CGI, дарки, баги, взломы

Xakep, номер #029, стр. 029-050-2


С рождением глюка, можно поздравить самого Perl'а. Щютка :)

На самом деле, это все проделки неправильных программистов: если при открытии файла, в конце его имени поставить значок |, то выполнится команда (!!!). Как раз на этом глюке и базируются многие deface'ы, вспомнить хотя бы старый взлом hack-crack.com, когда сайт был взломан через кривой скрипт голосования tigvote.cgi. Что ж, рассмотрим, как ошибка выглядит в программах. Вот пример кода, на первый взгляд совсем безобидного:

&parse_form;

$name=$FORM{dataname};

open (DATA, $name);

while (<DATA>){

print $_;

}

Как видишь, изначально программа была задумана, как viewer файлов: из формы передается имя файла, а скрипт уже выдаёт его содержимое. А что будет, если передать не какое-нибудь vasya.txt, а ls|? Тогда вместо файла ls, ты увидишь содержимое каталога. Это конечно безобидная команда, хуже становится в таком случае: rm -r *|. Не смейся, действительно произойдет удаление всех файлов, относительно текущей директории.

Возможно, тебя переполнят эмоции: все это вздор, чепуха, быть такого не может, уже давно все сайты были бы по 10 раз взломаны. Конечно, ты частично прав, если все будут держать скрипты с предложенными ошибками, то защита у серверов быдет нулевая. Но надо жить реальностью: далеко не все кодеры такие олухи. Все нормальные люди защищаются всего одной строчкой:

$name=~s/\\\/\|//g;

Теперь взломщики не смогут выполнять команды. Вот тебе мой совет, если ты собираешься писать CGI'шки: всегда проверяй входную информацию, и отсеивай ненужное.

Чтобы ты удостоверился на 100%, расскажу, как когда-то давно была взломана служба гостевых книг. При регистрации на сайте, логин для гостевухи, ты выбираешь сам, в моем случае это было cutter. Так уж сложилось, что увидеть сорсы службы мне никак не светило, но поглумиться над этим сервером, ужас как хотелось. И что оказалось? Логин оказался именем файла, так что я просто ввел: ;cp view.cgi ../view.txt|. Таким образом, я выполнил команду, которая скопировала скрипт (файл view.cgi отвечал за просмотр гостевой книги) из директории cgi-bin в каталог, на один уровень выше, и теперь у меня была возможность получить все исходные коды гостевой службы. Конечно, я мог все удалить с сервера, но идея мне показалось негуманной ;).

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

Cтарушка sendmail

В последнее время многие вебмастеры лепят на подконтрольных сайтах, рассылки новостей. И все хорошо, если бы они пользовались службами вроде Subscribe.Ru или MailList.Ru, но они ставят свои скрипты, либо используют программы с какого-нибудь CGI архива. Не подумай: я совсем не против разработки своего программного обеспечения, но именно в таких "самопальных" программах обычно и находятся глюки. Как правило, для отправки писем используют программу sendmail, так как это просто и удобно. Вот небольшой пример кода, который отправляет письмо:

Назад на стр. 029-050-1  Содержание  Вперед на стр. 029-050-3

1999-2000 ©