1、什么是CSRF?
跨站请求伪造,也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任
2、同源策略
含义:A网页设置的Cookie,B网页不能打开,除非这两个网页"同源" 同源指的是"三个相同"
(1)、协议相同
(2)、域名相同
(3)、端口相同
举例说明:
3、同源策略目的
为了保证用户信息的安全,防止恶意的网站窃取数据。
(1)、举例场景:A网站是一家银行,用户登录以后,又去浏览网站B,正好是攻击者创建的一个网站B如果攻击者网站B可以读取A网站的Cookie,会发生用户的信息财产泄露丢失。
(2)、用户浏览网站A-发送请求-网站服务器响应包含cookie信息-攻击者以某种方法向用户发送网站 B用户同时点击网站B-攻击者获取用户cookie进行恶意操作。
4、限制范围
(1)、Cookie、LocalStorage和IndexDB无法读取
(2)、Dom无法获得
(3)、AJAX请求不能发送
虽然这些限制是必要的,但是有些合理的用途也会受到影响
列如:同一个站点的不同域名不能共享Cookie
1、Cookie简介
cookie是用户浏览网站是存储在用户机器上的小文本文件用来记录用户的一些状态
设置比如用户名ID访问次数等下次访问网站,网站会先访问机器上对应网站的cookie文件。
2、Cookie的作用
(1)、cookie最大作用维持会话凭证
(2)、减少登录网站的次数
(3)、记录关于用户信息
cookie逻辑:
3、Cookie作用域:
(1)、Cookie两个重要的属性:
Domain:当前添加的Cookie的域名归属如果没有指定则默认为当前域名。
www.test.com添加的Cookie的域名默认就是www.test.com,访问bolg.test.com添加的Cookie域名就是blog.test.com
Path:当前要添加Cookie的路径归属,如果没有指定则默认为当前路径。
访问www.test.com/java/host.html添加的Cookie的默认路径就是/java/,访问blog.test.com/java.host.html生成的Cookie的路径也是/java/。
(2)、浏览器提交Cookie
提交需要满足两点:1、当前域名或者父域名下的cookie。;2、当前路径或父路径下的cookie。
例:
cookie1:[name=value,domain=.test.com path= /]
cookie2:[name=value,domain=.blog.test.com path= /java/]
cookie3:[name=value,domain=blog.test.com path= /]
访问blog.test.com时
第一个可以被提交,因为.test.com时blog.test.com的父域名。
第二个不行,path不一致。
第三个可以,因为域名和path都一致。
1、原理总结
一个CSRF漏洞攻击的实现,由三部分来构成:
(1)、有一个漏洞存在(无需验证、任意修改后台数据、新增请求);
(2)、伪造数据操作请求的恶意连接或者页面;
(3)、诱使用户主动的访问登录恶意连接;
2、第一部分:漏洞存在
关键字:跨站请求漏洞
如果需要CSRF攻击能够成功,首先就需要目标站点或者系统存在一个可以进行数据修改和新增的操作,且此操作被提交后台后的过程中,其为提供任何身份验证或身份校验的参数。后台只要收到请求,就立即下发数据修改或新增的操作。
此漏洞出现较多的场景用户密码修改、购物地址的修改、后台管理账户操作过程中。
3、第二部分:漏洞利用的伪装
关键字:伪装请求
csrf漏洞存在了,如果真正的利用,还需要对修改或新增数据操作请求的伪装,此时恶意攻击者只要将伪装好”数据修改或新增“的请求发送给被攻击者,或者通过社工的方式诱使被攻击者在其cookie还生效的情况下点击了此请求连接,即可出发csrf漏洞,成功修改或新增当前用户的数据信息,如修改当前用户的密码,或者触发漏洞新增一个后台管理员
4、第三部分:用户非本意操作
关键字:非本意操作
当用户在不知情的情况下访问了恶客构造的网页或者连接,在非本意的情况下完成了黑客想要完成的"非法操作",实现了对当前用户个人信息的恶意操作。
5、小结:
CSRF漏洞的目的:利用已经知道存在的漏洞构造一个"恶意链接"、“html页面”,然后诱使用户点击出发此漏洞。
目标站点存在CSRF漏洞,攻击者可以利用CSRF漏洞伪装一个链接或者html页面,诱使受害者在登录的情况下(当前cookie有效情况下)点击此伪装请求,随后在用户不知情的情况下完成了对当前用户数据修改和新增的操作。
环境的使用
DVWA上的CSRF的实验是以修改登录用户的账号密码为目的的。
首先搭建一个DVWA的环境,另外CSRF漏洞都是在跨域环境下进行的,所以需要在虚拟机中搭建DVWA环境,然后用本机进行攻击,总之就是虚拟机当作要攻击的服务器,主机当作是攻击者。
一个修改账号密码的页面 
输入账号密码,使用抓包软件对发出的账号密码进行抓取查看

漏洞原理
点击View Soure查看代码:
输入的账号密码用get方式传参:
http://127.0.0.1/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change
管理员要是不小心点击了这个链接密码就会被改成123456
漏洞利用
这样裸漏者太容易就被发现了,我们可以使用img标签将他放进img标签进行隐藏
点击View Source,看到这个部分和之前low等级不同
漏洞利用
过滤规则是http包头的Referer参数的值中必须包括主机名这里是如果Referer中不包含主机名就会退出:
我们可以将攻击页面命名为123.59.111.191.html放到攻击者的服务器里,这里是127.0.0.1就可以绕过了。