1、CSRF(Cross-site request forgery)跨站请求伪造,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点(信任站点A)。尽管听起来像跨站脚本(XSS);
2、与网站脚本(XSS)相比:
--XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
--CSRF攻击在近年逐渐流行和难以防范,所以被认为比XSS更具危险性。
3、以下实际场景实验,打开靶机,大家可以看到这是一个用户更改自身密码的页面:
4、提交新密码new,在浏览器中观察Request 信息可以看到:
Request URL: http://10.13.80.97/DVWA-master/vulnerabilities/csrf/?password_new=new&password_conf=new&Change=Change、
Cookie: security=low; PHPSESSID=jm411cn2j65ornbe8sp52gbki3 、
Referer: http://10.13.80.97/DVWA-master/vulnerabilities/csrf/,到这里我们可以知道修改密码使用的是GET方法;
5、利用上面发现的Request 信息,可以拼凑出带有跨站请求伪造功能的HTML代码(这里示例将密码更改为678),并保存至页面文件csrf.html:
6、将csrf.html保存到CSRF_DEMO站点,发布后访问csrf.html,在浏览器中观察Request 信息可以看到,GET请求变更新密码678,直接使用了原有的Cookie(是不是开始蒙圈),Referer信息标记为新的站点下的CSRF_DEMO/csrf.html:
Request URL: http://10.13.80.97/DVWA-master/vulnerabilities/csrf/?password_new=678&password_conf=678&Change=Change、
Cookie: security=low; PHPSESSID=jm411cn2j65ornbe8sp52gbki3、
Referer: http://10.13.80.97/CSRF_DEMO/csrf.html;
7、上面页面返回除了我们特意alt出来的信息"this is a csrf_demo:change password"外,图片打开失败(必然失败,src指向的并不是图片地址),但是实际已攻击成功,数据库中写入了新密码678的MD5摘要“9fe8593a8a330607d76796b35c64c600”:
8、验证一下“9fe8593a8a330607d76796b35c64c600”是不是678的MD5:
9、至此,我们可以确认http://10.13.80.97/DVWA-master/vulnerabilities/csrf/具有跨站伪造请求安全漏洞;
10、从上面的模拟攻击过程,我们总结以下几点方法,作为常用的CSRF防范方法:
--封闭XSS安全漏洞;
--对于重要的服务,可以尽量使用 XMLHttpRequest,在cookie 之上,建立token机制;
--验证Referer来源;
--写这个系列前,计划每一种类型的演示,不超过10步,还好没有超(这一行与安全无关,友情奉送)。
网友评论