一篇文章带你入门CSRF

1.什么是CSRF

用一个形象生动的比喻就是:

你给朋友的房子留下了备用钥匙,但是有人偷偷拿走了这把钥匙,然后用这把钥匙进入了你朋友的房子并做了各种坏事。你朋友以为只有你能使用这把钥匙,所以没对任何操作产生怀疑。

在这个比喻中:

  • 你朋友的房子代表受攻击的网站。
  • 备用钥匙代表用户的认证信息(比如cookie)。
  • 代表合法用户。
  • 偷偷拿走钥匙的人代表攻击者。
  • 进入房子并做坏事代表攻击者伪装成用户进行恶意操作。

 其实就是在你不知情的情况下利用你的身份去干坏事。

官方定义:

CSRF(Cross-Site Request Forgery)漏洞是一种网络安全漏洞,攻击者可以利用该漏洞在用户不知情的情况下以其身份执行未经授权的操作。攻击者通过诱使用户访问恶意网站或点击恶意链接,来发起伪造的请求,从而利用用户当前登录的凭据执行一些操作,例如更改密码、发送资金等,而用户并不知情。

2.CSRF的前提条件

任何漏洞都有适用的前提条件:

1.CSRF必须在你与服务器正常会话的前提下才能进行攻击,毕竟CSRF是利用你的身份去干坏事,但是如果你都没有登录(没有身份)那就无从利用了。

 2.需要目标站点或系统存在可以进行数据修改或新增操作的功能

比如允许用户修改密码、更新购物地址、或添加新的后台管理账户等。

3.这些操作在提交到后台后,未提供任何身份识别或校验的参数

比如在提交修改密码的请求时,没有检查用户的身份(如没有使用CSRF令牌或其他认证机制)

一句话总结:说白了就是会话保持,系统存在进行数据修改,且没有认证

3.漏洞利用(如何攻击)

     恶意攻击者可以伪装“数据修改或新增”操作的请求,并将这个请求发送给被攻击者。如果攻击者能够通过某种手段(例如社交工程)诱使被攻击者在其cookie仍然有效的情况下点击这个伪造的请求链接,那么CSRF漏洞就会被触发。

     一旦被攻击者点击了这个链接,浏览器会自动在请求中包含用户的认证信息(如cookie),从而让服务器误以为这是合法用户发起的请求。这时,服务器会直接执行请求中的操作。例如:

  • 修改当前用户的密码:攻击者可以重设用户的密码,使用户无法访问自己的账户。
  • 新增后台管理员账户:如果当前用户是后台管理员,攻击者可以创建一个新的管理员账户,获得对系统的控制权。

 拿道CTF题目举例:

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127.0.0/')){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{
    die('hacker');
}
}
else{
    die('hacker');
}
?>

这里很明显嘛,没有对身份的验证令牌。分析代码可知有明显的CSRF漏洞,接下来对url进行构造拿到权限:url=http://0177.0.0.1/flag.php(这里由于对127.0.0.1进行了过滤,那就直接使用进制转换一手就好)

接下来再使用DVWA靶场进行一手举例,详细说一下攻击过程:

进来以后是一个登录界面,接下来就介绍一下CSRF最为经典的改密码:

我的密码

账号是admin;密码:123456789

接下来在我的小皮面板www里面建立csrf.html文件

<img src="http://127.0.0.1/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#" border="0" style="display:none;"/>

<h1>404<h1>

<h2>file not found.<h2>

接下来点进去就会发现我的密码被改了,log failed

4.CSRF的防御措施

    当我们审视 CSRF(跨站请求伪造)的防御措施时,最简单而有效的方法就是引入通行证令牌,通常称为 Token。

    每次用户发起请求时,系统都会为其分配一个独特的 Token。这个 Token 在用户登录后生成,并在用户退出或会话结束时销毁,因此上一次的 Token 在用户退出后就失效了。这样一来,每个请求都必须携带有效的 Token 才能被服务器接受和处理。

    当然,在这里我也必须得补充两句:token也是可以拿到的,不存在什么的绝对安全。通过XSS攻击拿到token,然后通过CSRF利用你的权限修改密码,这个就叫做XSS—CSRF攻击。

不过这已经不是单纯的CSRF攻击了,我们的token对CSRF攻击还是很管用的。

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

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

相关文章

.NET周刊【5月第2期 2024-05-12】

国内文章 C#在工业数字孪生中的开发路线实践 https://mp.weixin.qq.com/s/b_Pjt2oii0Xa_sZp_9wYWg 这篇文章探讨了C#在工业数字孪生技术中的应用&#xff0c;介绍了三种基于C#的数字孪生系统实现方案&#xff1a; WPF Unity&#xff1a;结合WPF技术和Unity引擎&#xff0c…

算法练习day8

反转字符串 代码随想录 0344.反转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; &#xff08;用时&#xff1a;0.05小时&#xff09; 思路 这道题很简单也很经典。 字符串的反转方法有很多&#xff0c;我这里是用for循环通过数组长度和下标计算来交换。…

如何用Rust获取CPU、内存、硬盘的信息?

目录 一、用Rust获取CPU、内存、硬盘的信息 二、知识点 systemstat 一、用Rust获取CPU、内存、硬盘的信息 首先&#xff0c;需要添加systemstat库到Cargo.toml文件&#xff1a; [dependencies] systemstat "0.2.3" 在Rust代码中使用它&#xff1a; extern crat…

pip镜像源

1.1 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple 1.2 阿里云 https://mirrors.aliyun.com/pypi/simple/ 1.3 网易 https://mirrors.163.com/pypi/simple/ 1.4 豆瓣 https://pypi.douban.com/simple/ 1.5 百度云 https://mirror.baidu.com/pypi/simple/ 1.6 中科大 ht…

Android 集成Bugly完成线上的异常Exception收集及处理

文章目录 &#xff08;一&#xff09;添加产品APP&#xff08;二&#xff09;集成SDK&#xff08;三&#xff09;参数配置权限混淆 &#xff08;四&#xff09;初始化 &#xff08;一&#xff09;添加产品APP 一&#xff09;在个人头像 -> 我的头像 -> 新建产品 二&…

基于IDEA快速创建一个SpringMVC项目并且配置Tomcat

1&#xff0c;打开IDEA&#xff0c;新建Maven项目【使用web模板创建】 使用社区版的同学创建普通的maven项目&#xff0c;并配置项目的webapp&#xff0c;详情可参考 快速创建一个SpringMVC项目&#xff08;IDEA&#xff09; 2&#xff0c;在main目录下创建Java和resource目录…

原生小程序开发如何使用 tailwindcss

原生小程序开发如何使用 tailwindcss 原生小程序开发如何使用 tailwindcss 前言什么是 weapp-tailwindcss ?0. 准备环境以及小程序项目1. 安装与配置 tailwindcss 0. 使用包管理器安装 tailwindcss1. 在项目目录下创建 postcss.config.js 并注册 tailwindcss2. 配置 tailwind…

24深圳杯B题42页高质量论文+可执行代码+可视化图标(更新版)

简单麦麦https://www.jdmm.cc/file/2710640/ 比赛题目的完整版思路代码数据都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff…

灌区信息化管理平台系统包含哪些内容?(全面介绍)

政策背景 2022年12月29日&#xff0c;水利部启动48处大中型灌区开展数字孪生灌区先行先试建设。 2023年2月24日&#xff0c;《2023年农村水利水电工作要点》:2023年农村水利水电工作的总体思路包括:紧盯保障国家粮食安全&#xff0c;加快推进大中型灌区现代化改造&#xff0c;…

1. AB路线-BFS+分层图

0AB路线 - 蓝桥云课 (lanqiao.cn) #include <bits/stdc.h> #define int long long #define endl \n using namespace std; int n,m,k; //存迷宫格子 char board[1005][1005]; //vis[i][j][k]存坐标(i,j)的格子&#xff0c;在一个周期中第k次经过它 bool vis[1005][1005][…

linux 网络管理 实验

目录 网络管理主机名管理网络管理 网络管理 主机名管理 执行如下命令查看主机名。 [rootopenEuler ~]# hostname openEuler [rootopenEuler ~]# cat /etc/hostname #这个文件是主机名的配置文件 openEuler执行如下命令临时修改主机名。 [rootopenEuler ~]# hostname huawe…

(四十二)第 6 章 树和二叉树(树的二叉链表(孩子-兄弟)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

MySQL的msi格式安装

一、下载链接 MySQL :: Download MySQL Installer (Archived Versions) 二、安装步骤 ①选择自定义安装 ②选择要安装的产品 ③安装依赖环境 ④安装 ⑤点击下一步 ⑥配置 ⑦设置密码 ⑧命名 ⑨数据存放路径 ⑩安装配置 ①①配置环境变量 ①②验证 方法一&#xff1a; 方法二…

【软考】设计模式之桥接模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.将抽象部分与其实现部分分离&#xff0c;使它们都可以独立地变化。2.桥接模式&#xff08;Bridge Pattern&#xff09;属于对象结构型模式&#xff0c;又称为柄体&#xff08;Handle an…

C#中json数据序列化和反序列化的最简单方法(C#对象和字符串的相互转换)

文章目录 将C#对象转换为json字符串Newtonsoft模块的安装用Newtonsoft将对象转换为json字符串 将json字符串转换为C#对象 将C#对象转换为json字符串 本介绍将基于C#中的第三方库Newtonsoft进行&#xff0c;因此将分为Newtonsoft模块的安装和使用两部分。该模块的优势在于只需要…

PCB笔记(二十六):PCB检查

前言 首先检查元器件是否100&#xff05; 放置 文章目录 1、打开DRC2、database check3、检查DRC4、检查多余的线5、其他需要注意的点a.检查差分线、等长线是否已调好b.注意检查晶振、电感等元件上/下方是否其他线经过&#xff08;一般不允许线经过&#xff09;c.打开place_bo…

node安装以及node的包管理工具

node安装以及node的包管理工具 node安装nvm管理工具 node安装 1、下载node链接: 点击这里 2、选择需要下载的版本以及对应的系统版本 nvm管理工具 1、下载nvm链接: 点击这里 2、双击运行.exe文件 全部默认安装即可 3、nvm常用命令 nvm list avaliable 显示所有可以下载的n…

umi项目配置之项目构建时配置umirc.ts

对于 umi 中能使用的自定义配置&#xff0c;你可以使用项目根目录的 .umirc.ts 文件或者 config/config.ts&#xff0c;值得注意的是这两个文件功能一致&#xff0c;仅仅是存在目录不同&#xff0c;2 选 1 &#xff0c;.umirc.ts 文件优先级较高 umi 的配置文件是一个正常的 n…

ACM实训冲刺第七天

【碎碎念】今天开始做第2套的习题 Anton and Danik 问题 安东喜欢下棋&#xff0c;他的朋友丹尼克也喜欢下棋。 一旦他们连续玩了n局。每场比赛都知道谁是赢家——安东还是丹尼尔。没有一场比赛以平局结束。 现在安东想知道&#xff0c;谁赢了更多的比赛&#xff0c;他还是丹…

【数据可视化01】matplotlib实例介绍4之六边形分箱图

目录 一、引言二、实例介绍 一、引言 hexbin是一个二维直方图&#xff0c;其中箱子是六边形&#xff0c;颜色表示每个箱子内的数据点数。 二、实例介绍 import matplotlib.pyplot as plt import numpy as np# Fixing random state for reproducibility np.random.seed(19680…