CSRF | CSRF 漏洞介绍

server/2024/12/22 2:07:07/

关注这个漏洞的其他相关笔记: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.ppmy.cn/server/129976.html

相关文章

【STM32】STM32CubeMX 之 GPIO配置 【笔记】

环境 硬件&#xff1a;通用PC 系统&#xff1a; Windows 10 软件 &#xff1a;STM32CubeMX 在STM32CubeMX的GPIO配置中&#xff0c;每个选项都有特定的含义。以下是逐一解释这些选项&#xff1a; 1.GPIO output level (仅适用于输出模式): Low: 初始输出状态为低电平High: …

开源全文搜索(搜索引擎)

吃水不忘挖井人&#xff0c;介绍Doug Cutting大牛是十分有必要的。 最早&#xff0c;接触到搜索引擎&#xff0c;知道有个Nutch&#xff08;开源搜索引擎&#xff09;&#xff0c;于是开始查看Nutch相关的资料&#xff0c;发现了Nutch的创始人Doug Cutting&#xff0c;随着项目…

数组与链表的特点、细节及其原理研究

目录 第一章 数组的基本概念与原理 1.1 数组的定义与特性 1.1.1 数组的连续性 1.1.2 数组的固定大小性 1.2 数组的存储方式 1.3 数组的访问与操作 第二章 链表的基本概念与原理 2.1 链表的定义与特性 2.2 链表的种类 2.2.1 单向链表 2.2.2 双向链表 2.2.3 循环链表…

Java面试题——第十篇

1. 什么是Java的PLAB PLAB是Java垃圾回收器中的一种优化机制&#xff0c;主要用于G1垃圾收集器&#xff0c;目的是提高对象晋升到老年代的效率。 在垃圾回收过程中&#xff0c;新生代中的某些对象由于生命周期较长&#xff0c;会被晋升到老年代。为了减少线程竞争和提升晋升效…

JAVA学习-练习试用Java实现“反转链表 II”

问题&#xff1a; 给定单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出…

目录工具类 - C#小函数类推荐

此文记录的是目录工具类。 /***目录工具类Austin Liu 刘恒辉Project Manager and Software DesignerE-Mail: lzhdim163.comBlog: http://lzhdim.cnblogs.comDate: 2024-01-15 15:18:00***/namespace Lzhdim.LPF.Utility {using System.IO;/// <summary>/// The Objec…

基于SpringBoot+Vue的非物质文化遗产保护与传播系统设计实现【原创】(地图组件)

&#x1f388;系统亮点&#xff1a;地图组件&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框架Vue.js&#x…

C++对C的扩展

目录 一、引言 二、C对C的扩展 1.面向对象 2.异常处理 3.模板 4.STL&#xff08;标准模板库&#xff09; 三、总结 本文将介绍C在C语言基础上的扩展&#xff0c;分析C在面向对象、异常处理、STL等方面的优势&#xff0c;帮助读者更好地理解C语言的特性及其在实际开发中的应用…