CSRF
1.概述
例如说手机上收到一条短信,点了一下,发现里面什么都没有,过了一活儿,银行短信来了,发现自己的钱不见了,这就是黑客利用CSRF漏洞造成的。
1.2.概念
CSRF
cross-site request forgery
跨站 请求 伪造
受害者角度
用户在当前已登录的WEB应用程序上执行非本意的操作
攻击者角度
攻击者欺骗浏览器,让其以受害者的名义执行自己想要的操作
准备
Firefox
DVWA
2.漏洞实战
1.打开环境DVWA设置简单
修改密码
2.再去看源代码
发现只检测了检查参数pass_new与pass_conf是否相同,就可以修改密码
3.我们只要构建链接让用户登陆网站且该用户有cookie登陆,这里用自己的路径填写
http://192.168.48.39/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
当用户点击该链接,密码就会修改为12345
4.我们去搭建一个钓鱼网站诱使用户点击该站点修改密码
<head>
</head>
<body>
good image
</br>
<img src="http://192.168.48.39/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#>" width=0 height=0 border=0 />hi,this is funny</a>
</tr>
<br />
this is a demo!
</body>
当上当用户点击我们的网站,则成功修改密码
5.进入中级难度
查看源代码
我们发现中等难度源代码中使用函数stripos,查找php在字符串第一次出现的位置(不区分大小写),查找包头中Referer的来源地址是否是包头中HOST的字符串,不是为false则执行下面
这时要实现CSRF攻击,需要有2个条件:
1.获得cookie值
2.通过服务器程序检查
所以我们就要会绕过
或者是抓包将Referer改为带有host内容就能绕过检测(csrf.html是我们自己的钓鱼网站)
http://192.168.48.39:80/192.168.48.40/csrf.html
或者是将(csrf网站)名字改成host
http://192.168.48.39/192.168.48.40.html
6.接着进入高难度等级
发现hight多了user_token字段
显然我们无法再直接利用,如果该网站有XSS漏洞获取页面中user_token参数
也就可以进行CSRF攻击
我们称这种类型的随机参数为csrf token,他保证了攻击者无法猜测到所有参数
为什么暴力破解可以突破CSRF Token?
因为构造HTTP请求的人不一样
暴力破解的攻击者是当前用户,受害者是其他用户,知道上一个响应包的内容
而CSRF的攻击者是其他用户,受害者是当前用户,不知道上一个响应表的内容
我们再进入无漏洞难度
确保了输入原始密码,有力防止了CSRF
因为只有当前用户才知道原始密码是什么
3.漏洞修复
校验Referer,在中等难度只校验了Referer,只校验了是否存在host,存在绕过
随机Token
验证码 牺牲了用户体验,防止了漏洞产生