🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀
🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。
🌟🧭 在这里,每个错误都是成长的阶梯,每条建议都是前进的动力。
🌟🧭 在这里,我们一起成长,一起进步,让我们在知识的世界里畅游无阻,共同创造一个充满智慧和创新的明天。
🌟📚 点击关注,加入我们的技术探索之旅吧!❤️📖✨
✨博客主页:远见阁小民的主页
📕本文专栏:白帽学徒笔记
📕其他专栏:后端专栏 AI专栏 Python专栏 其他专栏 Linux专栏
1 简介
CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击,攻击者通过伪造用户请求,使得用户在不知情的情况下执行一些操作,例如更改账户信息、发送消息等。
这种攻击利用了用户已经登录的身份,向目标网站发送恶意请求。
1.1 CSRF的工作原理
(1)用户登录: 用户在某网站(例如银行网站)登录,并获得一个合法的会话Cookie。
(2)访问恶意网站: 用户在登录状态下访问了一个包含恶意代码的第三方网站。
(3)伪造请求: 恶意网站使用用户的会话Cookie,向目标网站发送伪造的请求。
(4)执行操作: 目标网站接收到伪造请求后,由于用户已经登录,会认为请求是合法的,并执行相应操作。
1.2 防御CSRF的常用方法
(1)使用CSRF令牌: 在每个请求中包含一个唯一的、不可预测的令牌,服务器验证令牌的有效性。
(2)检查Referer头: 服务器检查请求的来源,确保请求是从同一站点发出的。
(3)双重提交Cookie: 将CSRF令牌同时存储在Cookie和请求参数中,服务器验证这两个值是否一致。
2 实战演练
2.1 演示一:设置DVWA Security安全级别为Low
2.1.1 打开CSRF界面
我们可以看到这是一个修改密码的界面
如上图所示,当我们把密码修改为:111111 后,点击Change,提示修改成功。
这个时候,我们发现这是一个get型请求提交,所以我们可以直接在url中对密码进行修改,然后回车即可发出请求并修改密码完成。
这里我们已经在url中把密码修改为222222,回车后发现再使用111111密码已经无法登录成功了👇
2.2 演示二:提升安全级别为Medium
- 此时我们再按照《演示一》的流程操作一遍,可以发现已经不能直接通过url进行密码的修改了。
- 正常点击Change进行密码修改,然后使用BP进行抓包可以发现,该安全等级下多了Referer的验证,这就是我无法通过url修改密码的原因。
2.2.1 了解Referer 验证
Referer 验证是一种用于增强Web应用程序安全性的技术,主要用于防止跨站请求伪造(CSRF)攻击。通过验证HTTP请求头中的Referer字段,服务器可以确保请求来源于合法的页面,而不是由第三方恶意网站伪造的。
(1)Referer 头字段
HTTP请求头中的Referer字段包含了发起请求的页面的URL。比如,当用户在一个页面上点击链接或提交表单时,浏览器会在随后的请求中自动添加Referer字段,指明用户是从哪个页面发起的请求。
(2)Referer 验证的作用
Referer 验证主要用于防御CSRF攻击。
CSRF攻击的基本流程是:攻击者诱导用户在登录状态下访问攻击者控制的页面,从而在用户不知情的情况下向合法网站发送恶意请求。如果没有Referer验证,服务器可能会信任这些请求,导致安全问题。
通过Referer验证,服务器可以确保请求确实是从合法页面发出的,从而有效防止CSRF攻击。例如,银行网站可以通过Referer验证来确保修改密码的请求是从银行网站的账户设置页面发出的,而不是从其他不可信的来源发出的。
(3)Referer 验证的局限性
- Referer字段可以被伪造
高级攻击者可以通过工具伪造Referer字段,从而绕过验证。 - 浏览器隐私设置
某些浏览器或浏览器插件可能会屏蔽Referer字段,导致合法请求被拒绝。 - 跨站请求
对于需要跨站请求的合法操作,Referer验证可能会带来不便。