Hi 朋友们!
大家都知道CSRF攻击,如果不知道可看下OWASP的先容,利用burp suite里自带的增强工具(engagement tools)可以很随意马虎地布局各种基本的CSRF攻击POC,包括通过XHR要求进行的CSRF攻击。
在这篇文章里,我将要谈论下我常常碰到的一些CSRF攻击场景,看到社区里很多研究者对这个攻击场景都很好奇,我将尽可能的把它说清楚。

这个技巧可用在利用JSON格式数据进行post要求的情形下。比如{“name”:”test”, “email”:”victim.com”},有两种攻击场景:
场景1:做事器吸收JSON格式的数据但是不验证Content-type。
场景2:做事器吸收JSON格式的数据,也验证Content-type,比如:Content-type得是 application/json。
解释:这种CSRF攻击只能用在网站运用只利用json格式的数据或者Content-type 为application/json,以及检讨数据格式的情形下,如果有任何其它的csrf token或者referer检讨,那么这种攻击将不会见效。
攻击场景1:利用Fetch要求就可以完成攻击。就像我们上面说的一样,这种场景下做事器只检讨post的数据的格式是否精确,只要数据格式精确运用就会接管要求,纵然Content-type被设置为text/plain也无妨。
现在假设我们须要把下面的数据发送给运用:{“name”:”attacker”,”email”:”attacker@gmail.com”}
新方法---利用Fetch:
JSON CSRF POCfetch('http://vul-app.com';, {method: 'POST', credentials: 'include', headers: {'Content-Type': 'text/plain'}, body: '{\"大众name\公众:\"大众attacker\公众,\"大众email\"大众:\公众attacker.com\"大众}'});
以前的方法----利用form:
利用form布局JSON数据等然后发起post要求:
JSON CSRF POC这个html文件将发起post要求,利用了JSON格式的数据和一些额外添补的数据。如果运用不会被额外的填充数据影响(我所见的大多数都不会)。如果会被影响,那么还有第二种选择(利用上面的Fetch方法)。
攻击场景2:
如果运用检讨Content-type和数据格式,那么可以借助flash和307重定向来实现攻击。
需求:
精心布局的Flash文件。
crossdomain XML文件。
含有307状态的PHP文件。
精心布局的Flash文件:
flash文件(.swf)包含着json格式的数据(攻击者想要发送给目标的数据),并链接到某个放在做事器上的php文件。
这里可以下载SWF文件,你可以下载并根据你的意愿编辑内容,我利用了FFDec来在Windows上编辑编译flash文件,你可以根据你的系统环境选择其它的工具。
crossdomain XML文件:
这个文件该当放在攻击者自己网站的主目录下,以是flash文件可以向攻击者的主机发起要求。
解释:如果flash文件和php跳转页在同一个域名下,那么你就不须要crossdomain文件了。
重定向的PHP文件:
// redirect automatically
header(\"大众Location: https://victim.com/user/endpoint/\"大众;, true, 307);
?>
Flash文件将会要求该PHP文件,这将会进行307重定向,定向到上面提到的运用目标端点(endpoint)。由于307是分外跳转,它将会在跳转的同时,把从flash文件中得到的JSON数据post给目标,这样CSRF攻击就会成功实行。
这里是hackone上利用该方法的一个漏洞报告#44146,漏洞作者是@avlidienbrunn。解释:由于是基于flash,以是浏览器须要安装有flash,现在的浏览器一样平常都装有flash,但未来可能就不会这样了。
更新解释1:
Evgeniy编辑并编译了Flash文件,这样可以通过URL参数来传输所有的信息包括JSON数据,php文件&目标端点(endpoint)。这样不仅将繁芜的攻击步骤变大略了,而且省去明晰场景2中每次都得重新编译flash文件的繁芜事情。
这里是更新后的flash以及其它文件,作者是Evgeniy。
更新解释2:
对付场景1,在某些情形下做事器可能会由于额外的填充数据而谢绝要求,但是还有其它更好的方法,利用ftech或者XHR要求,我们可以无限制的提交JSON格式的数据以及添加POC代码。
感谢Prakash让我知道了这点。
本文由看雪翻译小组 Limp 编译,来源Geekboy's blog 转载请注明来自看雪社区