CSRF 漏洞详解
漏洞描述
CSRF(Cross-Site Request Forgery)漏洞是一种Web应用程序安全漏洞,它允许攻击者利用受害者的已认证会话来执行未经授权的恶意操作。攻击者可以诱使受害者在受害者已经登录的情况下,通过社交工程或其他方式执行恶意请求,从而利用受害者的身份执行恶意操作。
漏洞原理
攻击者利用已经认证的用户会话,在用户不知情的情况下向目标网站发送恶意请求,以执行未经授权的操作。攻击者通常会利用社交工程学手段,诱使用户点击包含恶意请求的链接或访问恶意网站,从而触发CSRF攻击。
该漏洞利用的是服务器对客户浏览器的信任
具体来说,攻击者会在恶意网站或恶意链接中嵌入一段恶意代码,该代码会向目标网站发送请求,以执行攻击者想要的操作。由于用户已经登录到目标网站,因此请求中包含了用户的身份验证信息,目标网站无法区分恶意请求和合法请求,从而执行了攻击者的操作。
该漏洞重点在于更改状态的请求,而不是盗取数据,因为攻击者无法查看伪造请求的响应
漏洞场景
- 增删改查的交互点
- 无验证码,无token等
- 服务器未对referer头进行判断
漏洞评级
漏洞等级:高危
漏洞危害
这种类型的漏洞可能会导致恶意操作,例如更改受害者的账户信息、发起资金转移、删除数据等。攻击者通常会利用受害者的身份在受害者不知情的情况下发送恶意请求,因此这种漏洞对于受害者来说是隐蔽的。
漏洞验证
正常访问网页修改密码
攻击者构造GET请求进行CSRF攻击
<meta charset="utf-8">
<img src="sao.jpg">
</br>
<img src="http://10.9.47.77/dvwa_2.0.1/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change" alt="美女好看吗">
构造好之后给目标修改密码时进行了访问
此时已经遭受到攻击密码被修改了
漏洞利用
- GET方式 :构造一个http请求
- POST方式:攻击者构造一个表单,用户点击时自动提交
漏洞防御
- 验证 Referer 字段
- 二次验证:在关键操作之前,再输入密码或者验证码
- 添加Token 验证
- HttpOnly:某些情况下禁止 JS 脚本访问 Cookie 信息
- SameSite:Cookie 属性,浏览器自带安全机制
典型案例
一个典型的CSRF案例是2008年的“Samy蠕虫”事件。当时,一名名叫Samy Kamkar的黑客利用了MySpace社交网络上的CSRF漏洞,成功传播了一种名为“Samy蠕虫”的恶意代码。
这个蠕虫利用了MySpace网站上的漏洞,通过用户的浏览器向MySpace网站发送了恶意请求,将受害者的MySpace页面上添加了一个名为“Samy”的友情链接。当其他用户访问受感染的页面时,他们的账户也会被感染,进而传播这个蠕虫。
这个事件引起了广泛的关注,因为它展示了CSRF漏洞的危险性和潜在的影响。MySpace最终修复了这个漏洞,并且Samy Kamkar也因此事件面临了法律责任。
这个案例突出了CSRF漏洞的风险,以及攻击者如何利用这种漏洞来传播恶意代码或执行未经授权的操作。这也提醒了网站开发者和用户需要重视CSRF漏洞,采取相应的防范措施。