Дата: 15.05.2008, Категория: Взлома и защита Уязвимость основана на недостаточной проверке вводных данных в скриптах, использующих функцию mail().
Уязвимость позволяет злоумышленнику отсылать спам через такие скрипты, что приводит сами знаете к чему.
О структуре e-mail документа можно почитать здесь.
Глядя на структуру письма можно догадаться, что, используя переводы строк (\r, \n), можно добавить любое количество новых заголовков, включая и новые адреса получателей, что очень хорошо для спамеров, но не для нас.
Объясню на примере. Допустим есть у нас скрипт обратной связи, использующий функцию mail(). Данные, естественно не обрабатываются. В скрипте присутствуют поля для ввода: Кому ($_POST['to']), Тема ($_POST['subj']) и само сообщение ($_POST['message']). Данные, естественно, не проверяются. Вставляем в поле "Кому" сотню e-mail адресов, разделенных между собой переводами строк и можем отсылать сообщение сразу ста получателям.
Спросите, разве еще есть скрипты, у которых присутствует поле "Кому"? Отвечу - есть. Оно может присутствовать не только в наглядном виде в виде формы для ввода, но и находиться в теле формы. Например вот так:
...
<form action='feedback.php' method='post'>
<input type='text' name='subj'><br>
<select name='to'>
<option value='support@site.ru'>Support</opiton>
<option value='webmaster@site.ru'>Webmaster</option>
</select>
<textarea name='subj'></textarea>
<input type='submit' value='submit'>
</form>
...
Глядя на форму, видим 2 опции, отправить ли письмо в саппорт (support@site.ru), или вебмастеру (webmaster@site.ru).
Сохраняем страницу себе на компьютер, меняем:
<option value='support@site.ru'>Support</opiton>
на
<option value='support@site.ru%0ATo:preved@mail.ru,spam@mail.ru,etc@mail.com'>Spam</opiton>
и
<form action='feedback.php' method='post'>
на
<form action='http://site.ru/feedback.php' method='post'>
Сохраняем, открываем документ через браузер и жмем на кнопку Submit. Письма отправлены.
Теперь как можно защититься от mail-injection.
Во-первых, нужно фильтровать все и вся.
<?
$from = $_POST['sender'];
$from = urldecode($from);
if (eregi('(\r|\n)', $from)) {
die('Ошибка');
}
?> |
Вырезать hex коды переводов строк 0x0A/%0A (\n) 0x0D/%0D (\r).
Обращаем ваше внимание на данную уязвимость, так как она позволяет злоумышленнику отправлять спам-сообщения через вашу форму, что приведет к быстрому расходу траффика и может привести к блокировке вашего аккаунта.
Более подробно о mail-injection можно прочитать здесь (англ.)
Нет комментариев
|
|
О блоге
- Освещение проблем безопасности web приложений и серверов. Поисковая оптимизация.
Ник: c0nst
icq: 331699888
Рубрики
RSS-лента
Друзья и партнеры
Счетчики
|
|