CSRF漏洞渗透与攻防(一)

news2025/1/18 13:57:08

目录

前言

什么是CSRF漏洞

CSRF实现流程

CSRF漏洞危害

XSS漏洞危害 

CSRF与XSS区别 

CSRF分类 

GET型:

POST型:

CSRF漏洞案列模拟

CSRF常用Payload:

CSRF漏洞挖掘

检测工具 

CSRF漏洞防御 

防御思路

我们该如何去防御CSRF漏洞攻击


前言

CSRF(Cross-Site Request Forgery),中文名为跨站请求伪造攻击。这种攻击一般是指攻击者盗用了你的身份信息(比如Cookie),随后用你的身份信息登录了存在此类安全漏洞的重要网站,最后通过你的身份做了一些“合法”的操作,使你蒙受巨大损失。

什么是CSRF漏洞

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

CSRF实现流程

1.  用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.  在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3.  用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4.  网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A
5.  浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。 

CSRF漏洞危害

例如:

  • 修改账户信息
  • 利用管理员账号,上传木马文件
  • 传播蠕虫病毒(点击、扩散、点击……)
  • 和其他攻击手段配合,实现攻击,比如XSS、SQL注入

XSS漏洞危害 

  •  获取cookie,实现冒充身份的后续操作
  •  刷点击
  •  弹广告
  •  传播蠕虫病毒

CSRF与XSS区别 

CSRF:

XSS:

CSRF分类 

GET型:

如果一个网站某个地方的功能,比如用户修改邮箱是通过GET请求进行修改的。如:/user.php?id=1&email=123@163.com ,这个链接的意思是用户id=1将邮箱修改为123@163.com。 当我们把这个链接修改为 /user.php?id=1&email=abc@163.com ,然后通过各种手段发送给被攻击者,诱使被攻击者点击我们的链接,当用户刚好在访问这个网站,他同时又点击了这个链接,那么悲剧发生了。这个用户的邮箱被修改为 abc@163.com 了

POST型:

在普通用户的眼中,点击网页->打开试看视频->购买视频是一个很正常的一个流程。可是在攻击者的眼中可以算正常,但又不正常的,当然不正常的情况下,是在开发者安全意识不足所造成的。攻击者在购买处抓到购买时候网站处理购买(扣除)用户余额的地址。比如:/coures/user/handler/25332/buy.php 。通过提交表单,buy.php处理购买的信息,这里的25532为视频ID。那么攻击者现在构造一个链接,链接中包含以下内容。
 

<form action=/coures/user/handler/25332/buy method=POST>      
<input type="text" name="xx" value="xx" />      
</form>      
<script> document.forms[0].submit(); </script>

当用户点击该链接,访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作,自动购买了id为25332的视频,从而导致受害者余额扣除。 

 CSRF漏洞案列模拟

接下来我们自己搭建一个靶场来演示一下CSRF漏洞究竟是个什么东西。

可以看到这是一个登录界面:

 为了大家能看的更清楚,这是后台数据库中的用户数据:

 接下来,我们用用户1100和密码123456去登陆:

如下点击登录后,我们可以看到账户余额有100000人名币:

 接下来,我们向用户1101转账1000人名币来测试网站功能是否正常:

看到效果如下图所示,说明网站功能正常:

 再来看一下数据库:

可以看到1101用户的账户余额多了1000元。

假设在我们没有关闭这个网页的情况下,我们又打开了恶意一个网站,如下图所示:

 我们可以看到这里有一个恶意链接,我们点击他,以模仿那些用户在平时访问恶意网站时一些大家(懂的都懂)的行为:

点击后,出现如下图所示:

这时,因为我们之前的银行转账的网站没有退出,计算机里还保存着银行网站的Cookie信息,我们回到之前的银行网站:

然后我们发现我们的账户余额莫名其妙的少了1000人名币。

我们打开后台的数据库查看,发现我们的钱在没有经过我们1100账户操作的情况下,转给了1102账户1000人名币:

 我们想来想去也想不明白这是怎么一回事,回过神,是不是因为我们点了这一个链接的原因呢:

我们再次点击这个链接看一下:

然后回到我们的银行网站,发现我们的钱又少了1000元:

这下我们可以确定了是这个链接的问题,这时问题来了,我们只不过是点了一个链接而已,又没在黄色网站登录用户,他是怎么把我们的钱给转走了呢?

我们来看一下黄色网站的源代码:

可以看到黄色页面中有两个img标签,第一个是一张图,而第二个则是一个隐藏的img标签,它调用了银行网站的接口API,只要我们点击了这个链接一次(在我们没有退出银行网站的情况下,浏览器还保存着我们访问银行网站的Cookie信息),我们的钱就会被转到1102账户下1000人名币。

所以到这里为止,这就是一次最简单的CSRF漏洞攻击。

CSRF常用Payload:

我们再来看一些CSRF常用的Payload的代码:

 这就是访问bank网站,调取了bank网站的接口信息,恶意执行操作。

 这就是构造了一个超链接,调取了bank网站的接口信息,诱惑用户去点击,执行恶意操作。

这里是在恶意网页中设计了一个自动提交的表单,只要我们访问该网页,这个表单就会调取bank网站的接口信息,构造恶意数据,自动提交,在不知不觉中执行恶意操作。

CSRF漏洞挖掘

CSRF漏洞挖掘具体有三个问题:

1、怎么确定一个接口地址有没有CSRF漏洞呢?

2、具体怎么操作?

3、有没有工具可以使用?

检测工具 

Burp Suite
CSRF Tester
https://github.com/s0md3v/Bolt
各种云产品

Burp Suite演示: 

我们进行如上操作,抓包分析:

 接下来我们右键,然后进行如下操作:

然后他给我们生成了如下这么一个界面:

他自动生成了这么一串POC,我们把这段POC复制下来:

然后我们构造一个html页面,将复制的代码放进去:

然后我们用浏览器去打开这个html网页:

出现了如图下所示的一个界面:

我们点击这个按钮:

点击前:

 点击后:

 从上诉的情况可以看出这个网站接口毫无疑问的存在CSRF漏洞。

Bolt 演示:

 我们打开这个程序:

 我们检测目标页面是否存在CSRF漏洞,执行如下代码:

 检测到目标页面存在CSRF漏洞:

CSRF漏洞防御 

防御思路

1、我们能不能 区分 一个请求是来自于自己的前端页面,还是第三方的网站?
2、 怎么让自己的前端页面和伪造的请求变得 不一样 呢?
我们这里拿一个实际案列演示一下,更方便大家理解:

 我们百度搜索左耳朵耗子的博客,点击他:

然后他这里面直接出现了一个警告:

我们通过其他浏览器来访问这个界面:

没有问题。

那么问题来了,他是怎么知道我们是通过百度浏览器来访问他的呢?

其实他这里就是运用了一个Referrer字段来检测的。

HTTP Request Header

我们这里用百度网站随便打开了一个网站,看到Referrer字段如上所示,Referrer字段的作用就是假设我们打开了一个网站或者在网站中执行了跳转到新的网站的操作,而Referrer字段则表示我们是来自哪个网站或者是从哪个网站跳转而来的。

referer的不足:
1、可以任意修改
2、可以为空

我们该如何去防御CSRF漏洞攻击

(1)验证 HTTP Referer 字段

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory,用户必须先登陆 bank.example,然后通过点击页面上的按钮来触发转账事件。这时,该转帐请求的 Referer 值就会是转账按钮所在的页面的 URL,通常是以 bank.example 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 是指向黑客自己的网站。因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

这种方法的显而易见的好处就是简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。      

我们这里拿DVAW-Medium靶场的防御方法来演示,我们来看这个靶场的源码:

 他这里是什么意思呢?就是假设说 我的网站ip地址是127.0.0.1,这里去检测对我网站的请求中有没有包含我这个网站的ip值,如果是,那么就表明是在我当前的网站下发起的请求,假如是恶意网站发起的请求的话,那么Referrer字段中是不是就是包含了恶意网站的ip或者域名信息了,那么是不是就不匹配了?所以我们通过以上代码判断用户发起的请求是不是来源于本站的,而不是恶意网站。        

然而,这种方法并非万无一失。Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。事实上,对于某些浏览器,比如 IE6 或 FF2,目前已经有一些方法可以篡改 Referer 值。如果 bank.example 网站支持 IE6 浏览器,黑客完全可以把用户浏览器的 Referer 值设为以 bank.example 域名开头的地址,这样就可以通过验证,从而进行 CSRF 攻击。 即便是使用最新的浏览器,黑客无法篡改 Referer 值,这种方法仍然有问题。因为 Referer 值会记录下用户的访问来源,有些用户认为这样会侵犯到他们自己的隐私权,特别是有些组织担心 Referer 值会把组织内网中的某些信息泄露到外网中。因此,用户自己可以设置浏览器使其在发送请求时不再提供 Referer。当他们正常访问银行网站时,网站会因为请求没有 Referer 值而认为是 CSRF 攻击,拒绝合法用户的访问。
 

(2)在请求地址中添加 token 并验证token:

在请求中加入一些随机字段(第三方不知道也猜不出来),让第三方网站无法伪造请求

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

这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 ,这样就把 token 以参数的形式加入请求了。但是,在一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的方法就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 a 和 form 标签后加入 token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的 html 代码,这种方法就没有作用,还需要程序员在编码时手动添加 token。          

该方法还有一个缺点是难以保证 token 本身的安全。特别是在一些论坛之类支持用户自己发表内容的网站,黑客可以在上面发布自己个人网站的地址。由于系统也会在这个地址后面加上 token,黑客可以在自己的网站上得到这个 token,并马上就可以发动 CSRF 攻击。为了避免这一点,系统可以在添加 token 的时候增加一个判断,如果这个链接是链到自己本站的,就在后面添加 token,如果是通向外网则不加。不过,即使这个 csrftoken 不以参数的形式附加在请求之中,黑客的网站也同样可以通过 Referer 来得到这个 token 值以发动 CSRF 攻击。这也是一些用户喜欢手动关闭浏览器 Referer 功能的原因。
 

我们这里拿DVAW-high靶场的防御方法来演示,我们来看这个靶场的源码:

可以看到代码,他这里用了一个叫做token值的东西用来做防御。

验证码:

二次验证:

RECAPTCHA(IP验证):

 个人用户建议:

1、不要访问不安全的网站
2、不要随意点开别人发给你的链接

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

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

相关文章

LeetCode动态规划—打家劫舍从平板板到转圈圈(198、213)

打家劫舍平板板打家劫舍转圈圈打家劫舍&#xff08;进阶版&#xff09;平板板打家劫舍 转化子问题&#xff1a; 按顺序偷n间房子&#xff0c;就是考虑偷前n-1间房子还是偷前n-2间房子再偷第n间房子。 列出公式&#xff1a; res[n] max{ res[n-1] , 数组中最后一个数据res[n-…

企业信息化之源代码防泄密场景分析

场景描述 随着企业信息化发展迅速&#xff0c;越来越多的无形资产面临着被泄露&#xff0c;被盗取的&#xff0c;或员工无意导致的数据泄密风险。尤其是有源码开发的企业&#xff0c;源代码的安全更是重中之重&#xff0c;一旦泄密&#xff0c;有可能给企业带来不可估量的损失…

全程数字化的企业电子招标采购管理系统源码

全程数字化的采购管理 智能化平台化电子化内外协同 明理满足采购业务全程数字化&#xff0c; 实现供应商管理、采购需求、全网寻源、全网比价、电子招 投标、合同订单执行的全过程管理。 传统采购模式面临的挑战 如何以最合适的价格,找到最优的供应商,购买到最好的产品和服务?…

程序员必备网站,建议收藏!

俗话说的好&#xff0c;一个程序员&#xff0c;20%靠知识储备&#xff0c;80%靠网络搜索。 打开代码&#xff0c;打开Google&#xff0c;开始工作。 那么常用的写码软件&#xff0c;你知道几个呢&#xff1f; 下面我们来一起看一下常用的写码软件吧~ 建议收藏本文&#xff…

【算法】面试题 - 链表

链表相关面试题141. 环形链表问题&#xff1a;快慢指针为什么一定会相遇142. 环形链表 II问题&#xff1a;如何确认入口160. 相交链表237. 删除链表中的节点19. 删除链表的倒数第 N 个结点21. 合并两个有序链表23. 合并K个升序链表&#xff08;两种解法&#xff09;扩展&#x…

国产手机扬眉吐气,终于打击了苹果的嚣张气焰

苹果在9月份、10月份都取得了快速增长&#xff0c;而国产手机品牌持续下滑&#xff0c;但是11月份终于让国产手机捡回了主动权&#xff0c;11月份的数据显示有国产手机品牌的出货量大幅增长&#xff0c;而苹果的出货量却大幅下滑&#xff0c;国产手机成功反击了苹果。分析机构给…

Vue + SpreadJS 实现高性能数据展示与分析

Vue SpreadJS 实现高性能数据展示与分析 在前端开发领域&#xff0c;表格一直都是一个高频使用的组件&#xff0c;尤其是在中后台和数据分析场景下。但当一屏展示数据超过1000条数据记录时&#xff0c;会出现浏览器卡顿等问题&#xff0c;严重影响客户体验。为解决这些性能问…

Seay代码审计系统审计实战

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是Seay代码审计系统审计实战。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

【算法题解】5. 删除有序数组中的重复项 + 移动零

文章目录删除有序数组中的重复项题目解题思路代码实现复杂度分析移动零题目解题思路代码实现复杂度分析删除有序数组中的重复项 题目 给你一个 升序排列 的数组 nums &#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素只出现一次 &#xff0c;返回删除后数组的新…

Python 并发编程实战,用多线程、多进程、多协程加速程序运行

Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行 文章目录Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行1、什么是CPU密集型计算、IO密集型计算&#xff1f;2、多线程、多进程、多协程的对比3、怎么根据任务选择对应技术&#x…

达梦数据成功过会!信创浪潮中如何成就一家国产龙头?

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业2022年12月22日&#xff0c;上海证券交易所科创板上市委员会发布《2022年第110次审议会议结果公告》&#xff0c;武汉达梦数据股份有限公司&#xff08;首发&#xff09;符合发行条件、上市条件和信息披露要求。该公告标志着…

5.4 迭代语句

文章目录while语句使用while循环传统for语句传统for循环的执行过程for语句头中的多重定义省略for语句头的某些部分范围for语句do while语句迭代语句通常称为循环,它重复执行操作直到满足某个条件才停下来。while和for语句在执行循环体之前检查条件&#xff0c;do while 语句先执…

MATLAB算法实战应用案例精讲-【连接分析】PageRank(补充篇)(附Python代码实现)

前言 PageRank算法在1998年4月举行的第七届国际万维网大会上由Sergey Brin和Larry Page提出。PageRank是通过计算页面链接的数量和质量来确定网站重要性的粗略估计。算法创立之初的目的是应用在Google的搜索引擎中,对网站进行排名。 随着国内外学者的深入研究,PageRank算法…

burpsuite靶场——SSRF

文章目录针对本地服务器的基本 SSRF针对另一个后端系统的基本 SSRFSSRF 与基于黑名单的输入过滤器基于白名单的输入过滤器的 SSRFSSRF 通过开放重定向漏洞绕过过滤器带外检测的盲 SSRF利用 Shellshock 的盲 SSRF针对本地服务器的基本 SSRF 在商品下查看货物库存情况时抓包 有st…

操作系统实验2:fork()系统调用

操作系统实验2:fork()系统调用 文章目录操作系统实验2:fork()系统调用Task1: fork的基本使用代码运行结果解释Task2: 深入理解fork创建的子进程与父进程的关系代码实验结果现象解释遇到的问题1.乌龙事件 vscode2.the troubles encountered in task1如何跑.sh文件编译链接遇到的…

SegeX Progress:MFC通用进度条

----哆啦刘小洋 原创&#xff0c;转载需说明出处 MFC高级通用进度条-目录1 简介2 进度条实现基本原理3 使用方法3 .1 简单情况3.2 两个前后独立的进度条3.3 实际应用的一般情况3.4 带子进度条4 其他4.1 使用限制4.2 其他全局宏&#xff08;函数&#xff09;4.3 当前进度条设置1…

技术开发107

技术开发107 业务内容&#xff1a; 汽车音响等汽车电子部件试制、电子设备部件试制、精密钣金试制精密钣金试制 公司简介&#xff1a; 代表&#xff1a;中山尚美 成立时间&#xff1a;1950年6月 资本金&#xff1a;1000万日元 员工数&#xff1a;15名 资格认证&#xff…

数智为线,经纬中国:新华三勾勒出的山河锦绣

刺绣&#xff0c;是中华民族源远流长的技艺美术。早在《尚书》中&#xff0c;就记载了章服制度“衣画而裳绣”。而刺绣之美之所以能够传承千年&#xff0c;形成中国审美的一张名片&#xff0c;就是因为传统的染色技艺不够精细&#xff0c;颜色常常浮在布匹表面&#xff0c;但刺…

【卫朋】营销技能:营销4P之外,还有这些经典理论

一提到市场营销&#xff0c;很多人都可能会联想到经典的营销4P理论&#xff0c;但你可能不知道的是&#xff0c;4P理论只是“4字营销理论家族”中的一员。 市场营销“4字家族”中的4P、4R、4C理论构成了市场营销的基础部分。 它们诞生于特殊的环境和年代&#xff0c;为当时的企…

Redis原理篇—内存回收

Redis原理篇—内存回收 笔记整理自 b站_黑马程序员Redis入门到实战教程 内存过期策略-过期key处理 Redis 之所以性能强&#xff0c;最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大&#xff0c;会影响持久化或主从同步性能。 我们可以通过修改配置文件…