CSRF(Cross-site request forgery)

news2024/9/23 11:19:15

一、概述

1、CSRF定义

CSRF是一个web安全漏洞,该漏洞通过引诱用户来执行非预期的操作。该漏洞使得攻击者能够绕过同源策略,同源策略是一种用来阻止不同网站相互干扰的一种技术。

CSR跨站请求伪造,攻击者利用服务器对用户的信任,从而欺骗受害者去服务器上执行受害者不知情的请求。在CSRF攻击场景中,攻击者会伪造一个请求(一般为链接),然后欺骗用户进行点击,用户一旦点击,整个攻击也就完成了。所以CSRF攻击也被称为”one click"攻击。

2、CSRF与XSS的区别

CSRFXSS

CSRF是利用服务器对用户的信任。

XSS是利用用户对服务器的信任。

CSRF攻击,攻击者会伪造一个用户发送给服务器的正常链接,其核心是要让已登录(已认证)的用户去发请求。CSRF不需要知道用户的cookie,CSRF自己并不会发送请求给服务器,一切交给用户。XSS攻击,主要是让脚本在用户浏览器上执行,服务器端仅仅只是脚本的载体,本身服务器端不会受到攻击利用
CSRF是攻击者将预先在自己攻击服务器的页面植入恶意代码,诱使受害者访问。在受害者不知情的情况下执行了恶意代码。而攻击服务器是独立的域名 和IP地址。XSS是将恶意代码 植入被攻击的服务器,利用用户对服务器的信任完成攻击。

3、CSRF攻击的影响

攻击者能够使用户无意中执行一些操作。例如,可能改变用户的邮箱地址、改变用户的账户密码,或者转移用户资金 。根据操作的本质,攻击者可能获取对账户的完全控制。如果受害者是应用的特权账户,那么攻击者可能拥有对应用程序数据和功能的全面控制。

4、CSRF攻击条件

CSRF攻击必须满足以下三个关键条件:

  • 服务器端没有对操作的来源进行判断 。IP地址,refer页面
  • 受害者处于登录状态,但是攻击者无法拿到cookie。
  • 攻击者需要找到一条可以修改或获取敏感信息的请求。

一个相关的行动。应用程序中存在一个攻击者有理由诱导的操作。这可能是一个特权操作(例如修改其他用户的权限),也可能是针对用户特定数据的任何操作(例如更改用户自己的密码)。

基于cookie的会话处理。执行该操作涉及发出一个或多个HTTP请求,应用程序仅依赖会话cookie来识别发出请求的用户。没有其他机制可以跟踪会话或验证用户请求。

没有不可预测的请求参数。执行该操作的请求不包含任何攻击者无法确定或猜测其值的参数。例如,当导致用户更改密码时,如果攻击者需要知道现有密码的值,则该功能不容易受到攻击。

5、攻击场景

1)用户A正常购物

A在购物网站修改个人资料,正常情况下修改资料的第一步是登录个人账号,A登录后对相关参数进行 修改:

收件人:A

收件人电话:13423452345

收件地址 :花田镇211号

A编辑好修改的内容,点击提交。

此时提交的URL为

http://www.pxx.com/member/edit.php?name=A&phone=13423452345&addr="花田镇211号"&submit=submit

2)攻击者尝试截获A购买商品

这时,B想要截获A的包裹,所以他要去修改A的地址,可是B没有A的账号权限。

B发现该网站存在CSRF漏洞
B先确定A处于登录状态
接着B修改个人信息的请求伪造,然后引诱A在登录状态下点击。

此时,A提交的url请求是:

http://www.pxx.com/member/edit.php?name=B&phone=15354325432&addr="欢乐镇345号"&submit=submit

这个请求跟正常修改请求一模一样,而且是A自己账号操作的,所以修改成功,B达到了攻击目的。

3)为什么攻击者能够成功呢 ?

  • 条件1:购物网站没有对个人请求进行CSRF防护处理,导致该请求很容易伪造。因此,我们判断一个网站是否存在CSRF漏洞 ,其实就是判断其对关键信息(尤其是密码等敏感信息)的操作(增删改)是否容易被伪造。
  • 条件2:A处于登录状态,并且点击了B发送的埋伏 链接。

4)CSRF+钓鱼

CSRF漏洞单看之下的利用比较局限,亦或是用户根本不点这个链接,那么攻击不会成功。

B觉得直接发链接太明显,会被 A轻易识破,于是考虑其他方法。B利用Burpsuit的功能模块做了一个钓鱼网站:

使用burpsuit的engagement tools制作一个CSRF攻击的钓鱼网站
B发给A这个页面,引诱A在 没有退出购物网站的情况下访问钓鱼页面;
A点击了钓鱼网站中的恶意表单,从而在不知情的情况下提交了修改信息的请求。

CSRF是借助受害者的权限完成攻击,攻击者全程没有拿到受害者的权限 。而XSS一般直接通过获得用户权限实施破坏。CSRF比起XSS来说不是很流行,所以对于CSRF的防护措施比较少 ,因此CSRF 比XSS更具有危险性。

二、攻击流程

1、DVWA初级演示

1)存在CSRF漏洞

进入DVWA将DVWA Security设为 low,然后进入CSRF这里。

  • 页面功能点:修改密码,直接输入新密码并再次输入新密码确认即可修改。
  • 漏洞利用条件:这里没有对旧密码的验证,因此,攻击者B才有伪造请求的可能。如果有旧密码的验证,B并不知道A的账号密码,此时B无法伪造一个完整的请求。
  • 攻击防护:验证旧密码或者采用短信验证

2)登录admin账户

登录无效账户或错误密码可以观察下页面回显

3)触发修改密码功能点

4)抓包分析数据报文

 GET请求为当前登录的用户修改密码,PHPSESSIONID用于用户身份校验。

5)burp生成CSRF POC

右击engagement tools->generate CSRF poc

6)构造链接并引诱用户点击

将生成的HTML页面复制到攻击服务器下,访问地址http://192.168.254.2/csrf.html

让登录的用户去点击攻击者构造的链接,就可以在用户不知情的情况下修改密码。

Fiddler抓包看到:编号221的是攻击者在攻击服务器上 构造的钓鱼页面。用户在已登录或已认证状态下点击了钓鱼页面,触发了攻击者构造的链接,触发用户修改密码请求,攻击者成功修改了用户密码。

根据Refer我们可以看到是从192.168.1.108跳转过来的。

如何引诱A去点击呢?

比如做个广告、搞点活动、用社会工程学原理,或者说攻击者B和用户A是微信好友,直接微信发链接给A,A恰好是登录状态又在浏览器点了B发过来的链接。或者说你和在线客服聊着天,让在线客服帮忙点下链接,帮忙投投票,投票链接。

可能失败的点

有可能当前的用户并没有登录某服务器或者它压根就没有服务器的账号。

这个就是广撒网了,真实的攻击情况就是广撒网。比如我去改QQ登录密码、163邮箱登录密码。

当然前提是我得找得到CSRF漏洞。CSRF 漏洞怎么体现呢,就是请求比较容易构造并且没有 做校验。找到了CSRF漏洞我就构造修改密码的请求并 通过制作钓鱼网站发给用户诱使用户点击。

如果用户恰好处于登录状态并点击了钓鱼网站链接。

7)CSRF结合XSS 漏洞

只是学习演示下XSS+CSRF漏洞的结合利用,实际中如果有XSS漏洞通过XSS能够直接获取用户cookie,没必要再用CSRF。

  • XSS payload
<a href="http://192.168.254.1:8080/vulnerabilities/csrf/?password_new=123123321&password_conf=123123321&Change=Change">
<img src="http://192.168.1.108/111.gif"/></a>

修改前端页面文本框字数限制并将XSS payload粘贴进去

 

  • XSS钓鱼
    只要用户点了这张图,密码自动就修改了。

也可将攻击服务器的页面地址通过DVWA的XSS存储型漏洞植入页面中

当DVWA的 当前登录账户去查看XSS漏洞页面时,点击即可完成攻击。

主要是获取到用户的SESSIONID,让服务器去信任用户。引诱用户去点击。

注意:

正常情况下我们有XSS漏洞直接利用XSS漏洞就好,正是因为没有XSS 漏洞我们才需要CSRF,我们就需要自己制作一个钓鱼页面,可以搞个图片,整个 超链接,还可以写一段文字 或者整一些优惠卷领取、礼品赠送等诱使用户点击,比如点此按钮可能领取10元红包,或者 领优惠卷链接,为了答谢新老用户,公司推出XXX活动,加入 粉丝群即可领取优惠卷20元。核心在于诱使用户主动 点。

2、DVWA Security 中级

1)中级于低级的区别

看看源代码,看看medium做了什么限制,发现是加了REFERER的判断

在页面源码中,使用 stripos() 函数来检查当前请求的 HTTP Referer 头部(即来源页面的 URL)是否包含当前服务器的域名。

stripos() 是 PHP 中的一个字符串查找函数,用于在字符串中查找子字符串(不区分大小写)第一次出现的位置。如果找到子字符串,则返回它在主字符串中的位置;如果没有找到,则返回 false

2)burp改REFERER绕过

绕过限制,通过Burp改包,修改REFERER

虽然我们改掉了密码 ,但是这是不对的。 我们是自己本地在模拟,所以使用burpsuit抓包改下REFERE就好了 。但是实际情况下,用户不可能访问的时候去Burp抓包改REFERE。

CSRF的目标是把链接交给用户去点,而不是我们自己在这儿点,如果把链接交给用户,用户是不会去帮我们改REFERE的。

所以我们得想另外的办法让REFERE包含服务器端的IP地址(这里是192.168.254.1)。

3)正确解决思路

构造的攻击页面命名包含受害者主机IP名,这样REFERE就能包含主机名。只要REFERE中包含受害者主机的IP就能绕过。

在源码中stripos()函数是若匹配,只要REFERE中包含受害者主机IP就可以通过验证。

攻击页面构造poc

在 攻击服务器上创建一个新的HTML页面,并命名 为:change_192.168.254.1.html,内容为:

<a href="http://192.168.254.1:8080/vulnerabilities/csrf/?password_new=123123321&password_conf=123123321&Change=Change">
<img src="http://192.168.1.108/111.gif"/></a>

受害者访问恶意网页

  • 表单方式

此操作需要使用超链接的形式,用Burp生成的基于表单的提交方式将会失效 。

如果我们使用表单方式将之前攻击服务器csrf.html文件名修改为change_192.168.254.1.html

  • 使用超链接形式

这里,没有成功,原因是浏览器自动过滤了REFERE中的文件名。

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

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

相关文章

MySQL练手 --- 1174. 即时食物配送 II

题目链接&#xff1a;1174. 即时食物配送 II 思路&#xff1a; 题目要求&#xff1a;即时订单在所有用户的首次订单中的比例。保留两位小数 其实也就是 即时订单 / 首次订单 所以&#xff0c;先求出首次订单&#xff0c;在首次订单的基础上寻找即时订单即可 解题过程&#x…

Mysql explain 优化解析

explain 解释 select_type 效率对比 MySQL 中 EXPLAIN 语句的 select_type 列描述了查询的类型,不同的 select_type 类型在效率上会有所差异。下面我们来比较一下各种 select_type 的效率: SIMPLE: 这是最简单的查询类型,表示查询不包含子查询或 UNION 操作。 这种查询通常是…

SpringCloud注册中心

SpringCloud注册中心 文章目录 SpringCloud注册中心1、注册中心原理2、Nacos注册中心2.1、部署nacos 3、服务注册4、服务发现 1、注册中心原理 在大型微服务项目中&#xff0c;服务提供者的数量会非常多&#xff0c;为了管理这些服务就引入了注册中心的概念。注册中心、服务提…

Redis实战篇(黑马点评)笔记总结

一、配置前后端项目的初始环境 前端&#xff1a; 对前端项目在cmd中进行start nginx.exe&#xff0c;端口号为8080 后端&#xff1a; 配置mysql数据库的url 和 redis 的url 和 导入数据库数据 二、登录校验 基于Session的实现登录&#xff08;不推荐&#xff09; &#xf…

微信小程序之接口测试

接口测试使用的方法及技术 测试接口文档 测试用例 用例执行&#xff1a;

算法日记day 20(二叉搜索树)

一、验证二叉搜索树 题目&#xff1a; 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也…

学习记录——day20 IO

IO基础 1、IO&#xff1a;&#xff08;inout output&#xff09; 程序与外部设备进行信息交换的过程 2、IO的分类&#xff1a;标准IO和文件IO 1&#xff09;标准IO&#xff1a;调用封装好的相关库函数&#xff0c;来实现数据的输入输出 2&#xff09;文件IO&#xff1a; 3、…

vue3响应式用法(高阶性能优化)

文章目录 前言&#xff1a;一、 shallowRef()二、 triggerRef()三、 customRef()四、 shallowReactive()五、 toRaw()六、 markRaw()七、 shallowReadonly()小结&#xff1a; 前言&#xff1a; 翻别人代码时&#xff0c;总结发现极大部分使用vue3的人只会用ref和reactive处理响…

废品回收小程序制作,数字化带来的商业机会

随着社会环保意识的增强&#xff0c;废品回收成为了一个热门行业&#xff0c;它不仅能够减少资源浪费&#xff0c;还能够带来新的商业机会&#xff01; 当下&#xff0c;废品回收小程序已经成为了回收市场的重要方式&#xff0c;为回收行业的发展注入新鲜活力&#xff0c;推动…

如何使用C#快速创建定时任务

原文链接&#xff1a;https://www.cnblogs.com/zhaotianff/p/17511040.html 使用Windows的计划任务功能可以创建定时任务。 使用schtasks.exe可以对计划任务进行管理&#xff0c;而不需要编写额外代码 这里掌握schtasks /CREATE 的几个核心参数就可以快速创建计划任务 /SC …

【短视频批量剪辑系统源代码开发部署技术分享】

多视频一键剪辑&#xff0c;创意无限升级 在确保音视频同步的基础之上&#xff0c;可视化剪辑技术再次迎来重大升级。最新引入的“多脚本升多视频”功能&#xff0c;标志着可视化剪辑矩阵的全面进步&#xff0c;为内容创作带来了前所未有的便利和灵活性。 这一功能的引入使得一…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十五章 Pinctrl和GPIO子系统实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

超声波眼镜清洗机有必要买吗?不踩坑的超声波眼镜清洗机选购攻略

超声波眼镜清洗机有必要买吗&#xff1f;当然有必要啦&#xff01;眼镜戴久&#xff0c;镜片难免会脏&#xff0c;镜片看起来会越来越模糊&#xff0c;不仅会影响清晰度还会影响美观&#xff0c;如果是经常戴妆出门的女生&#xff0c;镜托位置污垢也会越来越脏&#xff0c;有些…

windows下运行sh文件

1、打开git bash 2、进入sh文件所在文件夹&#xff0c;使用sh xx.sh运行

Python爬虫掌握-----4实战(爬取视频)

我们使用爬虫时难免会遇到爬取视频的情况&#xff0c;其实爬取图片视频&#xff0c;内容都是一样的。这里以b站视频为例。 一、开始 1.找到url&#xff0c;请求url 防盗链&#xff0c;需要写在UA伪装中 正常的三步&#xff1a; 1.url 2.requests请求 3.UA伪装 import req…

基于迁移学习的手势分类模型训练

1、基本原理介绍 这里介绍的单指模型迁移。一般我们训练模型时&#xff0c;往往会自定义一个模型类&#xff0c;这个类中定义了神经网络的结构&#xff0c;训练时将数据集输入&#xff0c;从0开始训练&#xff1b;而迁移学习中&#xff08;单指模型迁移策略&#xff09;&#x…

【性能优化】在大批量数据下使用 HTML+CSS实现走马灯,防止页面卡顿(二)

上一篇只是简单演示了’下一张’的操作和整体的设计思路,这两天把剩余功能补全了,代码经过精简,可封装当成轮播组件使用,详细如下. 代码 <template><div class"container"><button click"checkNext(last)">上一张</button><b…

C++之栈和队列使用及模拟实现

目录 栈的使用 队列的使用 栈的模拟实现 队列的模拟实现 deuqe容器介绍 在C语言中我们已经学习了栈和队列的相关性质&#xff0c;今天我们主要来学习C语法中栈和队列的相关概念。 栈的使用 在C中栈是一种容器适配器&#xff0c;在其内部适配了其它的容器&#xff0c;其相…

go程序在windows服务中优雅开启和关闭

本篇主要是讲述一个go程序&#xff0c;如何在windows服务中优雅开启和关闭&#xff0c;废话不多说&#xff0c;开搞&#xff01;&#xff01;&#xff01;   使用方式&#xff1a;go程序 net服务启动 Ⅰ 开篇不利 Windows go进程编译后&#xff0c;为一个.exe文件,直接执行即…

使用api 调试接口 ,配置 Header 、 body 远程调试 线上接口

学习目标&#xff1a; 目标 使用api 调试接口 &#xff0c;配置 Header 、 body 远程调试 线上接口 学习内容&#xff1a; 内容 设置请求方式 2. 选择 POST 提交 3.设置 Header 一般默认的 4个 header 属性就可以直接使用&#xff0c;如有特殊情况&#xff0c;需进行属性设…