CSRF 跨站请求伪造攻击

article/2025/9/23 3:35:35

1.概念

全称是CSRF 跨站请求伪造攻击,攻击者利用用户已登陆的账号,诱导用户访问已构造好的恶意链接或页面,在用户不之情的情况下,做一些违反用户本意的一些违法操作。

同源策略:协议相同,域名相同,端口相同。(三者缺一不可)

判断一下两个ip是否同源?

http://www/baidu.com

https://www.baidu.com

不同源,因为协议不同

http 协议明文传输,端口80

https 协议密文传输,端口443

判断以下两个ip是否同源?

http://www.langyangyang.cn 
http://www.langyangyangwoaini.cn 

不同源,域名不同

什么是跨站?

两个不同源的网站互相访问,就是跨站

使用javascript 通过一个技术jsonp实现,只能发送跨站发送get请求。

通过跨站请求资源共享来实现。

2.CSRF攻击流程

跨站请求伪造攻击的案例

1.懒羊羊点击访问http://bank.com向服务器发起请求

2.服务器返回登陆的页面

3.懒羊羊输入账号密码,点击登陆,提交到服务器

4.服务器端进行数据库的查询,进制账号密码的验证,通过验证后将用户的的信息保存到SessionID中,并返回给浏览器操作页面和,SessionID(只要用户登陆成功都会返回一个SessionID)

5.此时浏览器就会把操作页面返回给懒羊羊了,有查询,转账等一些功能。(此时的SessionID就保存到了 浏览器的Cookie当中)

6.假设现在懒羊羊要进行查询余额的操作 ,那么点击余额的这个按钮时,就相等于在给银行发起查询余额的请求,此时这个请求就会携带的在Cookie中的SessionID

7.服务器接受到这个请求查看是否有SessionID,如果存在SessionID的话,不用再次进行验证 ,

直接执行相关的操作,没有的话重新登陆

8.此时突然页面弹出来 了一个小窗口,非常的有吸引力。

9.此时的懒羊羊接受不了诱惑点击了进去,进去到了一个

http://yule.com的视频网站

10.此时懒羊羊看了一会之后,突然又弹出来了一个窗口,让懒羊羊对这个网站进行评价,或者其他操作,并且要点击提交 按钮,否认不让懒羊羊在进行观看!

11.懒羊羊觉得这个视频太上头了 !!还想继续看,就点击了提交的按钮,并且没有在银行的网站中点击用户退出的操作,此时这个发送的按钮就带着Cookie的数据,其中就包含了SessionID一起发送给了银行服务器

12.此时服务器收到了请求,由于又SessionID,就无需在进行验证 登陆,直接执行了转账的操作

13.此时懒羊羊回到了页面,又查看了直接的余额,突然发现余额清零了?

1.为什么懒羊羊的账号余额清零了?

因为SessionID,SessionID表示了个人的身份,所以不会在进行检查

2.何为跨站?

因为这个请求是http://www.yule.con这个网站,将请求发给服务器的,属于跨站了,

因为他不属于本地内部的网站发送的,所以他一般是由攻击者构造好的,向银行发送的

3.何为伪造?

这并不是懒羊羊的本意,懒羊羊并没有要进行转账的操作。但是为什么能够成功。

因为他点击了攻击者的链接或者页面,但是这个恶意的请求是向银行服务器发起的,因为懒羊羊没有在访问这个恶意链接前,没有退出自己的账号,所以还存在的Sessionid,所以当懒羊羊,点击了提交按钮的时候,这个请求就带着SessionID一起发送了,此时的银行服务器,也不知道是不是懒羊羊本人,银行卡的服务器只认SessionID,只要检查出你有这个SessionID那么银行的服务器就会执行这个操作,伪造在于使用的是懒羊羊账号的SessionID,以懒羊羊的身份进行了转账的操作

如何解决:

退出用户账号,如果点击了用户退出,就会删除Cookie当中的SessionID

补充:

SessionID在用户没有退出之前不会发生变化

在用户退出登陆后,再次重新登陆SessionID会发生变化

3.基于pikachu靶场的CSRF实验

3.1CSRF(GET)

使用BP进行抓包

修改数据,开始BP进行拦截抓包

1.BP拦截到的GET请求数据包

 GET请求数据包

GET /pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=111111111111&add=nba%2Blakesk&email=K%40KK&submit=submit HTTP/1.1

2.根据GET请求的数据包,构造恶意链接(掐头去尾)

不包含前面的GET请求和后面的协议


http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?
sex=boyl&phonenum=88888888&add=nba%2Blakesk&email=K%40KK&submit=submit 

为啥叫恶意链接?

因为我把里面的数据给修改了,可以看到我把sex的属性改成了boy,phonenum改成了8888888

假设一下

如果这个数据包是银行的数据包,如果在这个抓取到的数据包1代表的是查询,2代表的是转账

,我们把1修改成了2,本来用户要执行的是查询的操作,我们就修改称为了转账

3.将这个恶意链接发送给kobe诱导他点击该链接(修改成功的前提是用户没有退出,只要没有退出,那么这个执行的操作就会成功)

4.在同一个浏览器中执行这个操作。(不能在别的浏览器,因为没有SessionID)此时可以看到sex的性别就修改成boy了,意味着修改成功了

 

小扩展

GET请求和POST请求的区别是什么

GET请求的参数以查询字符串的格式通过URL传递。传递的数据量一般较小,而且不安全。

POST请求的参数可以放到请求包的包体中传递的。如果不使用抓包软件,一般看不到,相对安全。传输的量相对大一些

1.如果发送GET请求?

1.1浏览器输入网址,回车(这一定是GET请求)

1.2使用超链接a标签,href ="url"。发送的请求也是GET请求

1.3使用form表单,method属性设置的是GET

1.4编程使用request。GET函数发送的请求 

2.如何发POST请求 HTML表单(自己写给html表单发送请求)

2.1使用form表单,method属性设置的POST

2.2编程使用request。POST函数发送的请求

3.2CSRF(POST)

1.使用BP进行抓包

修改数据,开始BP进行拦截抓包

 可以看出改用户信息是通过POST发送的,信息在请求体中呈现

拿信息

/pikachu/vul/csrf/csrfpost/csrf_post_edit.php
……     
sex=boy&phonenum=88888888888&add=nba%2Blakesk&email=K%40KK&submit=submit

2.根据抓取信息,构造恶意链接。如何构造?

如何构造POST请求?

通过表单提交数据时,提交的方法,可以选择GET或POST。所以在页面要使用form 表单

提交给谁?action:http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php

数         据   : sex=ryao&phonenum=0000000000&add=nba%2Blakesk&email=K%40KK&submit=submit

<body>//改页面被加载,按钮自动执行单击事件//向http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php//发送sex  phonenum add email等信息<form action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="post"><input type="text" name="sex" value="ryao"><input type="text" name="phonenum" value="6666666666"><input type="text" name="add" value="nba+lakes"><input type="text" name="email" value="kobe@@@@@"><input type="submit" name="submit" value="submit" id="postsubmit"></form><script>//页面窗口加载解析完成后,马上调用这个匿名函数window.onload=function(){// 根据id元素的方式,获取控件的id,获取提交按钮,调用他的click方法.相当于自动点击该按钮document.getElementById("postsubmit") .click();}</script>

3.诱使客户点击刚刚所完成的html文件,该文件被加载,自动向链接,http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php,​​​​​,

以post的请求发送 

修改成功

 4.如果客户此时点击了退出登陆,那么则无法借助客户身份修改信息

 如何在用户没有退出登录的情况下,依然可以防范CSRF问题

3.3CSRF防御-csrf_token(令牌)

基于pikachu靶场的csrf_token的演示

1.查看页面源代码

2.可以看出与之前的GET和POST不同的是在源代码中添加了token

 3.查看Token的值,这个值是服务器返回给修改用户页面时,由服务器提交给浏览器的

 如果你在正准备进行一个操作,比如你要进行修改资料,那么当你点击修改资料的按钮 时,会向服务器发起请求,服务器此时会返回一个token,在你提交修改资料后的按钮时,这个token会和你携带的请求一起发送给服务器,服务器先 验证Token。然后在处理请求。

注意:token是一次性的,每次都不一样。可以 刷新这个编辑页面查看这个token的值

可以看出和之前的token发生了变化

4.使用BP抓包 ,拦截数据。比csrf-get多了一个Token

 5.将起始行的信息复制到一个文本中存储下来

GET /pikachu/vul/csrf/csrftoken/token_get_edit.php?sex=ryao&phonenum=66666666667&add=nba%2Blakes&email=kobe%40%40%40%40%40&token=3786763925f300bb0e594689612&submit=submit HTTP/1.1

6.根据GET请求构造恶意链接,完整的带参数的URL(掐头去尾)

http://127.0.0.1/pikachu/vul/csrf/csrftoken/token_get_edit.php?sex=bianxingren&phonenum=644444444444&add=nba%2Blakes&email=kobe%40%40%40%40%40&token=3786763925f300bb0e594689612&submit=submit

7.将恶意链接发给用户,诱使他 点击链接(即使用户没有退出,依旧会修改失败)

8.在同一个浏览器中执行这个操作,此时如果sex性别和phonenum没有被修改,说明Token起作用了

 页面:没有改变修改失败

小扩展:

Token是怎么来的?谁给浏览器的?

Token是服务器给的(开发人员编写的,在服务器端生成,并返回给浏览器的),所以当用户修改数据后,提交给服务器,服务器可以验证Token是否正确

为什么我有了Token依旧提交失败?

因为 Token值是一次性的,生成了新的Token旧的Token就不能用了

如果把Token值给改了,还会执行吗?

不会。如果改了话,服务端就不认这个Token了,哪怕你只修改一个数据都不认了,

如果把Token值给改了就不会让你修改了,即使你是内部的页面(自己)也不能进行修改了,相当于你自己把令牌给改了,变成假的了,就连你正常的功能也屏蔽了

有解决Token提交失败的方法吗?

有的。在Token还没有提交前,就截取他的Token去使用,那么就可以成功。

举个例子:比如说我们要进行一个操作,但是我们在还在进行操作的时候,没有确定提交操作,

此时的Token就是还没有使用的,只要攻击者在用户完成操作前,截取掉用户的Token去操作使用,那么就可以提交成功


http://chatgpt.dhexx.cn/article/iN5QULS2.shtml

相关文章

CSRF-跨站请求伪造的原理与修复方式

CSRF: Cross site Request Forgery 跨站请求伪造 原理&#xff1a; 利用xss方式注入一段脚本&#xff0c;通过伪装来自受信任用户的请求来利用受信任的网站&#xff0c;当受害者在浏览器中运行该脚本时&#xff0c;脚本仿冒受害者&#xff0c;向合法的web系统发送一个请求&…

web基础漏洞之CSRF(跨站请求伪造漏洞)

cookie session token 我觉得在开始学习CSRF之前应该先学会区分这三种东西&#xff1a;cookie session token cookie: Cookie&#xff0c;有时也用其复数形式 Cookies。类型为“小型文本文件”&#xff0c;是某些网站为了辨别用户身份&#xff0c;进行Session跟踪而储存在用户…

Laravel框架之CSRF跨站请求伪造

一、CSRF攻击 1、什么是CSRF攻击 CSRF是跨站请求伪造&#xff08;Cross-site request forgery&#xff09;的英文缩写&#xff0c; 原理图示&#xff1a; csrf在laravel框架中的使用&#xff0c;就是在客户端form表单中设置一个_token表单域 同时把该表单域的值记录给sessi…

什么是CSRF(跨站请求伪造)?

文章目录 1. CSRF是什么&#xff1f;1.1 CSRF攻击细节CSRF攻击原理及过程如下&#xff1a; 2. CSRF漏洞检测3. 防御CSRF攻击&#xff1a;3.1 验证 HTTP Referer 字段3.1.1 优点&#xff1a;3.1.2 缺点: 3.2 在请求地址中添加 token 并验证3.3 在 HTTP 头中自定义属性并验证 1. …

WordPress 跨站请求伪造漏洞

WordPress 跨站请求伪造漏洞 漏洞ID2500593漏洞类型跨站请求伪造发布时间2021-07-08更新时间2021-07-09 CVE编号CVE-2021-20781 CNNVD-IDCNNVD-202107-420漏洞平台N/ACVSS评分N/A 漏洞简介 WordPress是Wordpress基金会的一套使用PHP语言开发的博客平台。该平台支持在PHP和My…

056 CSRF跨站请求伪造

文章目录 一&#xff1a; 概述二&#xff1a;关键点三&#xff1a;目标四&#xff1a;CSRF攻击如何触发&#xff1f;五&#xff1a;实战&#xff1a;CSRF场景复现六&#xff1a;CSRF防御6.1 无效的防御6.2 有效的防御 一&#xff1a; 概述 跨站请求伪造&#xff08;cross site…

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;字典&…