深入剖析 CSRF 漏洞:原理、危害案例与防护

news2025/3/7 5:09:07

目录

前言

漏洞介绍

漏洞原理

产生条件

产生的危害

靶场练习

post 请求csrf案例

防御措施

验证请求来源

设置 SameSite 属性

双重提交 Cookie

结语


前言

在网络安全领域,各类漏洞层出不穷,时刻威胁着用户的隐私与数据安全。跨站请求伪造(Cross - Site Request Forgery,简称 CSRF)漏洞便是其中较为隐蔽且危害较大的一种。它如同隐藏在暗处的 “小偷”,悄无声息地窃取用户权限,执行恶意操作。了解 CSRF 漏洞,无论是对 Web 开发者加固应用安全,还是对普通用户提升安全防范意识,都有着重要意义。

漏洞介绍

CSRF 漏洞,简单来说,是指攻击者诱导受害者进入一个恶意链接,利用受害者在已登录的目标网站上的身份验证信息,在受害者不知情的情况下,以受害者的名义在目标网站上执行非本意的操作。与跨站脚本(XSS)漏洞不同,CSRF 漏洞主要利用的是网站对用户浏览器的信任,而非直接攻击用户浏览器。这种漏洞广泛存在于各类 Web 应用中,只要应用依赖用户的身份验证来执行敏感操作,就有可能受到 CSRF 攻击的威胁。

漏洞原理

  1. 用户登录与身份验证:用户在目标网站进行登录,网站通过 Cookie 或 Token 等方式对用户进行身份验证,并在后续请求中识别用户身份。例如,用户登录银行网站后,银行网站会为用户生成一个包含身份信息的 Cookie,用户后续的转账、查询等操作,网站都会根据这个 Cookie 来确认用户身份。
  2. 攻击者构造恶意链接:攻击者精心构造一个包含恶意操作的链接,比如转账到攻击者账户的链接。这个链接的请求地址是目标网站的合法操作地址,但是参数被攻击者篡改,包含了恶意指令。
  3. 诱导受害者访问:攻击者通过各种手段,如发送恶意邮件、在社交平台发布诱人的消息等,诱导受害者点击这个恶意链接。当受害者点击链接时,由于受害者的浏览器中保存着目标网站的身份验证信息(如 Cookie),浏览器会自动带上这些信息向目标网站发送请求。
  4. 目标网站执行恶意操作:目标网站接收到请求后,根据附带的身份验证信息,认为请求来自合法用户,从而执行了链接中的恶意操作,如转账、修改密码等,而受害者对此毫不知情。

产生条件

  1. 目标网站存在敏感操作:网站提供了如转账、修改密码、删除重要数据等敏感操作,这些操作仅应在用户主动发起且确认的情况下执行。
  2. 身份验证信息存储方式不当:网站依赖 Cookie 或其他简单的身份验证机制,且这些验证信息在用户浏览器中存储,容易被攻击者利用。例如,Cookie 没有设置 HttpOnly 属性,使得攻击者可以通过 JavaScript 读取 Cookie 内容,进一步利用。
  3. 缺乏有效的防御机制:网站没有对请求来源进行严格验证,无法识别出请求是否来自合法用户的主动操作,还是被攻击者诱导的恶意请求。

产生的危害

  1. 经济损失:在金融类网站中,攻击者利用 CSRF 漏洞进行转账操作,直接导致用户的资金被盗取,给用户带来严重的经济损失。
  2. 隐私泄露:攻击者可以修改用户的个人信息,如在社交网站上修改用户的隐私设置,将原本私密的信息公开,造成用户隐私泄露。
  3. 账号被盗用:通过修改用户密码,攻击者可以轻松登录用户账号,进一步控制用户的账户,发布恶意信息,甚至利用用户的社交关系进行诈骗等活动。

靶场练习

  1. 搭建靶场环境:使用开源的 Web 安全靶场,在这里使用的是DVWA(Damn Vulnerable Web Application)。在虚拟机环境中部署 DVWA,设置好相关的数据库和配置文件。
  2. 选择 CSRF 漏洞模块:进入 DVWA 的 CSRF 漏洞测试模块,将安全级别设置为 “Low”,这个级别下的漏洞比较容易复现。
  3. 构造恶意链接:查看low模式下的源代码是否有进行过滤,可以查看没有进行过滤校验在该模块中,有一个修改用户密码的功能。攻击者可以通过抓包工具(如 Burp Suite)获取正常修改密码的请求包,然后修改其中的密码参数,构造出一个恶意链接。正常的修改密码请求是,攻击者将其修改为http://10.0.0.100:90/DVwa-master/vulnerabilities/csrf/?password_new=123456333&password_conf=123456333&Change=Change#。
  4. 诱导受害者访问:假设受害者已经登录了 DVWA 且浏览器中保存了登录的 Cookie。攻击者将构造好的恶意链接发送给受害者,当受害者点击链接时,浏览器会自动带上 Cookie 向 DVWA 发送请求,从而实现密码修改,完成 CSRF 攻击的复现。
  5. 防御措施验证:将 DVWA 的安全级别提升到 “Medium” 或 “High”,再次尝试上述攻击。在 “Medium” 级别,网站可能会增加一些简单的防御机制,如在请求中增加一个随机的 Token,验证 Token 的合法性。攻击者会发现攻击无法成功,从而理解防御 CSRF 漏洞的原理和方法。

post 请求csrf案例

  1. 登录凡诺后台修改密码:
    操作描述:攻击者首先正常登录凡诺后台系统,进入修改密码的功能页面。在这个页面中,攻击者会输入新密码并提交修改请求,这一步的目的是触发系统的修改密码操作,以便后续利用这个操作来构造 CSRF 攻击。在这里我修改的密码是1234567。
    重要性:通过这一步,攻击者可以熟悉修改密码的流程和页面布局,同时为后续抓包获取必要的请求信息做准备。
  2. 使用 Burp Suite 抓包

    抓包工具介绍:Burp Suite 是一款广泛使用的 Web 应用程序安全测试工具,它可以拦截、修改和分析 HTTP 请求和响应。攻击者利用 Burp Suite 的抓包功能,捕获在凡诺后台修改密码时浏览器发送的请求。
    请求类型与关键信息
    没有 Token 值:Token 是一种用于防止 CSRF 攻击的机制,通常是服务器生成的一个随机字符串,会在每次请求中附带。如果请求中没有 Token 值,说明该系统在修改密码这个功能上可能没有实现有效的 CSRF 防护,这为攻击者提供了可乘之机。
    POST 请求:抓包结果显示修改密码的请求是一个 POST 请求。POST 请求通常用于向服务器提交数据,在修改密码的场景中,新密码等重要信息会通过 POST 请求发送到服务器。
  3. 使用 Burp Suite 生成 POC(Proof of Concept,概念验证)

    POC 生成过程
    1. 通过分析生成的 POC 代码,可以看到请求的详细信息,包括请求的 URL、请求方法(POST)、请求参数(如用户名、新密码等)。
      在 Burp Suite 中,攻击者可以利用抓包得到的请求信息,使用其内置的功能生成一个 POC。这个 POC 本质上是一段可以模拟用户修改密码请求的代码,通常是一段 JavaScript 代码。

      将修改后的 JavaScript 代码复制到一个新的 HTML 文件中。HTML 文件可以在浏览器中打开,当浏览器加载这个 HTML 文件时,其中的 JavaScript 代码会自动执行,向凡诺后台服务器发送修改密码的请求。
    • 修改代码并创建 HTML 文件:这里将1234567的密码修改为12345678,将代码放在单独的文件中
    • 废弃 Burp Suite 数据包:在完成 HTML 文件的创建后,攻击者不再需要之前在 Burp Suite 中捕获的原始数据包,因此可以将其废弃。
  4. 诱导被攻击者打开 HTML 文件

    • 攻击原理:当被攻击者在已经登录凡诺后台的状态下打开攻击者构造的 HTML 文件时,浏览器会执行其中的 JavaScript 代码,向凡诺后台服务器发送修改密码的请求。由于被攻击者的浏览器中保存着登录凡诺后台的会话信息(如 Cookie),服务器会认为这个请求是由合法用户发起的,从而执行修改密码的操作。在这里我们在本机环境中进行演示。
    • 攻击成功标志:如果被攻击者成功打开了 HTML 文件,并且服务器接受了修改密码的请求,那么攻击就成功了。攻击者可以通过检查凡诺后台的密码是否被修改来确认攻击结果。
    • 此时输入1234567发现密码错误,已经更改为12345678

防御措施

  1. 验证请求来源

  • Referer 验证:服务器可以通过检查请求头中的 Referer 字段来判断请求的来源。如果 Referer 字段的值不符合预期,说明请求可能来自恶意网站,可以拒绝该请求。但需要注意的是,Referer 字段可以被篡改,因此这种方法并不是绝对安全的。
  • 同源策略:现代浏览器遵循同源策略,只有来自同一源(协议、域名和端口都相同)的页面才能直接访问另一个页面的资源。服务器可以利用这一特性,确保请求来自合法的源。
  1. 使用 CSRF Token
  • 生成 Token:服务器在用户访问包含敏感操作的页面时,生成一个随机且唯一的 CSRF Token,并将其存储在服务器端(如会话中),同时将 Token 嵌入到页面中(如隐藏表单字段或请求头)。
  • 验证 Token:当用户提交请求时,客户端需要将 Token 一并发送给服务器。服务器验证客户端提交的 Token 与服务器端存储的 Token 是否一致,如果一致则认为请求合法,否则拒绝请求。
  1. 设置 SameSite 属性

SameSite 是 Cookie 的一个属性,用于控制 Cookie 在跨站请求中的传递。可以将 Cookie 的 SameSite 属性设置为 “Strict” 或 “Lax”,以限制 Cookie 只在同源请求或同站请求中传递,从而减少 CSRF 攻击的风险。

双重提交 Cookie

服务器在用户访问页面时,生成一个随机的 Token 并将其存储在 Cookie 中,同时将该 Token 嵌入到页面的表单字段或请求头中。当用户提交请求时,服务器会比较 Cookie 中的 Token 和请求中携带的 Token 是否一致,如果一致则认为请求合法。

结语

CSRF 漏洞虽然隐蔽,但只要开发者和用户提高安全意识,采取有效的防范措施,就能大大降低其带来的风险。对于开发者来说,要在代码层面增加对请求来源的验证,使用 Token 等技术防止恶意请求。对于用户而言,要谨慎点击不明链接,尤其是在已登录重要网站的情况下。网络安全是一场持久战,需要我们不断学习和实践,共同守护网络空间的安全。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

buuuctf_秘密文件

题目: 应该是分析流量包了,用wireshark打开 我追踪http流未果,分析下ftp流 追踪流看看 用户 “ctf” 使用密码 “ctf” 登录。 PORT命令用于为后续操作设置数据连接。 LIST命令用于列出 FTP 服务器上目录的内容,但在此日志中未…

课程设计|结构力学

课 程 设 计 第一部分 (结构力学) 2、两种结构在静力等效荷载作用下,内力有哪些不同?(分析比较) 1/2 1 1 1 1 1 1/2 1/4 11(1/2) 1/4 图1求解过程及结果: 轴力图: 内力计算 单位&…

跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)

Movie Gen:A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型,包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…

keil5如何添加.h 和.c文件,以及如何添加文件夹

1.简介 在hal库的编程中我们一般会生成如下的几个文件夹,在这几个文件夹内存储着各种外设所需要的函数接口.h文件,和实现函数具体功能的.c文件,但是有时我们想要创建自己的文件夹并在这些文件夹下面创造.h .c文件来实现某些功能,…

2025-1-28-sklearn学习(47) (48) 万家灯火亮年至,一声烟花开新来。

文章目录 sklearn学习(47) & (48)sklearn学习(47) 把它们放在一起47.1 模型管道化47.2 用特征面进行人脸识别47.3 开放性问题: 股票市场结构 sklearn学习(48) 寻求帮助48.1 项目邮件列表48.2 机器学习从业者的 Q&A 社区 sklearn学习(47) & (48) 文章参考网站&…

DeepSeek 云端部署,释放无限 AI 潜力!

1.简介 目前,OpenAI、Anthropic、Google 等公司的大型语言模型(LLM)已广泛应用于商业和私人领域。自 ChatGPT 推出以来,与 AI 的对话变得司空见惯,对我而言没有 LLM 几乎无法工作。 国产模型「DeepSeek-R1」的性能与…

【Qt5】声明之后快速跳转

我在网上看到的方法是ctrlL(?不是很清楚,因为我跳转不成功!) 另外一种就是鼠标点击跳转的。 首先,声明私有成员函数 此时,一般步骤应该是在构造函数里面继续,写函数的框架什么的。于…

flowable expression和json字符串中的双引号内容

前言 最近做项目,发现了一批特殊的数据,即特殊字符",本身输入双引号也不是什么特殊的字符,毕竟在存储时就是正常字符,只不过在编码的时候需要转义,转义符是\,然而转义符\也是特殊字符&…

新一代搜索引擎,是 ES 的15倍?

Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码…

事务01之事务机制

事务机制 文章目录 事务机制一:ACID1:什么是ACID2:MySQL是如何实现ACID的 二:MySQL事务机制综述1:手动管理事务2:事务回滚点3:事务问题和隔离机制(面试)3.1:事…

NX/UG二次开发—CAM—快速查找程序参数名称

使用UF_PARAM_XXX读取或设置参数时,会发现程序中有一个INT类型参数param_index,这个就是对应程序中的参数,比如读取程序余量,则param_index = UF_PARAM_STOCK_PART,读取程序的加工坐标系则param_index = UF_PARAM_MCS等等。 你需要读取什么参数,只要只能在uf_param_indic…

X86路由搭配rtl8367s交换机

x86软路由,买双网口就好。或者单网口主板,外加一个pcie千兆。 华硕h81主板戴尔i350-T2双千兆,做bridge下载,速度忽高忽低。 今天交换机到货,poe供电,还是网管,支持Qvlan及IGMP Snooping&#xf…

【LLM-agent】(task1)简单客服和阅卷智能体

note 一个完整的agent有模型 (Model)、工具 (Tools)、编排层 (Orchestration Layer)一个好的结构化 Prompt 模板,某种意义上是构建了一个好的全局思维链。 如 LangGPT 中展示的模板设计时就考虑了如下思维链:Role (角色) -> Profile(角色…

ZZNUOJ(C/C++)基础练习1021——1030(详解版)

目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 (C语言版,三目运算)C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…

2025 年,链上固定收益领域迈向新时代

“基于期限的债券市场崛起与 Secured Finance 的坚定承诺” 2025年,传统资产——尤其是股票和债券——大规模涌入区块链的浪潮将创造历史。BlackRock 首席执行官 Larry Fink 近期在彭博直播中表示,代币化股票和债券将逐步融入链上生态,将进一…

基于互联网+智慧水务信息化整体解决方案

智慧水务的概述与发展背景 智慧水务是基于互联网、云计算、大数据、物联网等先进技术,对水务行业的工程建设、生产管理、管网运营、营销服务及企业综合管理等业务进行全面智慧化管理的创新模式。它旨在解决水务企业分散经营、管理水平不高、投资不足等问题。 水务…

FIDL:Flutter与原生通讯的新姿势,不局限于基础数据类型

void initUser(User user); } 2、执行命令./gradlew assembleDebug,生成IUserServiceStub类和fidl.json文件 3、打开通道,向Flutter公开方法 FidlChannel.openChannel(getFlutterEngine().getDartExecutor(), new IUserServiceStub() { Override void…

文件读写操作

写入文本文件 #include <iostream> #include <fstream>//ofstream类需要包含的头文件 using namespace std;void test01() {//1、包含头文件 fstream//2、创建流对象ofstream fout;/*3、指定打开方式&#xff1a;1.ios::out、ios::trunc 清除文件内容后打开2.ios:…

cf1000(div.2)

Minimal Coprime最小公倍数 输入&#xff1a; 6 1 2 1 10 49 49 69 420 1 1 9982 44353 输出&#xff1a; 1 9 0 351 1 34371 代码

【2025年数学建模美赛E题】(农业生态系统)完整解析+模型代码+论文

生态共生与数值模拟&#xff1a;生态系统模型的物种种群动态研究 摘要1Introduction1.1Problem Background1.2Restatement of the Problem1.3Our Work 2 Assumptions and Justifications3 Notations4 模型的建立与求解4.1 农业生态系统模型的建立与求解4.1.1 模型建立4.1.2求解…