一、前言
1、CSRF简述
CSRF(Cross Site Request Forgery)名为“跨站请求伪造”,意思是黑客伪装成用户的身份,利用目标服务器对用户的信任(即用户已经登入,且存有Cookie)进行数据请求或数据更改,达到攻击的目的。
CSRF形成的原因:
1、用户在登陆了网站后,没有进行登出,此时访问黑客构造的恶意网页,就会携带自己登陆生成的Cookie访问恶意网页,执行黑客构造的非法请求;
2、服务器没有对用户的请求进行安全检测,比如没有设置请求来源(Referer)等,导致服务器正常处理了非法请求;
3、服务器虽设有Referer,但是并未进行严格检查。
例如:
傻白甜用户小黑,使用自己的账号密码登陆了网站 A,并在网站 A 上进行转账操作,假如转账完成后,没有登出该网站;
与此同时,黑客小毛构造一个网页,在网页中植入转账语句,点击后会自动执行转账操作,并从用户小黑的账户向小毛转账1万;
此时如果用户小黑点击该网页,那么就会携带自己的Cookie进行转账操作,由于携带该Cookie,因此对于服务器来说本次操作是可信任的,所以就会成功进行转账,而用户小黑却不会发现,且服务器不会知道本次操作是非法的;
但是如果用户小黑在点击该网页时,网站 A 的状态是登出,那么就不会携带可信任的Cookie,也就不会成功执行非法操作;
这就是跨站请求伪造。
2、防御方法
由于CSRF形成原因是服务器对访问源没有进行严格过滤,以及用户的不安全操作导致,因此可以从以下几方面来防御:
1、最重要也是最容易中招的,当属用户本身,用户在进行私密操作时,不要随意点击其他网页。
2、从服务器方面,可以在在请求头中添加Referer确定访问源,再在会话中加入Token,防止伪造。
等……
二、Low级别
1、演示
首先打开该题目,发现是修改密码的操作,因此判断,可以通过攻击,修改其密码。
随意输入后发现,传参方式是GET型,并修改密码为 111
查看请求头,发现存在Cookie
查看一下数据库内的密码,并进行MD5还原
OK没问题,构造一个网页,插入URL请求语句,修改密码为1234,一般将语句放在 img标签内。
在不退出的情况下,继续访问该网页
没有任何提示,查看请求头,发现携带了Cookie
此时再去数据库查看密码,发现已被更改为1234
2、源码
只进行两次输入是否相同的判断,无其他防护。
三、Medium级别
1、演示
正常修改密码为111,抓包
抓包发现,中级别较Low级别相比,多了Referer验证,但是当删除Referer一部分值时,依然成功修改,因此断定,该请求的Referer依然不够严谨。因此在构造钓鱼网页时,可以绕过Referer检测。
尝试用Low级别的方法进行攻击,由于没有Referer,因此没有更改成功。
继续抓包,在请求头中加入Referer,并设置值为服务器IP:
在发包前,密码是111
添加Referer并发包后,密码成功被更改。
2、源码
由于本次抓包未出现Referer,所以必须手动添加,但是在实际情况中,用户点击了钓鱼网页,是不会手动添加Referer的,这时就可以根据已知的Referer,进行灵活变通。
比如如果发送的Referer是地址,那么就可以将钓鱼网页的文件名设置为目标服务器主机名
这样就可以成功注入Referer。
四、High级别
1、演示
正常修改,抓包发现添加了Token。
因此,就需要在构造的钓鱼网页中加入获取Token的语句。
High级别有待研究。