056 CSRF跨站请求伪造

article/2025/9/23 3:48:53

文章目录

  • 一: 概述
  • 二:关键点
  • 三:目标
  • 四:CSRF攻击如何触发?
  • 五:实战:CSRF场景复现
  • 六:CSRF防御
    • 6.1 无效的防御
    • 6.2 有效的防御

一: 概述

跨站请求伪造(cross site request forgery,csrf)是一种攻击,它强制终端用户在当前对其身份验证后的web应用程序上执行非本意的操作。

可以这么理解:CSRF是跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性。

攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

在网上找到了一张很好理解的图:
在这里插入图片描述
CSRF攻击的着重点在伪造更改状态的请求,而不是盗取数据,因为攻击者无法查看对伪造请求的响应。借助社工的一些帮助(例如通过电子邮件或聊天发送链接),攻击者可以诱骗用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF攻击可以强制用户执行状态更改的请求,例如转移资金,更改其电子邮件地址等。如果受害者是管理账户,CSRF可能会危及整个web应用程序。
 
XSS与CSRF的区别:
XSS: XSS漏洞——构造payload——发送给受害人——受害人点击打开——攻击者获取受害人的cookie——攻击者使用受害人cookie完成攻击
CSRF: CSRF漏洞——构造payload——发送给受害人——受害人点击打开——受害人执行代码——受害人完成攻击(不知情)
 

二:关键点

CSRF是一种欺骗受害者提交恶意请求的攻击。它继承了受害者的身份和特权,代表受害者执行非本意、恶意的操作。对于大多数站点,浏览器请求自动发送与站点关联的所有凭据,例如用户的会话cookie,IP地址,Windows域凭据等。因此,如果用户当前已对该站点进行了身份验证,则该站点将无法区分受害者发送的伪造请求和受害者发送的合法请求。
 
 

三:目标

CSRF攻击目标是能够更改服务器状态或数据的业务或功能,例如更改受害者的电子邮件,密码或购买商品。强制受害者查询数据,对于攻击者来说没什么用,因为无法获得服务器响应。因此,CSRF攻击针对引起状态变化的请求。

有时可以将CSRF攻击存储在易受攻击的站点上。这些漏洞被称为“存储的CSRF漏洞”。这可以通过简单的在接受HTML的字段中存储IMG或IFRAME标记,或通过更复杂的跨站点脚本攻击来实现。如果攻击可以在站点中存储CSRF攻击,则攻击的严重性会被放大。特别是受到攻击的可能性增加,因为受害者比互联网上的某个随即页面更有可能查看包含攻击的页面。
 
 

四:CSRF攻击如何触发?

	1、<a href="转账连接">大爷来玩呀</a>2、<img src="">		利用src的链接

 

五:实战:CSRF场景复现

需要一个bank网站源码,很可惜没得源码。
以下为视频部分截图
首先开启一台虚拟机,(视频中的IP地址:172.16.132.161,这是银行自身的)把bank这个文件夹放到phpstudy/www目录下。
里面有个config.inc.php文件,这是关于数据库的配置
在这里插入图片描述
需要一个bank的数据库,那么怎么用phpstudy来部署一个bank数据库呢?
在这里插入图片描述
确保bank文件夹下有bank.sql文件
在这里插入图片描述
在这里插入图片描述
登录 admin/123456
在这里插入图片描述
然后用另一个浏览器登录另一个账号,test/123456
在这里插入图片描述
让test对admin进行转账操作,发现转账成功。
再用另一个浏览器登录hacker账号 hacker/123456
在这里插入图片描述
然后启动另一台虚拟机(视频中ip为172.16.132.131,这是攻击者搭建的),在phpstudy/www目录下有个CSRF文件夹,
在这里插入图片描述
这是csrf/get.html源码内容
在这里插入图片描述
要完成攻击过程需要四个角色:server,被攻击者,攻击者,hacker_server
给张图便于理解

各个页面的登录均用具体的IP,不要用127或者localhost
在172.16.132.161的虚拟机上用浏览器登录admin账号:
在这里插入图片描述
再没有安全退出的情况下,访问了不明网站,比如172.16.132.131,如下图,点击了点击就送

在这里插入图片描述
然后切回自己的admin界面,然后发现账户余额少了钱。
在这里插入图片描述
此时,我们进入黑客登录页面,刷新一下,账户余额增加了
在这里插入图片描述
那为什么会出现这种情况呢?
在这里插入图片描述
在这里插入图片描述
一般完成转账需要三个角色,原账户,目标账户,转账金额。但是上图只有目标客户和转账金额,原账户是以cookie的方式存在的。
虽然浏览器是131网址,但是有重定向到161地址,那么存在161地址的cookie就会转移到这里来。
 
以上场景中是利用img标签发送的get请求。那么是不是把关键操作使用post请求,就能够防御CSRF漏洞了呢?答案是否定的。

post方式:

即使转账操作使用Post方法,攻击者也可以通过构造表单的方式来伪造请求,核心代码如下:
<meta charset='utf-8'>
<form name='csrf' action='http://172.16.132.161/bank/action.php' method='post'>
<input type='hidden' name='username' value='hacker'>		// hidden隐藏的标签
<input type='hidden' name='money' value='1000'>
</form>
<script>document.csrf.submit()</script>
<img src="./1.jpg"><br />
<!--<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>倚天不出,谁与争锋</a> <br />
此处可以利用JS来自动提交隐藏的表单,但是页面会跳转到self.php并且显示转账记录。这看起来就不是那么“友好”了。
那么,有没有办法做到“不知不觉”呢?
实战:与XSS的结合添加后台账号,攻击者可以通过XSS来触发CSRF攻击,就不需要搭建服务器了。因为可以利用JS来发送请求。通过研究受害网站的业务流程,攻击者可以构造如下代码。(把以下代码插入cms系统的留言板)<script>xmlhttp = new XMLHttpRequest();xmlhttp.open(\'post\',\'http://172.16.132.161/cms/admin/user.action.php\',false);xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");xmlhttp.send(\'act=add&username=hacker&password=123456&password2=123456&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0\');</script>然后在后台管理就可以通过hacker/123456登录后台

 

六:CSRF防御

6.1 无效的防御

很多防御方式都没有办法解决CSRF的问题。

1、使用秘密cookie
所有的cookie,即使是秘密的cookie,也会随着每个请求一起提交。无论最终用户是否被欺骗提交请求,都将提交所有身份证令牌。

2、仅接受POST请求
可以开发应用程序以仅接受用于执行业务逻辑的POST请求。误解是由于攻击者无法构建恶意链接,因此无法执行CSRF攻击。不幸的是,这种逻辑不正确。
有许多方法可以让攻击者欺骗受害者提交伪造的POST请求,例如在隐藏值的攻击者网站中托管的简单表单。此表单可以由javascript自动触发,
也可以由认为表单会执行其他操作的受害者触发。

3、多步交易
多步交易不足以预防CSRF。只要攻击者可以预测或推断完整的事务的每个步骤,就可以实现CSRF。

4、URL重写
这可能被视为一种有用的CSRF预防技术,因为攻击者无法猜测受害者的会话ID,但是,用户的会话ID在URL中公开,
所以不建议通过引入另一个安全漏洞来修复一个安全漏洞。

5、HTTPS
https本身无法防御CSRF。但是,https应被视为任何预防措施值得信赖的先决条件。

 

6.2 有效的防御

1、验证referer字段
根据HTTP协议,在http头中有一个字段叫referer,它记录了该http请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自同一个网站。
比如某银行的转账是通过用户访问http://172.16.132.161/bank/action.php?username=hacker&money=1000&submit=%E4%BA%A4%E6%98%93 页面完成,
用户必须登录,并且访问,http://172.16.132.161/bank/index.php ,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的
referer值就会是转账按钮所在页面的URL。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求
到银行时,该请求的referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求,验证其referer值,如果是以172.16.132.161
的地址或域名,则说明该请求是来自银行网站自己的请求,是合法的。如果referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。
但是referer也是可以修改的,功与防无时无刻不在互相斗争。。

2、添加Token验证
CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于cookie中,因此攻击者可以在不知道这些验证信息的
情况下直接利用用户自己的cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于cookie之中。
鉴于此,系统开发者可以在http请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token
或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。

3、二次验证
二次验证,就是在转账等关键操作之前提供当前用户的密码或者验证码。二次验证可以有效防御CSRF攻击。

4、用户养成良好的习惯
对于普通用户来说,多学习并具备网络安全知识以防御网络攻击是不现实的。但若用户养成良好的上网习惯,则能够很大程度上减少CSRF攻击的危害。例如,用户上网时,
不要轻易点击网络论坛,聊天室,及时通讯工具或者电子邮件中出现的链接或者图片,及时退出长时间不使用的已经登录的账户,尤其是系统管理员,应尽量登出系统的
情况下点击未知的链接和图片。除此之外,用户还需要在连接互联网的计算机上安装合适的安全防护软件,并及时更新软件厂商发布的特征库,以保持安全软件对最新攻击的实时跟踪


http://chatgpt.dhexx.cn/article/2UDy28OV.shtml

相关文章

CSRF - 跨站请求伪造

什么是CSRF? CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff1a;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&#xff08;XSS&#xff09;&a…

CSRF(跨站请求伪造)

目录 CSRF 原理及过程 概述 关键点 pikachu靶场之CSRF GET型 POST型 Token 防御 如何挖掘CSRF漏洞 使用burp验证csrf 总结 CSRF (Cross-Site Request Forgery) CSRF是一种欺骗受害者提交恶意请求的攻击&#xff0c;攻击者盗用你的身份&#xff0c;向服务器发送请求…

Spring Boot项目CSRF (跨站请求伪造)攻击演示与防御

CSRF ,Cross-site request forgery,跨站请求伪造。是常见的网络攻击的方式之一,2007年曾被列为互联网20大安全隐患之一。攻击过程是攻击者伪造用户的浏览器请求,访问一个用户曾经访问过的网站, 使目标网站误以为是用户的操作而执行命令。 本篇j基于Spring Boot创建项目,…

每日漏洞 | 跨站请求伪造

01 漏洞描述 HTTP的无状态性&#xff0c;导致Web应用程序必须使用会话机制来识别用户。一旦与Web站点建立连接(访问、登录)&#xff0c;用户通常会分配到一个Cookie&#xff0c;随后的请求&#xff0c;都会带上这个Cookie&#xff0c;这样Web站点就很容易分辨请求来自哪个用户&…

CSRF跨站请求伪造

CSRF介绍&#xff1a; CSRF中文名称&#xff1a;跨站请求伪造&#xff0c;是一种“ 挟持用户”在当前已登陆的Web应用程序上执行“ 非本意操作”的攻击方法。 一、CSRF回放攻击流程 套用老师所给的一张攻击原理图 从这张流程图里我们总结一下CSRF攻击生效所需要的两个必要条件 …

【CSRF-01】跨站请求伪造漏洞基础原理及攻防

目录 1 CSRF概述2 CSRF攻击过程及原理2.1 CSRF场景例子2.2 攻击过程2.3 原理2.4 攻击成功的条件&#xff1a; 3 CSRF攻击方式/如何触发5 CSRF的防御5.1 一些无效的防御手段5.2 有效的防御手段 6 总结参考文章 1 CSRF概述 定义&#xff1a;CSRF&#xff08;Cross-site request …

一文带你学习跨站点请求伪造(CSRF)

一文带你学习跨站点请求伪造&#xff08;CSRF&#xff09; 1.何为CSRF2.浏览器的Cookie策略3.P3P头的副作用4.CSRF攻击流程5.CSRF的分类GET型POST-表单型POST-JSON型 6.CSRF的快速验证7.CSRF的防御验证码Referer CheckAnti CSRF Token 1.何为CSRF CSRF的全名是Cross Site Requ…

flask中的csrf防御机制

csrf概念 CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&#xff08;XSS&#xff09;&…

跨站请求伪造(csrf)

1、csrf介绍 CSRF (Cross-site request forgery&#xff0c;跨站请求伪造)也被称为One Click Attack或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS)&#xff0c;但它与XSS非常不同&#xff0c;XSS利用站…

跨站请求伪造

1. 什么是跨站请求伪造&#xff08;CSRF&#xff09; CSRF&#xff08;Cross-site request forgery跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&…

压缩包破解

压缩包破解 文章目录 压缩包破解伪加密压缩包格式压缩源文件数据区压缩源文件目录区压缩源文件目录结束标志真加密字节对比伪加密字节对比伪加密 工具 ZipCenOp.jarjoin 破解fcrackzip 或者 ziperello 暴力破解伪加密 压缩包格式 一个 ZIP 文件由三个部分组成: 压缩源文

android apk解包和打包

最近项目开发&#xff0c;我的jar包和资源文件给别的同事打包&#xff0c;这样我自己测试很麻烦&#xff0c;每次改一点东西都要找人打包测试&#xff0c;很麻烦&#xff0c;就想着能够解包&#xff0c;更新一下自己的部分代码&#xff0c;再打包apk直接测试。后来找了一些网上…

python基础语法之拆包(解包)

理解和使用python中的拆包会让我们的代码变得流畅&#xff0c;不仅对自己的手关节有好处&#xff0c;也使看官觉得很赏心悦目&#xff0c;既然拆包这么香那就抓紧用起来吧。 1、直接交换变量的本质 在C&#xff0c;C和Java语言中如果想交换两个变量的值就必须用到第三个临时变…

Python中的解包

一、解包&#xff0c;英文名字叫UNPACKING,就是讲容器中所有的元素逐个取出来。 python中解包是自动完成的&#xff0c;例如&#xff1a; a,b,c [1,2,3] print(a,b,c) 1 2 3 除列表对象可以解包外PYTHON中的任何可迭代对象都可以进行解包&#xff0c;元组&#xff0c;字典&…

【Python小知识】:什么是序列解包

前言&#xff1a; &#x1f482;作者简介&#xff1a;大家好&#xff0c;我是翼同学&#xff01; &#x1f4c3;个人主页&#xff1a;翼同学的CSDN博客 &#x1f525;系列专栏&#xff1a;【python学习笔记】 &#x1f44f;备注&#xff1a;如果文章有误&#xff0c;请指正&…

python 抓包与解包

我使用的环境为&#xff1a;Windows10、python3.6、scapy 2.4.0 一、基本知识 Sniff方法定义&#xff1a;sniff(filter"",iface"any", prnfunction, countN)filter的规则使用 Berkeley Packet Filter (BPF)语法 iface用来指定要在哪个网络接口上进行抓包&…

.pkg文件解包

PePKG下载 1、拖入 RePKG.exe文件到cmd中 2、输入 extract&#xff0c;并将需要解包的 .pkg文件拖入cmd中 3、输入 -o 4、选择输出路径 创建一个文件拖入cmd中 回车即可完成解包

文件打包解包的方法

文件打包 前言 在很多情况下&#xff0c;软件需要隐藏一些图片&#xff0c;防止用户对其更改&#xff0c;替换。例如腾讯QQ里面的资源图片&#xff0c;哪怕你用Everything去搜索也搜索不到&#xff0c;那是因为腾讯QQ对这些资源图片进行了打包&#xff0c;当软件运行的时候解…

python中拆包解包用法详解

python可以对元组和字典进行拆包或解包操作。 1、拆包&#xff1a;元组 示例代码1&#xff1a; def return_num():return 100, 200num1, num2 return_num() print(num1) # 100 print(num2) # 200运行结果&#xff1a; 示例代码2&#xff1a; def return_num1():return 1…

android-apk解包打包

title: android-apk解包打包 categories: Android tags: [android, 加壳] date: 2022-09-28 10:29:51 comments: false mathjax: true toc: true android-apk解包打包, 以下所有操作都需要在配置好 java 环境下进行 前篇 android apk解包和打包 - https://blog.csdn.net/u0114…