CSRF | CSRF 漏洞介绍

news2024/11/27 6:23:47

关注这个漏洞的其他相关笔记:CSRF 漏洞 - 学习手册-CSDN博客

0x01:CSRF 漏洞简介

CSRF(Cross-Site request forgery,跨站请求伪造)也被称为 One Click Attack 或者 Session Riding,通常缩写为 CSRF 或者 XSRF(XSS + CSRF),是一种通过挟持用户在当前已登录的 Web 应用程序上执行非本意操作的攻击方法。

CSRF 跨站请求伪造,虽然听起来与 XSS 跨站脚本注入名字很相似,但它们两个利用的点其实有很大区别:

  • XSS : 利用用户对指定站点的信任发起攻击,盗取用户权限或进行恶意操作。

  • CSRF: 利用站点对用户(浏览器)的信任,伪装成受信用户请求站点,并进行操作。(攻击者并没有拿到用户权限)

与 XSS 攻击相比,CSRF 攻击往往不大流行,因此对其进行防范的措施也相当稀少,所以被认为比 XSS 攻击更具有危险性。

0x0101:CSRF 漏洞 - 攻击流程

一个典型的 CSRF 攻击流程如下图所示:

  1. 受害者登录 a.com,并保留了登录凭证(Cookie or Session)。

  2. 攻击者诱导受害者访问了 b.com。

  3. b.com 返回的页面内包含恶意代码,此代码向 a.com 发送了一个请求:a.com?act=xx(若用户已在 a.com 中登录,则会携带用户登录凭证向 a.com 发送请求)。

  4. a.com 接收到请求后,对请求来源进行校验,并确认是受害者的凭证,误以为是受害者自己的操作。

  5. a.com 以受害者名义执行了 act=xx 操作。

  6. 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让 a.com 执行了自己定义的操作。

0x0102:CSRF 漏洞 - 漏洞演示

实验工具准备

  • PHP 运行环境:phpstudy-x64-8.1.1.3.zip(Apache2.4.39 + PHP 5.6.9nts)

  • 实验环境:PIKACHU 靶场 - CSRF(get) => 参考:PIKACHU —— 靶场笔记合集

本次的实验环境,我们采用现成的 PIKACHU 靶场,PIKACHU 靶场的安装方法参考上面提供的链接,这里就不多说了,下面直接开始演示。

访问 PIKACHU 靶场,并定位到 CSRF(get)漏洞处,可以点击一下提示,看看可用的用户名与密码:

这里笔者使用 lili:123456 先完成一次正常的登录,登录后的页面如下所示:

在继续下面的实验之前,我们编个小故事吧,首先讲解一下人物关系:

  • 我(lili),女,是个 Hacker,喜欢 vince,我的登录信息是:lili:123456

  • 受害者(lucy),女,lili 的情敌,她的登录信息是:lucy:123456(lili 不知道哦)。

  • 路人(vince),男,一个海王,他的登录信息是:vince:123456

下面,开始我们的故事(讲的不好,请礼貌点喷啊,笔者只是为了让大家有点代入感):

我,lili,我喜欢我们班上的 vince,一个帅气的 boy,帅气的男孩谁不爱?所以我有一堆情敌,今天我要给她们一次警告。

就在几天前,我发现我们学校的学生信息管理系统中存在[[00 - XSS 漏洞 - 学习手册 |XSS 漏洞]],通过该漏洞,我可以给自己定义一个好看的页面:

点击“修改个人信息”,往“住址”中写入下面的内容即可:

 usa<br><p color=red>宣言:❤Vince 是我的❤</p>

这个是我给自己写的个人界面,怎么样,好看吧,反正比学校原本的好看多了:

就在我利用 XSS 漏洞肆意篡改我的个人页面时,我偶然间通过抓包发现了这么一条信息:

我发现,我之前修改的内容居然都出现在了请求包的 GET 请求参数上!此时,我脑海中立即想到了,后端就是通过这个接口来修改个人信息的!!

几乎就在同时,我意识到这个接口能修改我的信息,那必然也能修改别人的信息,可是,它是怎么确认修改谁的信息呢?

很快,我将注意力放在了 Cookie 上,用户的登录凭证,是的,就是这个小东西。

那么,我想修改别人的信息,我又没别人的 Cookie,我该怎么办呢?此时,我联想到了 Cookie 的一个特性,当第二次访问已经登录过的站点时,浏览器会自动把 Cookie 传送给服务端!

于是,我在学校的论坛上发布了这么一个帖子,帖子具体内容如下(如下是网页源码,保存为 .html 后使用火狐浏览器打开即可):

 
<!DOCTYPE html>
 <html lang="zh-CN">
 ​
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>宣战书</title>
     <style>
         body {
             font-family: 'Times New Roman', serif;
             background-color: #f4f4f4;
             display: flex;
             justify-content: center;
             align-items: center;
             height: 100vh;
             margin: 0;
         }
 ​
         .declaration {
             background-color: #fff;
             padding: 20px;
             border: 1px solid #ddd;
             box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
             max-width: 600px;
             margin: auto;
         }
 ​
         h1 {
             text-align: center;
             color: #333;
         }
 ​
         p {
             text-align: justify;
             line-height: 1.6;
             color: #666;
         }
     </style>
 </head>
 ​
 <body>
 ​
     <div class="declaration">
         <h1>战书</h1>
         <p>喜欢 Vince 的那些女孩们:</p>
         <p>是时候来场光明正大的对决了,你们暗地里做的那些 XXX 事,让我很恼火!🤬</p>
         <p>地点:<a href="http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=4444444444444&add=usa%20%3Cbr%3E%3Ch1%20style=%22color:%20red%3Balign-items:%20center%3B%22%20%3E%E8%AD%A6%E5%91%8A%EF%BC%9A%E7%A6%BB%E4%BB%96%E8%BF%9C%E7%82%B9%EF%BC%8C%E6%88%91%E7%9F%A5%E9%81%93%E4%BD%A0%E8%83%8C%E5%9C%B0%E9%87%8C%E5%81%9A%E7%9A%84%E9%82%A3%E4%BA%9B%E4%BA%8B%EF%BC%81%EF%BC%81%EF%BC%81%3C/h1%3E&email=Isee%40You.com&submit=submit
             ">点我了解详情!</a></p>
         <p>时间:2024/09/22</p>
     </div>
 ​
 </body>
 ​
 </html>

上面“我(lili)”的故事到此结束,接下来是 lucy 也就是 lili 情敌的故事了:

lucy 和往常一样,登录了自己的信息门户,看看有没有新的东西(客官们假设旁边有最新的信息):

就在这时,她发现了一条有意思的内容,好像是对所有喜欢 Vince 的战书:

lucy 觉得很有意思,准备到时候去看看那帮女孩能干出什么事,就点击了战书中的链接,然而预料中的地址没找到,链接直接跳转到了自己的信息门户中:

lucy 还发现,自己的信息门户中的信息还被篡改了,看着屏幕中红色的字体,lucy 感到一阵后怕。。。

至此,整个 CSRF 攻击的故事就讲完了,简而言之,lili 利用校园网页中的 XSS 漏洞 + CSRF 漏洞,给全体情敌写了一封威胁信,若学校的同学登录了个人中心,再点击战书中的链接,就会发现,自己的个人信息被篡改了。

故事写的有点草率了。希望各位看官能够喜欢。

0x0103:CSRF 漏洞 - 案例分享

这里我们分享一个反复鞭尸的 CSRF 漏洞经典案例 - 2007 年的 Google Gmail 邮件转发漏洞。

由于时间过去已久,笔者没能找到当时的确切漏洞报道,那就只能以文字的方式再拿来鞭尸一次了,参考链接:

  • Gmail cookie曝漏洞 Google用户隐私或外泄_互联网_科技时代_新浪网

  • Google Patches Serious GMail Vulnerability | WIRED

2007 年,Google 的 Gmail 服务遭遇了一个严重的安全漏洞,该漏洞允许攻击者在用户不知情的情况下,通过恶意网站利用 Cookie 信息来转发用户的所有邮件

这个漏洞存在意味着,如果用户在登录 Gmail 的同时访问了恶意网站,攻击者就有可能利用跨站脚本(XSS)漏洞来获取用户的 Cookie,并使用这些 Cookie 在不需要密码的情况下登录用户的 Gmail 账户,进而实施邮件转发操作。由于 Google 的 Cookie 有效期长达两年,这使得这种攻击方式尤为危险。

此外,还有报道称,攻击者可以利用 Gmail 的 CSRF(跨站请求伪造)漏洞,通过诱导用户访问一个特殊构造的网站,来在用户的 Gmail 账户中设置自动转发规则,将所有带有附件的邮件转发到攻击者指定的邮箱中。这种攻击方式在当时被认为是 “特别恶劣的”,因为它不需要用户进行任何操作,而且普通用户很难察觉到自己的邮件被窃取了。

Google 在得知这些漏洞后迅速采取了行动,修补了相关问题,并表示没有收到任何关于这些漏洞被利用的报告。

0x02:CSRF 漏洞详解

0x0201:CSRF 漏洞产生的原因

CSRF 漏洞产生的主要原因是因为程序员在开发 Web 应用程序时没有充分考虑到用户请求的安全性,对进行敏感操作的接口没有实施对应的安全措施,导致恶意用户可以利用用户的登录状态,通过构造特定的请求,诱导或自动让用户的浏览器发送这些请求,从而在用户不知情的情况下以用户的名义完成一些恶意操作,如转账、发帖等。

0x0202:CSRF 漏洞攻击特点

CSRF 攻击过程有以下两个重点,缺一不可:

  • 目标用户已经登录了网站,能够执行网站的功能。

  • 目标用户访问了攻击者构造的 URL。

CSRF 攻击的特点如下:

  • 攻击一般发起在第三方网站,而不是被攻击的网站,因为外域通常更容易被攻击者掌控。但是如果是本域下有容易被利用的功能,比如可以发图和链接的论坛和评论区,攻击可以直接在本域下进行,而且这种攻击更加危险。

  • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,而不是直接窃取信息。

  • 整个过程攻击者并不能直接取得受害者的登录凭证,仅仅是 “冒用”。

  • 跨站请求可以使用各种方式:图片 URL、超链接、CORS、Form 提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪。

0x0203:CSRF 漏洞分类

CSRF (跨站请求伪造)漏洞,大体可以分为两种类型,分别是 GET 型POST 型

接下来,我会简单介绍一下两种不同类型的 CSRF 漏洞的攻击方式,详细内容,笔者后面会针对每种类型的漏洞都举出一个实例来进行详解。

1. GET 型 CSRF

GET 型 CSRF 漏洞是指攻击者通过构造恶意的 HTTP GET 请求,利用用户的登录状态,在用户不知情的情况下,诱使浏览器向受信任的网站发送请求,从而执行非用户意图的操作。

常见的攻击方式: 攻击者通过在站点中嵌入恶意链接到图片、链接或者隐藏的 iframe 中,诱使用户点击或者在不知情的情况下触发请求,从而发起攻击。例如,攻击者可以创建一个隐藏的 iframe,其中包含对银行网站的转账请求,当用户访问包含该 iframe 的页面时,浏览器会携带用户的会话 Cookie 自动发起转账请求,而用户可能对此还一无所知。

比如,某家银行的转账接口请求包如下(假设该家银行存在 CSRF 漏洞):

 http://bank.example.com?act=transfer&money=$money$&to=$email$
 ​
 act=transfer  -- 执行转账操作
 money=$money$ -- 转账的金额
 to=$email$    -- 转账的对象

那么攻击者通过在网页中嵌入下面的代码,并诱导用户访问,当用户访问嵌入了恶意代码的站点时,用户浏览器就自动会向 bank.example.com 站点的转账接口发起请求,导致攻击发生:

 <img src="http://bank.example.com?act=transfer&money=100&to=hacker@test.com">

当然,前提是,用户登录了那家银行,而且登录凭证还未失效。

2. POST 型 CSRF

POST 型 CSRF 漏洞是指攻击者通过构造恶意的 HTTP POST 请求,利用用户的登录状态,在用户不知情的情况下,诱使浏览器向受信任的网站发送请求,从而执行非用户意图的操作。

在 GET 型 CSRF 中,都是诱导用户点击一个链接来触发请求,那么有大聪明就说了,我的接口改成只接收 POST 请求的不就好了?

通过点击确实无法发送 POST 请求,但攻击者可以通过在自己的服务器上构造表单,并且设置自动提交的方式,来让浏览器发送 POST 请求,如果其他站点存在 XSS 漏洞的话,更是可以直接把表单嵌入到那些站点中进行攻击。

比如,还是上面那个例子,只不过这回银行改成了只接收 POST 请求传参。那么攻击者可以将下面的代码嵌入到网页中从而实施攻击:

 <form action="http://bank.example.com" method=POST>
     <input type="hidden" name="act" value="transfer" />
     <input type="hidden" name="money" value="100" />
     <input type="hidden" name="to" value="hacker@test.com" />
 </form>
 <!-- 使用 JavaScript 脚本自动提交上面的表单 -->
 <script> document.forms[0].submit(); </script> 

当用户访问嵌入了上面代码的页面后,表单会自动提交,相当于是模拟用户完成了一次 POST 操作。

0x03:参考文献

  • 2007年Gmail的CSRF漏洞 - papering - 博客园

  • CSRF漏洞原理攻击与防御(非常细)-CSDN博客

  • 《Web 安全攻防:渗透测试实战指南》 ISBN 978-7-121-34283-7

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

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

相关文章

【Java】IntelliJ IDEA开发环境安装

一、下载 官方地址&#xff1a;https://www.jetbrains.com/idea/ 点击Download直接下载 二、安装 双击安装包&#xff0c;点击Next 选择安装路径&#xff0c;点击Next 勾选安装内容 安装完成。 三、创建项目 打开IDEA&#xff0c;填写项目名称&#xff0c;选择项目安装路径…

S7-200 SMART的数据类型说明

S7-200 SMART的数据主要分为&#xff1a; 与实际输入/输出信号相关的输入/输出映象区&#xff1a; I&#xff1a;数字量输入&#xff08;DI&#xff09;Q&#xff1a;数字量输出&#xff08;DO&#xff09;AI&#xff1a;模拟量输入AQ&#xff1a;模拟量输出 内部数据存储区…

STM32 Hal库SDIO在FATFS使用下的函数调用关系

STM32 Hal库SDIO在FATFS使用下的函数调用关系 本文并不将FATFS的相关接口操作&#xff0c;而是将HAL在使用FATFS通过SDIO外设管理SD卡时&#xff0c;内部函数的调用逻辑&#xff0c;有助于当我们使用CUBEMX生成FATFS读取SD卡的代码时无法运行时Debug。本文也会说明一些可能出现…

如何编写一个优雅的commit message

在Git中&#xff0c;git commit 命令扮演着至关重要的角色。它的主要作用是将暂存区&#xff08;staging area&#xff09;里的改动内容提交到本地仓库&#xff08;repository&#xff09;中&#xff0c;形成一个新的版本或提交&#xff08;commit&#xff09;。这个过程是 Git…

渗透测试入门学习——使用python脚本自动识别图片验证码,OCR技术初体验

写在前面 由于验证码在服务端生成后存储在服务器的session中&#xff0c;而标用于标识用户身份的sessionid存在于用户cookie中 所以本次识别验证码时需要用requests.session()创建会话对象&#xff0c;模拟真实的浏览器行为&#xff0c;保持与服务器的会话才能获取登录时服务…

wsl2 ubuntu 桥接以太网卡

注意&#xff1a;此方法需要至少 Windows 11 22H2。桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。 在桥接的作用下&#xff0c;类似于把宿主机虚拟为一个交换机&#xff0c;所有桥接设置的虚拟机连接到这个交换机的一个接口上&#xff0c;宿主机也同样插在这…

通信工程学习:什么是RARP反向地址解析协议

RARP&#xff1a;反向地址解析协议 RARP&#xff08;Reverse Address Resolution Protocol&#xff0c;反向地址解析协议&#xff09;是一种网络协议&#xff0c;其主要作用是在设备只知道物理地址&#xff08;如MAC地址&#xff09;时&#xff0c;允许其从网关服务器的地址解析…

致亲爱的Android studio

你的未来发展趋势&#xff1a; 可不可以把兼容性&#xff0c;什么的搞得更好。起因是我想写期末大作业&#xff0c;然后简单的把功能写的差不多了之后&#xff0c;我就想到处看看有没有一套比较好的类似于组件库的东西&#xff0c;但是没找到&#xff0c;然后就把目标锁定到了G…

Vue入门-Node.js安装

进入Node.js中文网 ​​​​​​​点击进入Node.js中文网 或者手动输入网址&#xff1a; https://www.nodejs.com.cn/download.html 点击下载64位安装包&#xff1a; 下载好之后双击进行安装 可选择个性化安装或默认安装 直接点【Next】按钮&#xff0c;此处可根据个人需求…

深度解析 HTTP

我的主页&#xff1a;2的n次方_ 1. HTTP 的简单介绍 HTTP &#xff1a;超文本传输协议&#xff0c;不仅能传输文本&#xff0c;还能传输图片&#xff0c;音频文件&#xff0c;视频 目前基本上都用的是 1.1 版本 https 可以认为是 http 的升级版&#xff0c;区别就是引入了…

【pytorch】张量求导4

再再接上文&#xff0c;看到作者有一个关于向量乘矩阵的描述。 经过搜索发现&#xff0c;现在的pytorch已经修复了这一问题&#xff0c;提供了mv()和matmul()两种方式实现矩阵和一维向量的乘积&#xff0c;可以参看这篇文章。 经过查阅pytorch的文件&#xff0c;找到了cuda侧…

如何利用 Kubernetes 取得成功

Kubernetes是一个开源编排平台&#xff0c;用于自动部署和管理容器化工作负载和服务&#xff0c;目前越来越受欢迎。 该平台由全球贡献者社区维护&#xff0c;其潜在优势包括提高资源效率、提高可扩展性和高可用性。 在过去几年中&#xff0c;Kubernetes 和相关的云原生技术已…

[Qt] 基于 Qt 的文件选择与图片显示功能实现

文章目录 基础版本&#xff1a;open1()功能解析&#xff1a;特点与限制&#xff1a; 增加路径记忆功能&#xff1a;open2()功能解析&#xff1a;特点与改进&#xff1a; 使用智能指针优化内存管理&#xff1a;open3()功能解析&#xff1a;特点与改进&#xff1a; 图片自适应窗口…

线程互斥函数的例子

代码 #include<stdio.h> #include<pthread.h> #include<sched.h> void *producter_f(void *arg); void *consumer_f(void *arg); int buffer_has_item0; pthread_mutex_t mutex; int running1; int main(void) {pthread_t consumer_t;pthread_t producter_t…

PCL 点云体素滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 体素滤波实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xf…

Session会话管理技术

Session会话管理技术 会话: 两个交互,在开发中是指浏览器和服务器它们两个的交互 会话管理: 管理会话中产生的数据,一般是记录登录状态 补充: 状态管理,就是管理数据 1、 Session概述 Session用于记录用户的状态。Session指的是在一段时间内&#xff0c;单个客户端与Web服务…

【C++】—— 类和对象(中)

【C】—— 类和对象(中) 文章目录 【C】—— 类和对象(中)前言1. 类的默认成员函数2. 构造函数3. 析构函数4. 拷贝构造函数5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载 结语 前言 小伙伴们大家好呀&#xff0c;昨天的 【C】——类和对象(上) 大家理解的怎么样了 今天…

【AI人工智能】文心智能体,双人冒险游戏智能体创作分享

背景 最近半年&#xff0c;“AI agent”&#xff08;智能体&#xff09;这一词汇变得非常热门。许多人以为创建自己的智能体会很复杂&#xff0c;实际上&#xff0c;现有的平台已经大大降低了操作门槛。只要有创意&#xff0c;几乎每个人都可以轻松创建属于自己的智能体。今天…

WordPress响应式Git主题响应式CMS主题模板

兼容 IE9、谷歌 Chrome 、火狐 Firefox 等主流浏览器 扁平化的设计加响应式布局&#xff0c;兼容电脑、和各个尺寸手机的完美响应 主题设置面板新增多种AD位&#xff0c;PC端和移动设备各不相同 在主题设置选项中就可以进行基本的SEO设置&#xff1a;首页、分类、文章等页面…

跟我学C++中级篇——函数调用的本质

一、进程的执行过程 正常的情况下&#xff0c;程序会被计算机从硬盘加载到内存中&#xff0c;然后跳转到主入口函数进行执行。依次按照逻辑对相关的模块进行加载调用。其中&#xff0c;最常用的就是调用一个函数&#xff0c;可以说&#xff0c;函数是C/C程序中的一个重要的基础…