一篇文章带你入门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.hqwc.cn/news/701178.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++自定义日期类的精彩之旅(详解)

在学习了C的6个默认成员函数后&#xff0c;我们现在动手实现一个完整的日期类&#xff0c;来加强对这6个默认成员函数的认识。 这是日期类中所包含的成员函数和成员变量&#xff1a; 构造函数 // 函数&#xff1a;获取某年某月的天数 inline int GetMonthDay(int yea…

VictoriaMetrics

概念 介绍 VictoriaMetrics&#xff0c;是一个快速高效、经济并且可扩展的监控解决方案和时序数据库 本文均用VM简称VictoriaMetric 作用 用于作为prometheus的长期储存方案&#xff0c;代替prometheus存储监控采集的数据 优点 远程存储&#xff1a;可作为单一或多个Pro…

Python中tkinter编程入门4

在Python中tkinter编程入门3-CSDN博客中创建了Button控件&#xff0c;点击该控件就会产生一个点击事件&#xff0c;在创建Button控件时指定该点击事件的处理程序后&#xff0c;按键控件就会对用户的点击事件产生响应。 1 定义事件处理器 定义事件处理器就是一个自定义的函数。…

matlab使用1-基础

matlab使用1-基础 文章目录 matlab使用1-基础1. 界面介绍2. matlab变量3. matlab数据类型4. matlab矩阵操作5. matlab程序结构5.1 顺序结构5.2 循环结构5.3 分支结构 1. 界面介绍 命令行窗口输入&#xff1a;clc 可清除命令行窗口command window的内容 clc命令行窗口输入&…

【知识拓展】大白话说清楚:IP地址、子网掩码、网关、DNS等

前言 工作中常听别人说的本地网络是什么意思&#xff1f;同一网段又是什么意思&#xff1f;它俩有关系吗&#xff1f; 在工作中内经常会遇到相关的网络问题&#xff0c;涉及网络通信中一些常见的词汇&#xff0c;如IP地址、子网掩码、网关和DNS等。具体一点&#xff1a;经常会…

添砖Java之路(其八)——继承,final关键字

目录 继承&#xff1a; super关键字&#xff1a; 方法重写&#xff1a; 继承特点&#xff1a; 继承构造方法&#xff1a; final关键字&#xff1a; 继承&#xff1a; 意义&#xff1a;让类于类之间产生父类于子类的关系&#xff0c;子类可以直接使用父类中的非私有成员(包…

基准电流源电路仿真

1.补全电路 2.更改vpluse属性 3.添加tran仿真&#xff0c;因为加入启动电路主要看的就是tran仿真 4.启动仿真 5.看电路曲线 先点这个main form 不用选择ok&#xff0c;直接点中四条线&#xff0c;中间第2条曲线如果出现那样一个小波动后面没有起伏就说明成功了。

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

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

jmeter中java请求,解决不支持协议和元件,实现自定义元件

目录 java请求 作用场景 JavaTest类源码分析 编写java请求样例 新建java工程&#xff0c;导入jmeter主要依赖。 编写java请求类&#xff0c;继承AbstractJavaSamplerClient, 导入工程为jar包&#xff0c;放置jmeter安装目录下lib/ext目录 重启jmeter&#xff0c;添加ja…

03 Linux编程-进程

1、进程的相关概念 1.1 程序与进程 程序是静态的概念&#xff0c;进程是程序的一次运行活动。 1.2 查看系统中有哪些进程 ps #只显示一小部分进程 ps -aux #会打印当前所有进程 ps -aux|grep init #使用grep筛选出只含有init的进程top #运行显示的进程有点类似windows…

服务攻防——应用协议ssh,rsync,proftpd,openssh,libssh

1.口令猜解 ftp-拿来文件传输的 rdp-windows远程连接 3389 ssh-linux远程连接 工具hydra 口令 1.windows 这就爆破成功了&#xff0c;现在&#xff0c;我们就可以ftp爆破&#xff0c;爆破出ftp的密码 爆破出来后 访问 2.ssh Rsync&#xff08;配置不当&#xff0c;未授权…

云服务器和主机的区别

在今天的数字化时代&#xff0c;对于个人和企业来说&#xff0c;选择适当的服务器托管解决方案至关重要。然而&#xff0c;很多人对于云服务器和传统主机之间的区别不太清楚。本文将为您提供一个详细的指南&#xff0c;帮助您理解云服务器与主机之间的区别&#xff0c;以便您能…