Обходим экзотичную CSRF защиту
Сперва ликбез. Засабмитить форму POST-запросом можно со следующими mime type:
a)
text/plain
b)
application/x-www-form-urlencoded
:
param1=a¶m2=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/