ЖУРНАЛ ХАКЕР

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

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


$mailprog='/usr/sbin/sendmail';

open (MAIL, "|$mailprog $to");

................

тело письма

................

close (MAIL);

По задумке программиста в переменной $to (на деле это значение получается из HTML формы) должен храниться адрес получателя. В общем, все шоколадно, но ничто не мешает поменять значение с какого-нибудь hotguy@from.ru на hotguy@from.ru ls -l >data.txt. Ведь в самом скрипте, обработка переменной с e-mail'ом получателя отсутствовала, как таковая.

Именно так, ты создашь файл, в котором будет храниться содержимое каталога. С наличием предложенного глюка, можно выполнять команды с правами данного пользователя. Выход из сложившейся ситуации, как обычно прост, если поставить вместо адресата параметр -t, то это укажет программе sendmail, что адрес получателя, находится в теле письма:

$mailprog='/usr/sbin/sendmail';

open (MAIL, "|$mailprog -t");

print MAIL "Content-Type: text/plain;\n";

print MAIL "To: $mail\n";................

................

тело письма

................

close (MAIL);

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

Этот баг, имхо, вообще один из самых распространенных, ведь почти все сервера, где висят perl программы, работают на *nix системах, поэтому, часто, для рассылки и используют программу sendmail.

Теперь поговорим о несанкционированном чтение файлов сайта. Баг в скриптах очень схож с ошибкой, выполнения любой команды на сервере. Многие программисты удаляют из имени файла знаки |, ;, но забывают убрать символы "., /," поэтому взломщик получает возможность лазать по всему сайту.

Найденная ошибка встречается реже, чем предыдущая, но она есть :). Чаще всего она (МНЕ НУЖНА ОНА, я сошла с ума =) находится в форумах. Ведь как обычно устроен форум? Для каждого сообщения выделяется свой файл. Что же делаем мы, просто поменяем название выделенного файла на нужное нам филе.

Примерный URL для просмотра сообщения:

http://www.some.ru/cgi-bin/forum.cgi?w=read&mes=340

Его заменим на: http://www.some.ru/cgi-bin/forum.cgi?w=read&mes=forum.cgi

Если программист не сделал проверку входных данных, то в браузере высветится исходный код форума. Таким способом некоторые воруют исходники программ, когда нельзя взломать сам сайт :).

Этот глюк не так страшен, если сам сайт бесполезный, но что будет,

когда глюканавтика находятся в онлайн магазинах? Например, в cart32, ошибка в программе схожа - чтение любого файла, результат - множество кредитных карточек.

Бороться с полученной ошибкой просто. Например, в случае с форумом, нужно просто удалить все символы кроме чисел. Если же нужно передать имя файла, который содержит английские символы, то удаляй так:

$filename=~s/[^a-z0-9\.]//g;

А вообще передавать имена файлов через HTML форму - признак дурного тона, лучше хранить хэш файл, в котором некоторые значения соответствуют именам файлов.

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

1999-2000 ©