Показать сообщение отдельно

  #4  
Старый 17.06.2009, 17:02
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

2. Взлом почты с помощью XSS-уязвимостей

В этом разделе я расскажу, как взломать почту с помощью XSS уязвимостей. Что такое XSS уязвимость?

Аббревиатура XSS расшифровывается как Сross Site Sсriрting (“межсайтовый скриптинг”). Принято его называть именно XSS, а не СSS, так как СSS введена намного раньше, и означает она Сasсading Style Sheets – «каскадные таблицы стилей» (применяются в оформлении HTML-станиц). Сross – это «крест», поэтому первая буква в «межсайтовом скриптинге» заменена именно на «X». XSS – это уязвимость на сервере, позволяющая внедрить в генерируемую скриптами на сервере HTML-страницу произвольный код путём передачи его в качестве значения нефильтруемой переменной. Под «нефильтруемой» переменной подразумевается переменная, которая перед её использованием в скрипте (например, PHP) не проверяется на наличие запретных символов, таких, как: <,>,’,” и многих других.

РOST-запрос передаёт переменные через массив, неотображаемый в адресной строке браузера; GET-запрос обнаруживает себя в адресной строке следующим образом:

http://www.somesite.com/index.php?fi...cond=2&third=3

Тут http://www.somesite.com/index.php — некая страница, к которой мы обращаемся, а first=1&second=2&third=3 — это переменные, передаваемые скрипту. В GET-запросе переменные записываются следующим образом:

имя_переменной_1=значение_п ременной_1&имя_переменной_2= значение_переменной_2&…&имя _переменной_n=значение_пере енной_n

То есть для наглядности примера, запишем еще один GET-запрос:

http://www.somesite.com/index.php?им...менной_n

PHP-скрипт может генерировать html-страницу, в которой выводит значение одной из переданных переменных без всякой фильтрации. НО! Если Вы, составляя GET-запрос, вместо обычного значения переменной подставит какие-нибудь ключевые тэги (например, <sсriрt> или <br>), то они выполнятся интерпретатором!

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

Что же позволяют осуществить XSS-уязвимости?

1) Кражу конфиденциальной информации посетителя.
2) Всё, что умеют СGI-, РERL-, PHP-, ASР-скрипты.
3) Непредусмотренные стандартом возможности браузера. (Благодаря уязвимостям в самых браузерах)


В следующем примере я буду использовать браузер Internet Explorer 7. (В этой части статьи будет множество всяких ссылок; эти ссылки нужно вводить либо вручную, либо копировать в буфер обмена и вставлять в браузер; никак иначе я не советую, потому что CTRL + клик по ссылке может не правильно отобразить страницу)

Рассмотрим сайт http://rambler.ru . Воспользуемся поиском сайта. Введем произвольный поисковый запрос, например, “Hollywood” и нажмем кнопку “Найти!”. В результате поисковик выдаст множество сайтов, но внимание мы обратим на адрес страницы в браузере.

(Внимание! На момент написания статьи данная XSS-уязвимость работала. Но на момент модифицирования её закрыли. В цели обучения я привожу новую XSS-сигнатуру: http://ftpsearch.rambler.ru/db/ftpsearch/search.html?words=XSS&ftype=5"><script>alert('XSS' )</script>&form=0&hu=1&what=0)


В меня она выглядит вот так:
http://nova.rambler.ru/search?btnG=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8!&query= Hollywood

Теперь договоримся, что для поиска XSS-уязвимостей будем использовать следующий JavaScript код:

Код:
<script>alert("XSS")</script>
Данный код выводит сообщение с текстом “XSS”. Попробуем ввести в поисковую строку этот JavaScript код. Откроется страница с некоторым адресом и с обычным для поисковика содержимым. Но обратим внимание на заголовок окна. У меня он выглядит так:
Rambler: поиск по Интернету. '<script>alert("XSS")</script>' — Windows Internet Explorer
Давайте посмотрим исходный код страницы, в котором найдем первое совпадение со строчкой “<script>alert("XSS")</script>”, то есть строчкой, которую мы ввели в качестве поискового запроса. Нашли? Она должна находиться между HTML тэгами <title> и </title>, которые и отвечают за текст заголовка окна браузера. У меня все это выглядит вот так:
Код:
<title>Rambler: поиск по Интернету. '<script>alert("XSS")</script>'</title>
А теперь представим, что случиться, если мы тэг </title> разместим перед нашим скриптом. Получился бы код:

Код:
<title>Rambler: поиск по Интернету. '</title><script>alert("XSS")</script>'
который интерпретатор выполнит, поскольку не происходит фильтрации символов, о которых я писал раньше. Но как этого достичь? Оказывается, что очень просто! Давайте введем в поисковую строку такой запрос:
Код:
</title><script>alert("XSS")</script>
то есть сами попытаемся закрыть тэг </title>. Как это ни странно, но JavaScript код выполнился, и мы видим результат:


Неплохо, правда? Снова смотрим на адрес страницы. Так он выглядит у меня:

http://nova.rambler.ru/search?btnG=%...3C%2Fscript%3E

Тут переменная query содержит необходимый нам поисковый запрос, то есть строку “</title><script>alert("XSS")</script>” в зашифрованном виде. Помните, как первый раз мы ввели строку “Hollywood” в качестве поискового запроса? Тогда адрес страницы выглядел так:

http://nova.rambler.ru/search?btnG=%...uery=Hollywood

Видим, что query=Hollywood, что и подтверждает мои слова.

Перейдем по ссылке:

http://nova.rambler.ru/search?btnG=%...XSS")</script>

И снова видим окошко с текстом “XSS”. Давайте попробуем “опустить” переменную btnG, то есть просто удалим её из адреса страницы, и посмотрим, будет ли работать скрипт. Откроем ссылку:

http://nova.rambler.ru/search?query=...XSS")</script>

Работает!

Только что мы с Вами вывели XSS-уязвимость в сайте www.rambler.ru. Она присутствует потому, что не происходит фильтрации спецсимволов, и мы можем закрыть тэг <title>, что бы выполнился наш код.
 
Ответить с цитированием