CSRF - Cross Site Request Forgery

#1 Что такое Cross Site Request Forgery (CSRF)?

Здравствуйте, дорогие друзья. Рассмотрим межсайтовую подделку запроса, или (CSRF). Это уязвимости позволяют заставлять пользователя делать то, чего он не хочет.

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

Уязвимость CSRF, использует то, что веб-сайт не проверяет, хочет ли пользователь определить определенное действие. Иными словами, веб-приложение не определяет, что на самом деле делает пользователь.

Если такое наблюдается на нашем сайте, то мы можем создать страничку HTML, для того, чтобы заставить пользователя принудительно выполнить данное действие.

Например, мы можем заставить пользователя изменить пароль, и он даже об этом не узнает.

Давайте рассмотрим все на практическом примере, и мне понадобится приложение DVWA:

Переходим на вкладку csrf, и изменяем пароль на новый.  У меня это будет 7777:

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

Есть несколько способов для создания Cross Site Request Forgery, но я покажу Вам один из самых простых и надежных способов, не зависимо от того, что это «POST» или «GET». Нам достаточно отправить ссылку адресу цели и при открытии пароль будет изменен.

Далее переходим на страницу с формами, и перенеся курсор мыши на верхнее поле, жмем правую клавишу мыши, и переходим в инспектор элементов. Наша цель – это тег form:

Копируем содержимое тега «form» и вставляем в текстовый редактор:

Сохраняем файл как: csrf.html:

Двойной щелчок мыши по файлу, либо перенос файла в браузер, и открывается страничка с двумя полями:

Данная форма схожа с теми формами, которые мы хотели взломать.

Если мы детально рассмотрим содержимое тега form, то после атрибута action стоит символ решетки «#». Нам нужно вставить адрес сайта в эти кавычки. Получается запись «http://192.168.15.130/dvwa/vulnerabilities/csrf/»:

Сохраняем данный код.

Обращаю Ваше внимание, для эксплуатации на других веб-сайтах, нужно указывать наиболее полный путь к файлам, потому что, если на странице с формой, например, есть файл «index.html», то форма не поймет этого запроса. Опять же, запускаем редактированный файл «csrf.html», и видим поля для ввода. Конечно, можно было поработать над визуальными стилями, но это наиболее простой пример:

Я ввел пароль «1111», и теперь мы можем разлогиниться и авторизироваться с новым паролем.

У нас есть форма, которая не находится на этом веб-сайте, и с помощью нее мы можем менять пароли, на которые нам необходимо менять их.

Это подтверждает, что сайт уязвим к «CSRF».