avatar
Кавычка
@webpwn
28.05.2018 09:17
Обходим экзотичную CSRF защиту

Сперва ликбез. Засабмитить форму POST-запросом можно со следующими mime type:

a) text/plain

b) application/x-www-form-urlencoded:

param1=a&param2=b

c) multipart/form-data:

---------------------------974767299852498929531610575
Content-Disposition: form-data; name="param1"

aaa
---------------------------974767299852498929531610575
Content-Disposition: form-data; name="param2"

bbb


Но нам недоступен типа application/json. Браузер заблокирует отправку с таким контент-тайпом, если отсутствуют разрешающие CORS хидеры (а это совсем другая история).

Иногда на этом построена CSRF защита, но Flash может это обойти. А поможет нам в этом вот этот прекрасный PoC: https://github.com/sp1d3r/swf_json_csrf

Если коротко, вот в чем соль:

1) Мы размещаем на собственном ресурсе особый SWF и PHP скрипт отдающий 307 редирект. Особенность редиректа 307 в том, что он, в отличие от прочих, при редиректе перенаправляет отправленные данные, а не просто перенаправляет пользователя на другую страницу.

2) Наша флешка шлет PHP скрипту POST с нужным json телом (ведь все в рамках одного ориджина, а значит CORS нас не заблокирует)

3) Скрипт отдает 307 редирект и перенаправляет на victim-site

4) Наша флешка следует по редиректу
->
Cookies подставляются, Content-type сохраняется application/json
->
PWNED!

Подробнее об этом:
https://www.geekboy.ninja/blog/exploiting-json-cross-site-request-forgery-csrf-using-flash/
37 11.3K

Обсуждение 0

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram