一篇文章带你入门CSRF

news2024/11/17 21:28:38

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.coloradmin.cn/o/1676121.html

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

相关文章

保研机试之【设备驱动程序】

B选项&#xff1a; 综上&#xff0c;我认为这道题选择D~

从头开始学Spring—02基于XML管理bean

目录 1.实验一&#xff1a;入门案例 2.实验二&#xff1a;获取bean 3.实验三&#xff1a;依赖注入之setter注入 4.实验四&#xff1a;依赖注入之构造器注入 5.实验五&#xff1a;特殊值处理 6.实验六&#xff1a;为类类型属性赋值 7.实验七&#xff1a;为数组类型属性赋值…

Charger之三动态电源路径管理(DPPM)

-----本文简介----- 主要内容包括&#xff1a; 领资料&#xff1a;点下方↓名片关注回复&#xff1a;粉丝群 硬件之路学习笔记公众号 Charger的动态电源路径管理&#xff08;DPPM&#xff09; 前篇内容&#xff1a;①电池管理IC&#xff08;Charger&#xff09;了解一下&…

国产分布式数据库高可用故障检测实现

在分布式数据库架构下&#xff0c;当数据库节点异常时&#xff0c;数据库管理组件能够自动感知到异常并触发节点隔离或者自动切换&#xff0c;是数据库高可用容灾的基本能力。在节点服务器异常、网络异常或进程异常等场景下&#xff0c;各数据库产品本身已经具备了可靠的检测能…

C#之如何判断数据类型

一、GetType方法 a.GetType()&#xff1a;获取当前变量的类型对象 string str "Hello World";Console.WriteLine(str.GetType()); 结果: 二、typeof方法 typeof(Int)&#xff1a;获取的是Int类型的类型对象 int num 10;Console.WriteLine(num.GetType() typeof(i…

NSSCTF中的1zjs、作业管理系统、finalrce、websign、简单包含、Http pro max plus

目录 [LitCTF 2023]1zjs [LitCTF 2023]作业管理系统 [SWPUCTF 2021 新生赛]finalrce exec()函数&#xff1a;php中exec介绍及使用_php exec-CSDN博客​​​​​​ 资料参考&#xff1a;RCE(远程命令执行)绕过总结_rce绕过-CSDN博客 [UUCTF 2022 新生赛]websign [鹏城杯 …

Python实现麦克风录音保存到wav

功能展示&#xff1a; 运行环境&#xff1a; Python: 3.10.4 64-bit 操作系统&#xff1a; 截图环境&#xff1a;win10 64-bit 视频录屏环境&#xff1a;win10 64-bit 功能说明&#xff1a; 点击界面开始按钮开始录音&#xff0c;点击停止按钮结束录音。 源码文件列表&…

Linux的命名管道 共享内存

目录 命名管道 mkfifo函数 unlink函数 命名管道类 服务端 客户端 共享内存 shmget函数 ftok函数 key和shmid的区别 snprintf函数 ipcs指令 ipcrm指令 shmctl函数 shmat函数 void*做返回值 创建共享内存空间 服务端 客户端 命名管道 基本概念&#xff1…

OpenAI GPT-4

本文翻译整理自&#xff1a;https://openai.com/index/gpt-4-research/ (March 14, 2023) 文章目录 一、关于 GPT-4二、能力视觉输入Visual inputs: chart reasoningSample 2 of 7 操纵性Steerability: Socratic tutorSample 1 of 3 三、局限性四、风险与缓解措施五、训练流程…

鱼哥好书分享活动第22期:《数字政府网络安全合规性建设指南》解锁数字政府网络安全新篇章

鱼哥好书分享活动第22期&#xff1a;《《数字政府网络安全合规性建设指南》》解锁数字政府网络安全新篇章 阅读对象&#xff1a;书籍目录&#xff1a;了解更多&#xff1a;赠书抽奖规则: 当今时代&#xff0c;数据已成为新型生产要素&#xff0c;不仅是个人、企业乃至国家的重要…

enable_shared_from_this使用笔记

解决了&#xff1a; 不能通过原指针增加引用次数的问题 &#xff0c;通过weak_ptr实现。 class MyCar:public std::enable_shared_from_this<MyCar> { public:~MyCar() { std::cout << "free ~Mycar()" << std::endl; } };int main() { MyCar* _…

算法-卡尔曼滤波之基本数学的概念

1.均值 定义&#xff1a;均值是一组数据中所有数值的总和除以数据的数量。均值是数据的中心趋势的一种度量&#xff0c;通常用符号 xˉ 表示。 &#xff1a;对于包含 n 个数据的数据集 {&#x1d465;1,&#x1d465;2,...,&#x1d465;&#x1d45b;}&#xff0c;均值 xˉ 计…

高扩展性便携式1553B总线测试仪,支持麒麟操作系统

手提式便携1553B总线测试仪&#xff0c;利用订制平台的PXIe扩展槽嵌入石竹科技自主研发的高性能T系列专用1553B测试板卡和高级协议分析和测试软件FP-1553B Pro、FP-5186集成的一款模块化、功能可订制的测试仪器。 基本配置可对1553B信号进行波形采集&#xff08;提供软件示波器…

goconvey测试框架的使用

尽管Golang已经内置了功能强大的testing包&#xff0c;其易用性令人称赞。然而&#xff0c;当我们希望更直观地处理和判断测试结果时&#xff0c;结合使用goconvey能为我们提供极大的便利。goconvey不仅为我们提供了丰富的断言函数&#xff0c;这些函数还极大地方便了我们在进行…

C++ QT设计模式 (第二版)

第3章 Qt简介 3.2 Qt核心模块 Qt是一个大库&#xff0c;由数个较小的库或者模块组成&#xff0c;最为常见的如下&#xff1a;core、gui、xml、sql、phonon、webkit&#xff0c;除了core和gui&#xff0c;这些模块都需要在qmake的工程文件中启用 QTextStream 流&#xff0c;Qdat…

本地安装nvm,管理多版本node

先卸载本地的nodejs(14.16.1) 卸载的直接可以点击win10图标→设置→应用→应用和功能 卸载nodejs即可 2. 安装nvm&#xff0c;地址&#xff1a;https://github.com/coreybutler/nvm-windows/releases 安装目录时尽量不要出现特殊字符还有空格&#xff0c;否则会在nvm use xxx的…

海外媒体发稿:如何在日本媒体投放新闻通稿-大舍传媒

导言 在全球化的时代背景下&#xff0c;海外媒体宣发对于企业来说非常重要。通过在海外媒体投放新闻通稿&#xff0c;企业能够拓展海外市场&#xff0c;增强知名度和影响力。本文将探讨如何在海外媒体投放新闻通稿&#xff0c;以帮助企业进行有效的海外宣传。 挖掘海外媒体资…

Alibaba SpringCloud集成Nacos、Sentinel实现服务治理-17

关于服务治理 总体而言&#xff0c;限流和降级作为微服务架构中的重要机制&#xff0c;尽管在实现上可能有多种方式&#xff0c;但它们都着眼于保护服务提供者和消费者&#xff0c;在面对异常情况时确保系统稳定运行。限流关注于保护服务提供者&#xff0c;控制请求流量&#…

20232810 2023-2024-2 《网络攻防实践》实验九

一、实践内容 1.1 反汇编 1.1.1 编程原理 编程的原理是一套指导软件开发和维护的概念、原则和实践&#xff0c;包括抽象以简化复杂系统、模块化以分解程序、封装以隐藏内部状态、继承以共享特性、多态以允许不同响应、算法和数据结构以组织计算和存储、控制结构以控制流程、…

UVa11419 SAM I AM

UVa11419 SAM I AM 题目链接题意分析AC 代码 题目链接 UVA - 11419 SAM I AM 题意 给出一个 RC 大小的网格&#xff0c;网格上面放了一些目标。可以在网格外发射子弹&#xff0c;子弹会沿着垂直或者水平方向飞行&#xff0c;并且打掉飞行路径上的所有目标&#xff0c;如下图所…