ОБЗОР БАЖНЫХ CGI

легко и быстро

Спецвыпуск Xakep, номер #022, стр. 022-020-1


uUcp (uucp@xakep.ru)

Дырявые GGI`шки – это то место, через которое делается 99% всех дефейсов. Админ может обнастроиться со своим файрволом до состояния, близкого к оргазму, закрыть все ненужные порты, зарезать все протоколы, кроме HTTP (иначе web-сервак не будет фурычить), обставиться NIDS (Network Intrusion Detection System) и загеморроиться черт знает как еще, но стоит ему положить в /cgi-bin хотя бы одну дырявую CGI`шку, и вся его работа полетит коту под хвост. А утром, явившись со страшного бодуна на работу (да, админы они такие ;)), он увидит какую-нибудь "Owned by Hax0r. Fuck you!". И хорошо, что я не админ какого-нибудь вэб-сервера, потому что я не знаю нормального решения этой проблемы...

Писать все cgi самому? Чревато большим количеством дыр и перспективой "Owned by...", так как чтоб писать безопасные cgi-скрипты, надо заниматься этим постоянно. Нельзя просто так прийти, разобраться с Perl, сказать "Я крутой админ!" и начать писать секюрный CGI`шки. Их могут писать только профессиональные Perl-кодеры.

Юзать cgi, написанный профессиональными Perl-кодерами? Хех, тоже чревато. Когда в такой cgi находится хоть одна ошибка, об этом немедленно узнает весь инет, и все вэб-серваки, на которых он заюзан, послушно раздвигают ноги. Когда пишешь cgi сам, есть хоть шанс отвадить тех, кто менее грамотен, чем ты (он просто не сможет найти твои ошибки в коде, а в инете подробного описания этих ошибок не будет, так как скрипт не распространяется... если ты конечто не полный идиот и не пытаешься еще и кому-то распространять свой, наверняка, баговый скрипт).

Короче, засада полная! Еще раз: хорошо, что я не админ, и, что журнал наш называтся ][, а не 4 (uUcp имеет в виду, что если бы журнал назывался "Админ", наверняка, его название сокращалось бы до "4", так как цифра "4" в нашем киберпанковском мире часто заменяет букву "А" – прим. ред.). Потому как в тех местах, где у админов засада, образуются широкие перспективы для хаксоров :). Так что пускай админы чешут репы в поисках грамотного решения, а мы пока займемся изучением широко распространяемых cgi-скриптов, в которых уже найдены ошибки. А то ведь админы – такие звери, что если их постоянно не держать в страхе перед "Owned by...", они и делать ничего не будут :).

Но, прежде чем мы перейдем непосредственно к перечислению глюкавых скриптов, давай посмотрим, какие ошибки наиболее часто встречаются (они почти все одинаковые).

1. Отсутствие проверки на "../". Эта последовательность символов в юникс обозначает коталог, в котором находится текущий коталог. То есть родительский (верхний) каталог для текущего. Во многих скриптах эта возможность упускается из виду, поэтому если, допустим, скрипт позволяет прочитать какой-нибудь файл в текущей директории и не имеет проверки на "../", его можно, в принципе, заставить прочитать любой файл (естественно, только такой, на который у него хватает прав доступа – скрипты обладают правами доступа вэб-сервера). Если предполагалось, что запрос к скрипту дожен выглядеть так:

http://www.host.com/cgi-bin/script.cgi?file=file.txt

Содержание  Вперед на стр. 022-020-2