(1)基本概念
CSRF(Cross Site Request Forgery),跨站请求伪造,一种比较常见的Web攻击。
(2)CSRF的本质
攻击者诱使用户的浏览器发送一个恶意请求,本质上是借助用户的凭证(Cookie),以用户的身份去执行特定操作。
在用户访问攻击者构造的恶意网页时,如果此时浏览器访问第三方站点(带有CSRF漏洞的网站)带上了第三方Cookie,那么第三方站点会认为这是一个已登录的用户过来访问,浏览器就能顺利完成相应的操作,所以称为“跨站请求伪造”。
(3)CSRF的攻击示意图

(4)CSRF的攻击过程
访问当前站点时,向第三方站点发起请求并携带了第三方Cookie;
特殊情况:
在部分场景中,在存在CSRF漏洞的网站上就可以向当前站点发起请求,虽然此时并没有“跨站点”,此时也不存在第三方Cookie,但也叫CSRF攻击。
(5)利用外部CSRF攻击内网
①、基于IP的CSRF攻击
网站是基于源IP地址进行认证和授权的,比如企业内部的应用,将来自内外IP地址的访问都认为是可信的,那么外部攻击者可以诱使内部员工去访问一个恶意页面,恶意页面会对内网应用发起请求,这也能实施CSRF攻击。
②、路由器的CSRF攻击
很多路由器都有默认的IP地址及控制台密码,攻击者可利用这些漏洞修改路由器配置,如更改DNS地址等。
(6)构造方式
①、GET请求
主要用<img>、<iframe>、<script>等带“src”属性的标签,这类标签只能够发起一次GET请求。
②、POST请求
构造一个表单并填好参数

这样就可以在受害者打开恶意页面时自动提交表单,执行CSRF攻击。
POST-JSON
我们需要构建键值对的形式(name=value),让他符合JSON格式。
可以往JSON中插入一个无效的带等号“=”键来实现,在HTML中标签属性都会被HTML转移;还要保证按照原始内容提交字符,所以需要设置表单提交纯文本数据,即设置enctype为”text/plain”,最终构造的表单格式如下:

POST-XML
XML的声明部分可以包含等号,所以无需插入无效的内容,最终的构造格式:

