CSRF(跨站请求伪造)和SSRF(服务端请求伪造)漏洞复现:风险与防护方法

这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 

环境准备

一、CSRF(跨站请求伪造)

示例:假设用户在银行网站A上登录并保持会话活动,同时他也在浏览其他网站。攻击者在一个不可信任的网站B上创建了一个恶意链接,当用户点击该链接时,会自动向银行网站A发送一个恶意请求,导致执行未经授权的操作,例如转账或更改密码。

攻击相关介绍:

CSRF漏洞指的是攻击者利用受害者的身份,在其不知情的情况下发送恶意请求给目标网站。由于目标网站无法区分恶意请求和正常请求,因此会执行该请求。这使得攻击者能够以受害者的名义执行一些不被授权的操作,例如更改密码、发表言论、转账等。

原理:

        CSRF漏洞的原理在于浏览器的自动提交机制。当用户在目标网站登录后,并保持了有效的身份认证信息(如Cookie),在不退出登录的情况下访问其他网站时,浏览器会自动发送与目标网站相关的请求,而这些请求是由攻击者精心构造的。由于浏览器会自动携带受害者的身份认证信息,目标网站无法区分请求的真伪。

使用方法:

        攻击者通常通过诱导受害者点击恶意链接、访问恶意网站或打开包含恶意代码的邮件等方式来利用CSRF漏洞。一旦受害者在浏览器中执行了攻击者精心构造的请求,攻击就会生效。

使用前提:

  • 受害者必须已经登录并且在目标网站上保持有效的身份认证。
  • 目标网站的请求没有采取预防CSRF攻击的措施。

防御方法:

  • 使用CSRF Token:为每个用户生成一个唯一的令牌,并将其嵌入到表单中,请求验证时校验该令牌。
  • 检查Referer头:服务器端检查请求头中的Referer字段,确保请求来源于合法的网站。
  • 使用验证码:在进行敏感操作之前,要求用户进行验证码验证。
  • 添加随机请求参数:向请求中添加随机生成的参数,使攻击者无法预测和构造合法的请求。
  • 限制用户权限:根据用户的权限级别限制其操作范围,减少潜在危害。

攻击复现

1、打开DVWA的相关靶场

2、查看Burp Suite抓包情况

截取更改密码的请求

3、生成CSRF的PoC

然后更改请求参数

例如:

<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->

<body>
  <script>history.pushState('', '', '/')</script>
  <form action="http://192.168.1.91/dvwa/vulnerabilities/csrf/">
    <input type="hidden" name="password&#95;new" value="aaaa" />
    <input type="hidden" name="password&#95;conf" value="aaaa" />
    <input type="hidden" name="Change" value="æ&#148;&#185;å&#143;&#152;" />
    <input type="submit" value="Submit request" />
  </form>
</body>

</html>

4、最后就是诱导受害者点击打开我们的攻击脚本的链接

不过我这里是测试就直接在浏览器打开脚本

复现成功,其他类型的攻击方式操作也是这样。 

二、SSRF(服务端请求伪造)

示例:攻击者通过在受害服务器上构造恶意请求,使其尝试访问内部资源或第三方服务。例如,攻击者可以构造一个请求,要求目标服务器读取敏感文件并将其内容返回给攻击者,从而获取敏感信息。

攻击相关介绍

介绍:

        SSRF漏洞指的是攻击者通过操纵目标Web应用程序中的请求来发起伪造请求。攻击者利用这种漏洞可以访问应用程序所在服务器上的本地资源,或者攻击内部网络中的其他系统,并执行恶意操作。

原理:

        SSRF漏洞的原理在于目标Web应用程序对外部资源的访问没有进行充分的过滤和验证。攻击者通过构造特定的请求,可以控制目标服务器向任意的内部或外部资源发起请求。这使得攻击者能够访问未授权的资源、窃取数据或发起其他恶意操作。

使用方法:

        攻击者通常通过向目标Web应用程序提交包含特殊URL的请求来利用SSRF漏洞。这些URL可能指向内部系统的地址、本地文件、外部服务器等。一旦目标应用程序未能正确过滤或验证这些URL,并将其用于发送请求,攻击就会生效。

使用前提:

  • 目标Web应用程序存在SSRF漏洞,未对外部资源的访问进行充分的验证和过滤。
  • 攻击者能够向目标应用程序提交恶意请求,并控制或影响请求中的参数。

防御方法:

  • 输入验证和过滤:对用户输入的URL进行严格的验证和过滤,确保请求的目标是合法的。
  • 白名单限制:限制目标URL只能访问特定的合法域名或IP地址,避免访问不受信任的资源。
  • 特权分离:降低应用程序对内部资源的访问权限,仅允许访问必要的资源。
  • 使用代理服务:通过使用代理服务器来隔离应用程序与外部资源之间的联系,限制请求的范围。
  • 加强访问控制:对敏感资源进行严格的访问控制,确保只有授权用户才能访问。

造成SSRF漏洞的常见函数

fsockopen():

  • fsockopen()函数用于打开一个网络连接,并返回一个文件指针。它可以用于与远程服务器进行通信,包括发起请求和获取响应。 

file_get_contents()

  • file_get_contents()函数用于读取文件的内容,并将其作为字符串返回。它可以用于获取远程文件的内容,包括通过URL获取内容。

curl_exec():

  • curl_exec()函数用于执行一个CURL会话,并返回执行结果。它可以用于发送HTTP请求,并获取响应。

在SSRF漏洞中,以下协议有不同的作用: 

dict://协议:

  • dict://协议用于访问字典服务(DICT)。
  • 攻击者可以使用dict://协议来查询字典服务上的单词定义或其他信息。

示例:

  • attacker.com/ssrf.php?url=dict://dict.org:2628/define:test
  • 上述请求将在dict.org字典服务上查询单词"test"的定义。
  • 如果没有对URL参数进行适当的验证和过滤,攻击者可以构造恶意请求并通过应用程序执行不受信任的操作。

file://协议:

  • file://协议用于访问本地文件系统。
  • 攻击者可以使用file://协议来读取服务器上的文件,包括敏感文件或配置文件。

示例:

  • attacker.com/ssrf.php?url=file:///etc/passwd
  • 上述请求将尝试读取位于目标服务器上的/etc/passwd文件。
  • 如果应用程序没有正确限制文件协议的使用,攻击者可以访问和下载任意文件,导致信息泄露或系统安全受到威胁。

gopher://协议:

  • gopher://协议是一个早期的互联网协议,用于在客户端和服务器之间传输文本数据。
  • 攻击者可以使用gopher://协议来执行各种操作,如查询目录、读取文件等。

示例:

  • attacker.com/ssrf.php?url=gopher://example.com:70/_
  • 上述请求将尝试使用gopher协议连接到example.com的70端口。
  • 如果应用程序不对协议进行正确过滤和验证,攻击者可以利用gopher协议在目标服务器上执行未经授权的操作。

攻击复现

存在SSRF的脚本

将脚本存放在本地的phpStudy下的WWW目录下

<?php
$url = $_GET['url'];
$response = file_get_contents($url);
echo $response;
?>

解释:

这个脚本存在SSRF漏洞。原因在于它没有充分验证和过滤用户输入的URL参数$_GET['url'],攻击者可以通过构造恶意的URL参数,将请求发送到应用程序不受信任的目标地址上。

具体来说,攻击者可以通过向URL参数中添加如下payload,来进行SSRF攻击:

  • 添加错误的IP地址,以绕过IP地址验证
  • 添加危险的协议,如file://,以访问本地文件系统
  • 添加内网主机的IP地址或域名,以访问内部的敏感资源
  • 指定重定向URL,以执行钓鱼等攻击

举例来说,如果攻击者向URL参数中注入如下payload,就可以将请求发送到不受信任的目标地址上,进而发起一次SSRF攻击: Example Domain

为了防止这种攻击,开发人员必须对用户输入的URL参数进行严格的验证和过滤,确保只允许访问合法、安全可信任的URL。例如,可以使用白名单限制目标URL只能指向安全可信任的域名或IP地址,规避潜在的恶意资源。

file:// 协议
http://127.0.0.1/SSRF.php?url=file:///F:1.txt

复现成功

三、CSRF(跨站请求伪造)与SSRF(服务端请求伪造)漏洞主要区别

攻击对象:

  • CSRF攻击针对的是用户,利用用户已经身份验证的会话来执行未经授权的操作。
  • SSRF攻击针对的是服务器,通过欺骗服务器发起请求来访问内部资源或第三方服务。

目标:

  • CSRF攻击的目标是利用用户的身份和权限执行未经授权的操作,可能导致数据泄露、账户劫持、信息篡改等后果。
  • SSRF攻击的目标是访问服务器受限制的资源,可能导致内部系统暴露、敏感信息泄露、甚至远程命令执行等后果。

攻击方式:

  • CSRF攻击利用受信任用户的会话信息,诱使用户在已验证的网站上执行恶意请求,通过构造特殊的请求来执行攻击
  • SSRF攻击通过构造恶意请求,欺骗服务器发起请求到攻击者指定的目标,利用服务器信任的能力来获取敏感数据或执行其他操作

防御机制:

  • 针对CSRF攻击,常用的防御机制包括使用CSRF令牌验证、验证请求来源(Referer、Origin等)以及双重确认等措施。
  • 针对SSRF攻击,常用的防御机制包括使用白名单验证输入URL、限制访问服务器的网络连接和端口等。

总结:

  • CSRF攻击利用用户身份和会话执行未经授权的操作,而SSRF攻击利用服务器发起请求访问内部资源或第三方服务。
  • CSRF攻击的目标是利用用户权限,可能导致用户账户问题,而SSRF攻击的目标是访问服务器受限制的资源,可能导致服务器安全问题。
  • 针对这两种漏洞,有不同的防御机制可供开发人员采取,以保护应用程序和服务器的安全性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AMBA_AXI Protocol_基本读写事务

基本读写事务 1. 握手的过程 2. 信道信令要求 3. 通道之间的关系1. 握手的过程 当地址、数据或控制信息可用时&#xff0c;源端&#xff08;source&#xff09;产生VALID信号。终端&#xff08;destination&#xff09;生成READY信号&#xff0c;表示它可以接受该信息。传输只…

微前端:重塑大型项目的前沿技术

引言 随着互联网技术的飞速发展&#xff0c;前端开发已经从简单的页面制作逐渐转变为复杂的应用开发。在这个过程中&#xff0c;传统的前端开发模式已经难以满足大型项目的需求。微前端作为一种新的前端架构模式&#xff0c;应运而生&#xff0c;它旨在解决大型项目中的前端开…

Docker从认识到实践再到底层原理(一)|技术架构

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

适应高速率网络设备的-2.5G/5G/10G网络变压器/网络滤波器介绍

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;在高速发展的互联网/物联网时代&#xff0c;为满足高网速的网络数据传输需求&#xff0c;网络设备在制造中也要选用合适的网络变压器/滤波器产品&#xff0c;有哪些可供选择的高速率网络变压器产品也是广大采购人员…

javaee spring 自动注入,如果满足条件的类有多个如何区别

如图IDrinkDao有两个实现类 方法一 方法二 Resource(name“对象名”) Resource(name"oracleDrinkDao") private IDrinkDao drinkDao;

异步迭代器

一、什么是异步迭代器&#xff1f; 实现了 __aiter__() 和 __anext__() 方法的对象。__anext__ 必须返回一个 awaitable对象。async for 会处理异步迭代器的 __anext__() 方法所返回的可等待对象&#xff0c;直到其引发一个 StopAsyncIteration 异常。 二、实例 class Async…

LeetCode239.滑动窗口最大值

看到这道题我就有印象&#xff0c; 我在剑指offer里面做过这道题&#xff0c;我记得当时用的是优先队列&#xff0c;然后我脑子里一下子就有了想法&#xff0c;拿优先队列作为窗口&#xff0c;每往右移动一步&#xff0c;把左边的数remove掉&#xff0c;把右边的数add进来&…

SpringAOP详解(下)

proxyFactory代理对象创建方式和代理对象调用方法过程&#xff1a; springaop创建动态代理对象和代理对象调用方法过程&#xff1a; 一、TargetSource的使用 Lazy注解&#xff0c;当加在属性上时&#xff0c;会产生一个代理对象赋值给这个属性&#xff0c;产生代理对象的代码为…

Linux系统下vim常用命令

一、基础命令&#xff1a; v:可视模式 i:插入模式 esc:命令模式下 :q &#xff1a;退出 :wq &#xff1a;保存并退出 ZZ&#xff1a;保存并退出 :q! &#xff1a;不保存并强制退出二、在Esc下&#xff1a; dd : 删除当前行 yy:复制当前行 p:复制已粘贴的文本 u:撤销上一步 U:…

IC芯片 trustzone学习

搭建Airplay TA环境需要在IC的TrustZone中进行。TrustZone是一种安全技术&#xff0c;用于隔离安全和非安全环境&#xff0c;并保护敏感文件。在TrustZone中&#xff0c;我们需要编写一个叫做TA&#xff08;Trusted Application&#xff09;的应用程序来控制这些私密文档。 &am…

重磅!TikTok将于8月底关闭半闭环 切断外链意在电商业务发展?

自2019年开始&#xff0c;TikTok电商业务逐渐走进人们的视线&#xff0c;并引起了市场的广泛关注。作为一家短视频平台&#xff0c;TikTok能够依靠其强大的用户基数与精准的推广策略&#xff0c;将流量成功转化为商业价值。截至目前&#xff0c;TikTok电商业务已经初步形成完整…

Nacos安装

一、下载Nacos1.4.1二、单机版本安装 2.1 将下载的nacos安装包传输到服务器2.2 解压文件2.3 进入bin目录下 单机版本启动2.4 关闭nacos2.5 访问Nacos地址 IP&#xff1a;8848/nacos三、集群版本的安装 3.1 复制nacos安装包&#xff0c;修改为nacos8849&#xff0c;nacos8850&am…

案例实操-获取员工数据

案例&#xff1a;获取员工数据&#xff0c;返回统一响应结果&#xff0c;在页面渲染展示 package com.bignyi.controller;import com.bignyi.pojo.Emp; import com.bignyi.pojo.Result; import com.bignyi.utils.XmlParserUtils; import org.springframework.web.bind.annotat…

-bash: tree: command not found 的解决方法

在学习git操作时发现使用命令tree .git时显示错误 在网上查阅资料后&#xff0c;发现可能是没有安装生成tree的应用&#xff0c;所以我们使用命令安装应用即可 sudo yum install -y tree像这样就是安装成功了 我们再来试试 问题解决了&#xff0c;成功显示出树形结构

CATIA Composer R2023安装教程

软件下载 软件&#xff1a;CATIA Composer版本&#xff1a;2023语言&#xff1a;简体中文大小&#xff1a;1.82G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.60GHz 内存8G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pa…

简单的springboot应用部署后内存占用量过大问题排查

1.问题背景 需要部署一个演示环境。所有组件都要部署到一台服务器&#xff0c;采用Docker容器部署&#xff0c;发现多个简单的springboot应用占用内存高达2G&#xff0c;后续的应用因为内存不足就部署不了了。排查下内存占用大的原因&#xff1a; docker stats命令&#xff1a…

软件工程(十五) 行为型设计模式(一)

1、责任链模式 简要说明 通过多个对象处理的请求,减少请求的发送者与接收者之间的耦合。将接受对象链接起来,在链中传递请求,直到有一个对象处理这个请求。 速记关键字 传递职责 类图如下 由类图可以比较容易的看出来,其实就是自己关联自己,形成了一个链,并且自己有…

Failed to start bean ‘documentationPluginsBootstrapper‘

问题描述 在集成redisson-spring-boot-starter时&#xff0c;项目启动时报如下错误 之前在集成swagger3.0的时候&#xff0c;遇到过同样的问题&#xff0c;原因是Springfox使用的路径匹配是基于AntPathMatcher的&#xff0c;而Spring Boot 2.7.X使用的是PathPatternMat…

为什么JVM调优一般都是针对堆内存的,以及堆内存的设置对GC的影响

1、为什么JVM调优一般都是针对堆内存的&#xff1f; 首先JVM的四部分组成&#xff1a;ClassLoader&#xff08;类装载器&#xff09;、Runtime data area 运行数据区、Execution Engine 执行引擎、Native Interface 本地接口。 其中运行数据区&#xff08;Runtime Data Area&am…

性能优化维度

CPU 首先检查 cpu&#xff0c;cpu 使用率要提升而不是降低。其次CPU 空闲并不一定是没事做&#xff0c;也有可能是锁或者外部资源瓶颈。常用top、vmstat命令查看信息。 vmstat 命令: top: 命令 IO iostat 命令&#xff1a; Memory free 命令&#xff1a; 温馨提示&#xff1a…