跨站请求伪造漏洞(CSRF)

news2025/1/19 14:23:41

什么是CSRF

  • CSRF(Cross-Site Request Forgery),也被称为 one-click attack 或者 session riding,即跨站请求伪造攻击。

漏洞原理

  • 跨站请求伪造漏洞的原理主要是利用了网站对用户请求的验证不严谨。攻击者会在恶意网站中构造一个伪造请求,然后诱使用户访问该恶意网站,触发浏览器自动发送该伪造请求给目标网站。因为目标网站无法区分这个请求是用户自己发起的还是攻击者伪造的,并且浏览器会自动携带用户的认证信息(如cookie),所以目标网站会认为这个请求是合法的,从而执行了攻击者预期的恶意操作。
  • 跨站请求伪造漏洞原理要点总结:
    1. 用户在访问恶意网站时,会触发浏览器自动发送伪造请求给目标网站。
    2. 目标网站无法区分用户自己发起的请求和攻击者伪造的请求。
    3. 浏览器会自动携带用户的认证信息(如cookie),使得目标网站认为这个请求是合法的。
    4. 攻击者通过这种方式执行了未经授权的操作,实现攻击目标。

攻击过程

  1. 攻击者准备:攻击者首先需要构造一个恶意的请求,该请求通常是一个伪造的HTTP请求,包含攻击者想要执行的操作,如修改用户信息、发送消息等。
  2. 诱导受害者:攻击者需要诱导受害者访问包含恶意请求的网页或链接。这通常通过发送诱导邮件、社交工程或其他方式引诱用户点击恶意链接来实现。
  3. 受害者执行请求:当受害者点击了包含恶意请求的链接或访问了恶意网页时,浏览器会自动发送包含恶意请求的HTTP请求到目标网站,由于受害者已经在目标网站中登录,因此服务器会认为这个请求是合法的,并执行其中的操作。
  4. 攻击成功:目标网站接收到恶意请求后,会执行其中的操作,如修改用户信息、发送消息等。由于请求是以受害者的身份发送的,因此服务器无法区分正常用户的请求和攻击者的请求,导致攻击成功。

漏洞危害

  • 强制用户执行恶意操作:攻击者利用CSRF漏洞可以强制用户在其不知情的情况下执行恶意操作,例如修改用户信息、发起转账等操作。
  • 盗取用户信息:攻击者可以利用CSRF漏洞来发送恶意请求,以获取用户的敏感信息,如个人资料、账户信息等。
  • 发布恶意内容:攻击者可以利用CSRF漏洞在用户身份下发布恶意内容,传播虚假信息或恶意链接,从而对用户和网站造成损害。
  • 破坏网站功能:攻击者利用CSRF漏洞可以对网站的功能进行恶意操作,比如删除用户数据、更改设置等,导致网站无法正常运行。
  • 造成经济损失:通过CSRF漏洞进行恶意操作可能导致用户或网站遭受经济损失,比如盗取资金、转账等操作。

攻击类型

  1. 针对用户会话:攻击者通过伪造用户请求,实现对用户当前已登录会话的操作,如修改用户密码、发送消息、转账等。
  2. 针对验证信息:攻击者在用户浏览器中设置恶意网站,当用户访问恶意网站时,发送包含受害者身份验证信息的请求到目标网站,从而实现攻击。
  3. 针对敏感操作:攻击者通过伪造用户请求,实现对网站中敏感操作的执行,如删除账号、修改支付信息等。
  4. 针对POST请求:攻击者通过伪造POST请求,欺骗用户提交表单,从而实现对目标网站的攻击。
  5. 针对非GET请求:CSRF漏洞通常涉及非GET请求,攻击者可以构造POST、PUT、DELETE等请求来执行攻击操作。
  6. 针对用户权限:攻击者可以通过CSRF漏洞提升用户权限,执行一些高权限操作。

攻击条件

  • 用户已经在目标网站中进行了认证,并且在同一浏览器会话中保持着登录状态。
  • 攻击者可以构造一个特定的恶意请求,该请求可以执行某种敏感操作,比如修改用户信息、转账、删除数据等。
  • 攻击者能够诱使用户访问包含恶意请求的链接或页面,例如通过社会工程学手段、钓鱼网站等方式。
  • 目标网站没有足够的CSRF防护措施,例如缺乏CSRF令牌、Referer检查、双重提交Cookie等。

利用工具

短链接工具:https://urlc.net/

高危触发点

  • 论坛交流、用户中心、反馈留言、交易管理、后台管理
  • 订阅、评论、管理员添加、密码修改、资料修改、删除用户或者信息

绕过方式

  1. 利用社会工程学:攻击者可能会通过发送钓鱼邮件或诱使用户点击恶意链接的方式,引导用户在已登录的情况下访问恶意网站,从而触发CSRF攻击。这种方法可以绕过CSRF令牌的验证,因为用户本身是在已登录状态下发起请求的。
  2. 利用跨站脚本攻击(XSS):攻击者可以利用XSS漏洞注入恶意脚本到受害者的浏览器中,通过触发恶意脚本来发起CSRF攻击。这种方式可以利用受害者的会话信息,绕过CSRF令牌的验证。
  3. 利用DNS重绑定攻击:攻击者可能通过DNS重绑定攻击,将恶意网站的域名指向目标网站的IP地址,以绕过同源策略,从而发起CSRF攻击。
  4. 利用代理服务器:攻击者可以通过代理服务器来修改请求头中的Referer字段,绕过服务器端对Referer字段的验证,从而发起CSRF攻击。

漏洞挖掘

  1. 最简单的方法就是抓取一个正常请求的数据包,如有Referer字段和token,可能存在CSRF漏洞。
  2. 如有Referer字段,但去掉Referer字段后重新提交,如提交后还有效,基本可以确定存在CSRF漏洞。

实验分析

GET和POST请求类型区别

  • GET请求:通过URL传递参数,参数会显示在URL中,例如:http://example.com/search?keyword=apple
  • POST请求:通过请求体传递参数,参数不会显示在URL中,更适合传递敏感数据,例如:表单提交或文件上传。

low
  1. 获取到GET类型请求URL。

image.png

  1. 生成csrf poc。

image.png

  1. 利用生成的csrf html,制作web服务器,然后诱惑用户进行点击。

image.png

  1. 登录的情况下点击此链接。

image.png
image.png

  1. 用户受到诱惑点击后密码成功修改。

image.png

  1. 用户使用原本密码发现无法登录,密码成功修改。

image.png


medium
  • HTTP请求包中的Referer是一个头部字段,用来指示请求的来源页面 URL。当用户点击链接或提交表单时,浏览器会在发送请求时自动添加Referer字段,告诉服务器该请求来自哪个页面。

high
  1. 源码分析主要区别是增加了一个token值的校验,每次登录都会校验token是否正确,若想要执行更改密码操作必须知道正常用户的token。
  2. 利用xss漏洞与csrf漏洞配合,通过xss漏洞获得token再利用csrf漏洞结合拿到的token完成攻击。获取到token后不要点击确定,否则token将会失效。
<iframe src="../csrf/" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>

image.png

  1. 拦截修改密码的数据包,并生成一个csrf poc。将token值进行替换,并制作一个web服务器让用户去访问。

image.png
image.png
image.png
image.png


防御措施

  1. 验证来源:在处理请求时,验证请求的来源是否合法。可以通过检查请求头中的Referer字段或使用同源策略等方式来验证请求的来源是否是可信的。
  2. 使用CSRF Token:为每个用户生成一个唯一的CSRF Token,并将该Token添加到每个表单提交或敏感操作请求中。服务器在接收请求时验证该Token的有效性,如果Token无效,则拒绝该请求。
  3. 使用同源策略:利用浏览器的同源策略,确保只有同一域名下的页面才能发起对当前页面的请求。这样可以有效防止恶意网站发起CSRF攻击。
  4. 设置Cookie属性:在Cookie中使用Secure、HttpOnly和SameSite属性来增加Cookie的安全性,防止被恶意网站利用进行CSRF攻击。
  5. 避免使用GET请求:敏感操作不应该使用GET请求,因为GET请求的参数会被保存在浏览器历史记录和日志文件中,容易被恶意网站获取。
  6. 避免自动登录:避免在用户进行敏感操作时自动登录,用户需要手动输入密码进行确认,增加安全性。
  7. 定期审计和测试:定期对网站进行安全审计和漏洞测试,及时发现并修复潜在的CSRF漏洞。

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

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

相关文章

RAG知识分享

文章目录 博客详细讲解视频点击查看高清脑图 1.为什么要做RAG1.1. 解决幻觉问题1.1.1 直接输入问题1.1.2. 问题 相关知识 2. 什么是RAG2.1. 基本概念2.2. 基本RAG方法2.2.1. 知识预处理2.2.2. 知识检索2.2.3. 答案生成 3. RAG 与 Long Context3.1. Long Context3.2. RAG 与Lon…

你为什么选择程序员这个职业?

注意&#xff0c;今天的这篇文章&#xff0c;我只是对程序员这份工作所需要面对的问题挑选一些有意思的话题讲讲我的理解&#xff0c;并不是对程序员的职业规划进行分享。本文分为入行前和入行后两个部分&#xff0c;分别聊聊。 入行前 所谓入行前&#xff0c;其实就是指还是学…

力扣面试150: O(1) 时间插入、删除和获取随机元素 HashMap结合数组

Problem: 380. O(1) 时间插入、删除和获取随机元素 文章目录 思路复杂度Code 思路 &#x1f469;‍&#x1f3eb; 三叶题解 复杂度 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( n ) O(n) O(n) Code class RandomizedSet {static int[] nums new int[200_010];//存…

RabbitMQ小记

参考书籍&#xff1a;朱忠华的《RabbitMQ实战指南》 一、基础概念 1.Exchange 1.1 创建方法的参数&#xff0c;exchangeDeclare() exchange&#xff1a;交换器的名称type&#xff1a;交换器的类型durable&#xff1a;是否持久化&#xff0c;true代表持久化。&#xff08;持…

iperf图形化打流工具JPerf2.0使用教程(1):相关设置介绍

0 前言 iperf是一个很常用的网络性能测试工具&#xff0c;经常来进行打流测试&#xff0c;用来查看丢包率、抖动时间等网络通信情况&#xff0c;但它是使用命令行操作的&#xff0c;使用起来不太友好。本文介绍基于iperf的图形化操作工具JPerf2.0。 1 JPerf2.0的客户端和服务…

蓝桥杯速成5-AD/DA模数转换

一、原理图 上图可知该芯片使用的是iic时序&#xff0c;而不是51单片机的xpt2046时序&#xff0c;iic我们都很熟悉了吧 并且大赛还提供了我们iic底层驱动代码 左上角有AIN0-4四个转换输入通道&#xff0c;和AOUT一个输出通道&#xff0c;由控制字节选择 地址字节&#xff1a;0x…

Stable Diffusion本地部署教程

Stable Diffusion本地部署的步骤一般包括准备环境、下载Stable Diffusion模型和依赖库、配置运行参数等。下面是一个通用的教程&#xff0c;用以在计算机上本地部署Stable Diffusion。 准备环境 1. 确保硬件满足最低要求&#xff1a; - 一块NVIDIA GPU&#xff0c;至少4GB…

LLMOps快速入门,轻松开发部署大语言模型

大家好&#xff0c;如今我们能够与ChatGPT进行轻松互动&#xff1a;只需输入提示&#xff0c;按下回车&#xff0c;就能迅速得到回应。然而&#xff0c;这个无缝互动的底层&#xff0c;是一系列复杂而有序的自动执行步骤&#xff0c;即大型语言模型运营&#xff08;LLMOps&…

【数据分析面试】11. 计算账户关闭率(SQL:评估不同查询方法的性能效率)

题目 给定一个账户状态表&#xff0c;编写一个查询以获取在2019年12月31日活跃并在2020年1月1日关闭的账户所占的百分比&#xff0c;以及在2019年12月31日活跃的总账户数。每个账户只有一条每日记录&#xff0c;显示其在当天结束时的状态。 注意&#xff1a;将结果四舍五入到…

在同一个局域网如何共享打印机和文件

1.在连接了打印机的主机上设置 1.1启用windows共享 打开网络与共享中心&#xff0c;点击“更改高级共享设置” 选择&#xff1a; “启用网络发现”“启用文件和打印机共享”“启用共享以便可以访问网络的用户可以读取和写入公用文件夹中的文件” 打开控制面板&#xff0c;选…

STM32-02基于HAL库(CubeMX+MDK+Proteus)GPIO输出案例(LED流水灯)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的GPIO输出代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 在完成开发环境搭建之后&#xff0c;开始使用STM32GP…

python标准数据类型--列表常用方法

在Python中&#xff0c;列表&#xff08;List&#xff09;是一种非常常用的数据类型&#xff0c;用于存储一组有序的元素。Python提供了许多内置方法来操作列表&#xff0c;使得对列表的处理变得非常灵活和便捷。在本篇博客中&#xff0c;我们将介绍一些常用的列表方法&#xf…

Python | Leetcode Python题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; INT_MAX 2 ** 31 - 1 INT_MIN -2 ** 31class Automaton:def __init__(self):self.state startself.sign 1self.ans 0self.table {start: [start, signed, in_number, end],signed: [end, end, in_number, end],in_number: [end, end,…

基于Java+SpringBoot+vue3点餐/外卖管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

linux 安装 pptp 协议

注意&#xff1a;目前iOS已不支持该协议 yum -y install ppp wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/pptpd-1.4.0-2.el7.x86_64.rpm yum -y install pptpd-1.4.0-2.el7.x86_64.rpm vi /etc/pptpd.conf 去除 localip 和 remoteip的注释 …

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

Linux&#xff1a;进程等待究竟是什么&#xff1f;如何解决子进程僵尸所带来的内存泄漏问题&#xff1f; 一、进程等待的概念二、进程等待存在的意义三、如何进行进程等待3.1 wait()是实现进程等待1、wait()原型2. 验证wait()能回收僵尸子进程的空间 3.2 waitpid()实现进程等待…

阿里云2核2G服务器租用价格,真便宜

阿里云2核2G服务器配置优惠价格61元一年和99元一年&#xff0c;61元是轻量应用服务器2核2G3M带宽、50G高效云盘&#xff1b;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large&#xff0c;2核2G、3M固定带宽、40G ESSD entry系统盘&#xff0c;阿里云活动链接 aliyunfuwuqi.…

真--开源个人收款系统方案--部署方案

继上文:真--个人收款系统方案,今天主要推出部署方案 1.下载源码 首先需要下载源码,源码地址:PayServer: 个人收款系统方案 - Gitee.com 并且pip下载依赖库: Flask2.5.1 Flask-Cors3.0.10 gevent23.6.0 websockets10.9 urllib31.26.1 2.修改配置 路径下有两个py文件&#xf…

【Frida】【Android】09_爬虫之Socket

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

机器学习笔记 - 文字转语音技术路线简述以及相关工具不完全清单

一、TTS技术简述 今天的文本到语音转换技术(TTS)的目标已经不仅仅是让机器说话,而是让它们听起来像不同年龄和性别的人类。通常,TTS 系统合成器的质量是从不同方面进行评估的,包括合成语音的清晰度、自然度和偏好,以及人类感知因素,例如可理解性。 1、技术路线 (1)基…