CSRF漏洞学习总结

一、什么是CSRF漏洞?

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击,它利用受害者在受信任网站上的已认证会话,来执行非预期的行动。这种攻击的核心在于,攻击者能够诱使受害者的浏览器向一个他们已经登录的网站发送恶意构造的请求,而该网站会错误地认为这个请求是用户有意发起的。

1.1原理

当用户成功登录一个网站时,服务器会返回该用户的“身份证”,也就是cookie。当用户后续进行操作时,浏览器会自动添加上这个cookie,服务器收到数据包后就会对cookie进行验证,确保是用户进行的操作。攻击者伪造一个网站,通过钓鱼等手段使受害者访问这个网站,如果受害者此时正在访问有csrf的网站,当用户点击假网站的按钮时,浏览器就会将该请求带上cookie,发送给服务端,而此时服务端认为是用户的操作。

二、实际攻击例子

场景设定

假设有一个在线银行系统 bank.example.com,它存在一个未修复的CSRF漏洞。用户可以通过访问 /updateprofile.php 页面来更新他们的个人资料,但该页面没有适当的CSRF防护机制。

攻击准备

  1. 创建恶意网站:攻击者首先创建了一个看似合法的网站,可能是模仿了银行的登录界面或提供某种“安全更新”服务的页面。
  2. 构造CSRF攻击向量:在恶意网站中嵌入一个HTML表单或者通过JavaScript自动提交的代码,就像之前讨论过的那样。这个表单的目标是银行的 /updateprofile.php,并且包含了攻击者想要更改的信息,例如用户的电子邮件地址、密码提示问题等。
  3. 伪装钓鱼邮件:攻击者设计了一封看起来像是来自银行的紧急通知邮件,告知用户有关账户的安全问题,并要求他们立即采取行动。

钓鱼邮件内容示例

主题: 紧急:您的银行账户需要立即验证!亲爱的客户,我们检测到您的账户可能存在异常活动。为了确保您的账户安全,请立即点击下面的链接进行验证。[立即验证账户] (http://malicious-site.example)如果您最近没有尝试过任何更改,请尽快执行此操作以保护您的账户。感谢您对我们服务的支持。祝好,
Bank Example 客户服务团队

CSRF攻击向量(恶意网站中的HTML/JavaScript)

<html><body onload="document.getElementById('csrfForm').submit()"><form id="csrfForm" action="https://bank.example.com/updateprofile.php" method="POST"><input type="hidden" name="email" value="attacker@example.com" /><input type="hidden" name="passhint" value="What is the capital of France?" /><!-- 其他需要修改的字段 --></form><p>请稍候,正在验证您的账户...</p></body>
</html>

在这个例子中,当受害者点击了钓鱼邮件中的链接并访问了恶意网站时,页面会自动加载并提交一个指向银行服务器的表单请求。如果受害者在同一浏览器中已经登录到了真正的银行网站,那么这个请求将会携带有效的会话Cookie,从而导致银行服务器认为这是一个合法的请求,并按照提供的数据更新受害者的账户信息。

三、靶场实验

这次实验使用OWASP发行的Broken Web Application进行演示。

https://sourceforge.net/projects/owaspbwa/

点击下载,在vmware中打开虚拟机文件即可。

在浏览器访问提示的网址

选择GETBOO

点击右上角的"Log In",使用user,user登录

点击右上角的“Settings”

选择“Modify account information”功能,这里可以修改用户邮箱

开启bp抓包之后,点击"Updates",可以看到需要修改的邮箱账号

右键利用工具生成POC

修改需要绑定的邮箱,这里改为“kimjiwon”

复制生成的HTML,在桌面新建一个HTML文件,放进去

使用你打开靶场的浏览器打开(不同浏览器无法利用cookie),这个页面相当于恶意网站

点击按钮,发现无意中发送了修改邮箱的请求

到此,攻击者已经实现攻击目的了,在受害者没有察觉的情况下修改了邮箱。利用这种手段,攻击者可以执行其他操作如修改密码等。

四、防御措施

1. 使用CSRF令牌

  • 生成唯一的CSRF令牌:对于每个用户会话或表单提交,服务器应该生成一个独一无二的、不可预测的CSRF令牌。
  • 将令牌嵌入到表单中:这个令牌作为一个隐藏字段包含在每个需要保护的HTML表单中。
  • 验证令牌:当接收到来自客户端的POST请求时,服务器必须检查该请求是否包含了正确的CSRF令牌,并且它与当前用户的会话相匹配。如果不匹配,则拒绝处理该请求。

2. 设置SameSite Cookies属性

  • 启用SameSite属性:通过设置Cookies的SameSite属性为StrictLax,可以限制Cookies只在同站请求中发送。这有效地阻止了大多数类型的CSRF攻击,因为跨站请求不会附带敏感的认证信息。
    • SameSite=Strict:Cookies仅在直接导航(如用户手动输入URL或点击书签)时才会被发送。
    • SameSite=Lax:允许某些跨站顶级导航请求(如GET请求)发送Cookies,但禁止通过iframe等嵌入式上下文中的跨站请求发送Cookies。

3. 检查Referer和Origin头部

  • 验证来源:检查refer是否是第三方网站发起的。尽管不是最可靠的防御机制,因为refer的内容可以被修改,但检查HTTP请求中的RefererOrigin头部可以帮助识别潜在的CSRF攻击。合法请求通常会有正确的来源信息,而恶意请求可能会缺少或有不匹配的来源信息。

4. 使用框架内置的CSRF防护功能

  • 利用现有工具:许多现代Web开发框架(如Django、Rails、ASP.NET Core等)都内置了CSRF防护功能。确保正确配置并使用这些框架提供的安全特性。

5. 实现基于用户交互的二次确认

  • 增加额外步骤:对于特别敏感的操作,比如更改密码或电子邮件地址,要求用户提供额外的验证信息,如重新输入密码或通过短信验证码进行二次确认。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5813.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端Vue2项目使用md编辑器

项目中有一个需求&#xff0c;要在前端给用户展示内容&#xff0c;内容有 AI 生成的&#xff0c;返回来的是 md 格式&#xff0c;所以需要给用户展示 md 格式&#xff0c;并且管理端也可以编辑这个 md 格式的文档。 使用组件库 v-md-editor。 https://code-farmer-i.github.i…

【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO

文章目录 前言&#x1f30d; 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术&#x1f341;3.1关键特性&#x1f341;3.2配置选项&#x1f341;3.3使用示例 ❄️4. 连接池之Druid技术&#x1f341; 4.1主要特性&#x1f341; 4.2 配置选项…

Codeforces Round 1000 (Div. 2)(前三题)

A. Minimal Coprime 翻译&#xff1a; 如果 l 和 r 互为同素数&#xff0c;则正整数 [l,r] 的一段称为同素段。 如果一个共素数段 [l,r] 不包含任何不等于它本身的共素数段&#xff0c;那么这个共素数段 [l,r] 就叫做最小共素数段。为了更好地理解这句话&#xff0c;可以参考注…

数据库事务详解

事务-1-数据库事务 今天聊一聊数据库的事务&#xff0c;这里以MySQL为例子。 在MySQL中&#xff0c;事务&#xff08;Transaction&#xff09;是一组SQL操作的集合&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部失败回滚&#xff0c;确保数据的一致性和完整性。事…

攻防世界GFSJ1012 pwnstack

题目编号&#xff1a;GFSJ1012 附件下载后是一个c和库文件&#xff1a; 获取在线场景是 1. 获取伪代码 Exeinfo打开pwn2&#xff0c;分析如图&#xff0c;64位。 IDA Pro(64-bit)打开pwn2&#xff0c;生成伪代码 2. 分析代码漏洞 /* This file was generated by the Hex-Rays …

最小距离和与带权最小距离和

1. 等权中位数 背景&#xff1a; 给定一系列整数&#xff0c;求一个整数x使得x在数轴上与所有整数在数轴上的距离和最小。 结论&#xff1a; 这一系列的整数按顺序排好后的中位数(偶数个整数的中位数取 n 2 或 n 2 1 \frac{n}{2}或\frac{n}{2}1 2n​或2n​1都可)一定是所求点…

【LeetCode 刷题】栈与队列-队列的应用

此博客为《代码随想录》栈与队列章节的学习笔记&#xff0c;主要内容为队列的应用相关的题目解析。 文章目录 239. 滑动窗口最大值347. 前 K 个高频元素 239. 滑动窗口最大值 题目链接 class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]…

【优选算法】5----有效三角形个数

又是一篇算法题&#xff0c;今天早上刚做的热乎的~ 其实我是想写博客但不知道写些什么&#xff08;就水一下啦&#xff09; -------------------------------------begin----------------------------------------- 题目解析: 这道题的题目算是最近几道算法题里面题目最短的&a…

Golang:使用DuckDB查询Parquet文件数据

本文介绍DuckDB查询Parquet文件的典型应用场景&#xff0c;掌握DuckDB会让你的产品分析能力更强&#xff0c;相反系统运营成本相对较低。为了示例完整&#xff0c;我也提供了如何使用Python导出MongoDB数据。 Apache Parquet文件格式在存储和传输大型数据集方面变得非常流行。最…

HTTP 配置与应用(局域网)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新HTTP 配置与应用&#xff08;不同网段&#xff09;。 我是一个萌新小白&#xf…

免费!无水印下载!

软件介绍 这个工具可方便啦&#xff0c;不管是小红书上那些时尚的美照&#xff0c;还是特别搞笑的视频&#xff0c;只要你想下载&#xff0c;轻轻一点就能保存。真的是实现了一键下载&#xff0c;完全没有复杂的操作。下载下来的内容会智能分类呢。这样的话&#xff0c;你的资源…

第二届国赛铁三wp

第二届国赛 缺东西去我blog找&#x1f447; 第二届长城杯/铁三 | DDLS BLOG web Safe_Proxy 源码题目 from flask import Flask, request, render_template_stringimport socketimport threadingimport htmlapp Flask(__name__)app.route(/, methods"GET"])de…

【深度学习】嘿马深度学习笔记第11篇:卷积神经网络,学习目标【附代码文档】

本教程的知识点为&#xff1a;深度学习介绍 1.1 深度学习与机器学习的区别 TensorFlow介绍 2.4 张量 2.4.1 张量(Tensor) 2.4.1.1 张量的类型 TensorFlow介绍 1.2 神经网络基础 1.2.1 Logistic回归 1.2.1.1 Logistic回归 TensorFlow介绍 总结 每日作业 神经网络与tf.keras 1.3 …

STranslate 中文绿色版即时翻译/ OCR 工具 v1.3.1.120

STranslate 是一款功能强大且用户友好的翻译工具&#xff0c;它支持多种语言的即时翻译&#xff0c;提供丰富的翻译功能和便捷的使用体验。STranslate 特别适合需要频繁进行多语言交流的个人用户、商务人士和翻译工作者。 软件功能 1. 即时翻译&#xff1a; 文本翻译&#xff…

缓存之美:万文详解 Caffeine 实现原理(下)

上篇文章&#xff1a;缓存之美&#xff1a;万文详解 Caffeine 实现原理&#xff08;上&#xff09; getIfPresent 现在我们对 put 方法有了基本了解&#xff0c;现在我们继续深入 getIfPresent 方法&#xff1a; public class TestReadSourceCode {Testpublic void doRead() …

GPT 结束语设计 以nanogpt为例

GPT 结束语设计 以nanogpt为例 目录 GPT 结束语设计 以nanogpt为例 1、简述 2、分词设计 3、结束语断点 1、简述 在手搓gpt的时候&#xff0c;可能会遇到一些性能问题&#xff0c;即关于是否需要全部输出或者怎么节约资源。 在输出语句被max_new_tokens 限制&#xff0c…

HackTheBox靶机:Sightless;NodeJS模板注入漏洞,盲XSS跨站脚本攻击漏洞实战

HackTheBox靶机&#xff1a;Sightless 渗透过程1. 信息收集常规探测深入分析 2. 漏洞利用&#xff08;CVE-2022-0944&#xff09;3. 从Docker中提权4. 信息收集&#xff08;michael用户&#xff09;5. 漏洞利用 Froxlor6. 解密Keepass文件 漏洞分析SQLPad CVE-2022-0944 靶机介…

XML外部实体注入--XML基础

一.XML基础 1.XML 基础概念 定义&#xff1a;XML 即可扩展标记语言&#xff08;Extensible Markup Language&#xff09;&#xff0c;用于标记电子文件&#xff0c;使其具有结构性。它是一种允许用户对自己的标记语言进行定义的源语言&#xff0c;可用来标记数据、定义数据类型…

YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等

精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知:特征…

Flutter:自定义Tab切换,订单列表页tab,tab吸顶

1、自定义tab切换 view <Widget>[// 好评<Widget>[TDImage(assetUrl: assets/img/order4.png,width: 36.w,height: 36.w,),SizedBox(width: 10.w,),TextWidget.body(好评,size: 24.sp,color: controller.tabIndex 0 ? AppTheme.colorfff : AppTheme.color999,),]…