当前位置: 首页 > news >正文

【Pikachu】SSRF(Server-Side Request Forgery)服务器端请求伪造实战

尽人事以听天命

1.Server-Side Request Forgery服务器端请求伪造学习

SSRF(服务器端请求伪造)攻击的详细解析与防范

SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种安全漏洞,它允许攻击者通过伪造服务器端的请求,从服务器发起对攻击者指定的目标地址的请求。这种攻击通常利用了服务端向外部或内部网络发起请求的功能,但服务器没有对请求目标进行有效的验证与过滤,从而使攻击者能够利用这一漏洞访问内部网络或发起恶意请求。

SSRF的攻击流程

攻击者利用服务器可以发起网络请求的能力,向其传递恶意的目标地址(URL)。服务器处理该请求后,实际上是在未经过适当验证的情况下向外部或内部系统发起了请求,攻击者可能通过此请求获取敏感信息或执行恶意操作。数据流的简化模型如下:

攻击者 -----> 服务器 -----> 目标地址

攻击者通过输入一个恶意 URL 或目标地址,服务器会根据该地址执行请求,结果将返回给攻击者。这种攻击手段不仅限于外部攻击,也可能是针对内部服务和私有网络的攻击。

SSRF攻击的常见场景

  1. 内网穿透:攻击者利用 SSFR 漏洞,向内部网络的地址发起请求,访问服务器不应访问的资源。例如,内部数据库、管理接口、云服务元数据接口等。

  2. 信息泄露:通过 SSFR,攻击者可能会从目标服务获取敏感信息,比如内部文件、服务器状态信息、API 密钥、私有数据等。

  3. 拒绝服务(DoS)攻击:攻击者可以通过伪造大量请求,导致目标服务器的资源消耗殆尽,进而导致服务不可用。

  4. 跨站请求伪造(CSRF):某些情况下,攻击者可以伪造请求来执行某些敏感操作,甚至修改服务端数据库、配置等。

  5. 执行远程代码:通过伪造请求,攻击者可能利用远程文件包含等漏洞执行恶意代码。

PHP中导致 SSRF 漏洞的函数

在 PHP 中,一些常见的函数,如果使用不当,可能会导致 SSRF 漏洞。以下是几种常见的漏洞来源:

  1. file_get_contents():此函数用于从指定的文件或 URL 中读取内容。如果攻击者能够控制传入的 URL,且没有进行足够的过滤与校验,可能会导致服务器向任意外部或内部目标发起请求。

    $data = file_get_contents($url);  // 攻击者可以控制 $url
    

    如果 $url 是攻击者传入的值,攻击者可以通过构造恶意的 URL,迫使服务器向内部敏感资源发起请求,或者访问外部恶意网站。

  2. fsockopen():此函数用于打开一个网络连接(TCP/UDP)。如果攻击者能够控制传入的目标地址,则可以通过该函数向任意地址发起请求。

    $fp = fsockopen($host, $port);  // 攻击者可以控制 $host 和 $port
    

    类似于 file_get_contents(),如果没有严格的目标验证,攻击者可以利用该函数绕过访问控制,从而获取或修改系统资源。

  3. curl_exec()curl_exec() 是 PHP 中用于发起 HTTP 请求的常用函数。攻击者如果能控制请求的 URL,便能够通过该函数对任意服务器发起请求。

    $ch = curl_init($url);  // 攻击者可以控制 $url
    $response = curl_exec($ch);
    

    攻击者可以通过伪造 URL,使得 PHP 服务器访问内部资源,甚至执行跨站请求。

SSRF漏洞的影响

  1. 泄露敏感信息:如果攻击者能够访问到服务器内部的敏感服务,如数据库、私有 API 或元数据接口,那么他们可以获取敏感的凭证信息、配置或用户数据。

  2. 内网攻击:攻击者利用服务器发起请求到内部网络,访问那些直接无法访问的内网资源。比如,通过发起请求到 http://127.0.0.1:8080 或其他本地地址,攻击者可以发现内部未暴露的服务。

  3. 绕过认证与访问控制:有些系统可能会在外部请求和内部请求上进行不同的权限控制。通过伪造请求,攻击者可能能够绕过这些限制,访问本不应访问的资源。

  4. 服务拒绝(DoS):攻击者可以通过不断发起恶意请求,导致目标服务的负载过高,进而导致系统崩溃或拒绝服务。

如何防范SSRF

  1. 严格验证和过滤 URL:最有效的防御措施是对传入的 URL 进行严格的验证,确保只允许特定的、受信任的地址进行请求。可以使用白名单机制,只允许已知的合法地址。

    • 正则过滤:检查目标地址是否为合法的域名格式、是否符合预期的协议(如 HTTP、HTTPS)等。
    • 限制协议:禁止请求本地回环地址(如 127.0.0.1localhost)或保留地址范围(如 169.254.x.x10.x.x.x)。
    • 限制端口范围:禁止访问特定的端口(例如:只允许访问 80 和 443 端口,禁止访问 22 端口等)。
  2. 采用 DNS 解析与 IP 地址校验:在服务器进行外部请求之前,进行 DNS 解析,并确保解析结果符合预期。避免通过 IP 地址直接访问可能绕过 DNS 检查的攻击。

  3. 使用安全的 HTTP 客户端:避免使用 file_get_contents()fsockopen() 等函数发起请求,改用更安全的 HTTP 客户端库,如 GuzzleSymfony HTTP Client,并确保它们内置了安全检查和防护机制。

  4. 访问控制和最小权限原则:对于需要与外部通信的服务,应严格控制访问权限,尽量将与外部通信的服务限制在最小范围内。

  5. 检测与日志监控:通过监控服务器发起的请求,及时发现是否存在异常的请求行为,特别是来自不受信任来源的请求。

  6. 防止内网穿透:如果服务器部署在云环境中,可以限制请求只能访问特定的资源,避免对内部网络的请求。

总结

SSRF 是一种非常危险的攻击方式,攻击者利用服务器的外部请求能力发起恶意请求,可能导致数据泄露、内网穿透、拒绝服务等严重后果。为了防范 SSRF,开发者需要对传入的目标地址进行严格的验证和过滤,避免任意 URL 的请求执行,确保服务器的请求行为符合预期,且不会受到外部或恶意攻击的干扰。

2.Server-Side Request Forgery服务器端请求伪造实战

首先点击页面中的链接,观察url

在这里插入图片描述

直接将url地址修改为百度

/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com

这个页面是由服务器发送curl请求返回的页面

请求网页,成功访问

在这里插入图片描述

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

CSDN: 
https://rdyx0.blog.csdn.net/公众号:儒道易行
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect博客:
https://rdyx0.github.io/先知社区:
https://xz.aliyun.com/u/37846SecIN:
https://www.sec-in.com/author/3097FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85

相关文章:

【Pikachu】SSRF(Server-Side Request Forgery)服务器端请求伪造实战

尽人事以听天命 1.Server-Side Request Forgery服务器端请求伪造学习 SSRF(服务器端请求伪造)攻击的详细解析与防范 SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种安全漏洞,它允许攻击者通…...

IDEA怎么定位java类所用maven依赖版本及引用位置

在实际开发中,我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景,便于排查问题,怎么通过IDEA实现呢? 可以在IDEA中打开项目,右键点击maven的pom.xml文件,或者在maven窗口下选中项目,…...

Discuz论坛网站管理员的默认用户名admin怎么修改啊?

当我们在某个论坛注册账号后,处于某种原因想要修改用户名,该如何修改? Discuz论坛网站管理员处于安全性或某种原因想要修改默认用户名admin该如何修改?驰网飞飞和你分享 其实非常简单,但是普通用户没有修改权限&…...

BIO、NIO、AIO的区别?

文章目录 BIO、NIO、AIO的区别?为什么不使用java 原生nio哪些项目使用了netty BIO阻塞I/O存在问题 NIO(nonblocking IO)Java NIO channel(通道)、buffer、selector(选择器) AIO(Asynchronous I/O) BIO、NIO…...

音视频入门基础:MPEG2-TS专题(7)——FFmpeg源码中,读取出一个transport packet数据的实现

一、引言 从《音视频入门基础:MPEG2-TS专题(3)——TS Header简介》可以知道,TS格式有三种:分别为transport packet长度固定为188、192和204字节。而FFmpeg源码中是通过read_packet函数从一段MPEG2-TS传输流/TS文件中读…...

Flutter中sqflite的使用案例

目录 引言 安装sqflite 创建表 查询数据 添加数据 删除数据 更新数据 完整使用案例 引言 随着移动应用的发展,本地数据存储成为了一个不可或缺的功能。在Flutter中,sqflite 是一个非常流行且强大的SQLite插件,它允许开发者在移动设备…...

【2024 Optimal Control 16-745】【Lecture 2】integrators.ipynb功能分析

代码功能分析 导入库和项目设置 import Pkg; Pkg.activate(__DIR__); Pkg.instantiate()功能:激活当前文件夹为 Julia 项目环境,并安装当前项目中缺失的依赖包。 import Pkg: 导入 Julia 的包管理模块 Pkg,用于管理项目依赖。 …...

【linux】ubuntu下常用快捷键【笔记】

环境 硬件:通用PC 系统:Ubuntu 20.04 软件 : 打开终端窗口:Ctrl Alt T 关闭当前窗口:Alt F4 改变窗口大小:Alt F8 移动窗口: Alt F7 配合 “←”、“→”、“↑”、“↓”来移动窗口 …...

【Linux】常用命令练习

一、常用命令 1、在/hadoop目录下创建src和WebRoot两个文件夹 分别创建:mkdir -p /hadoop/src mkdir -p /hadoop/WebRoot 同时创建:mkdir -p /hadoop/{src,WebRoot}2、进入到/hadoop目录,在该目录下创建.classpath和README文件 分别创建&am…...

力扣-Hot100-数组【算法学习day.37】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...

表格不同类型的数据如何向量化?

在进行机器学习项目时,首先需要获取数据,这些数据可以来自数据库、API、网络抓取,或从CSV、Excel等文件中读取。数据可能包含数值、文本和类别等多种特征,但原始数据通常无法直接用于训练模型。 数据预处理包括清洗、填补缺失值和…...

成都栩熙酷,电商服务新选择

在当今数字经济蓬勃发展的时代,电商平台已成为推动商业创新、促进消费升级的重要力量。抖音小店,作为短视频与电商深度融合的产物,凭借其独特的社交属性和内容营销优势,迅速吸引了大量用户和商家的关注。在这场变革中,…...

【java基础】微服务篇

参考黑马八股视频。 目录 Spring Cloud 5大组件 注册中心 负载均衡 限流 CAP和BASE 分布式事务解决方案 分布式服务的接口幂等性 分布式任务调度 Spring Cloud 5大组件 注册中心 Eureka的作用 健康监控 负载均衡 限流 漏桶固定速率,令牌桶不限速 CAP和BA…...

【LLM训练系列02】如何找到一个大模型Lora的target_modules

方法1:观察attention中的线性层 import numpy as np import pandas as pd from peft import PeftModel import torch import torch.nn.functional as F from torch import Tensor from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig from typ…...

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…...

基于Amazon Bedrock:一站式多模态数据处理新体验

目录 引言 关于Amazon Bedrock 基础模型体验 1、进入环境 2、发现模型及快速体验 3、打开 Amazon Bedrock 控制台 4、通过 Playgrounds 体验模型 &#xff08;1&#xff09;文本生成 &#xff08;2&#xff09;图片生成 关于资源清理 结束语 引言 在云计算和人工智能…...

FAX动作文件优化脚本(MAX清理多余关键帧插件)

大较好,为大家介绍一个节省FBX容量的插件!只保留有用的动画轴向,其他不参与动画运动的清除! 一.插件目的:: 1.我们使用的U3D引擎产生的游戏资源包容量太大,故全方位优化动画资源; 2.在max曲线编辑器内,点取轴向太过麻烦,费事,直观清除帧大大提高效率。 如: 二:…...

Chapter 2 - 16. Understanding Congestion in Fibre Channel Fabrics

Transforming an I/O Operation to FC frames A read or write I/O operation (Figure 2-28) between an initiator and a target undergoes a series of transformations before being transmitted on a Fibre Channel link. 启动程序和目标程序之间的读取或写入 I/O 操作(图…...

mysql数据库(六)pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池

pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池 文章目录 pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池一、pymysql二、视图三、触发器四、存储过程五、函数六、流程控制七、数据库连接池 一、pymysql 可以使用pip install pymysql安装py…...

RFdiffusion EuclideanDiffuser类解读

EuclideanDiffuser 是 RFdiffusion 中的一个关键类,专门设计用于对**三维空间中的点(如蛋白质的原子坐标)**进行扩散处理。它通过逐步向这些点添加噪音来实现扩散过程,从而为扩散模型提供输入数据,并通过逆扩散还原这些数据。 get_beta_schedule函数源代码 def get_beta…...

Flutter实现气泡提示框学习

前置知识点学习 GlobalKey GlobalKey 是 Flutter 中一个非常重要的概念&#xff0c;它用于唯一标识 widget 树中的特定 widget&#xff0c;并提供对该 widget 的访问。这在需要跨越 widget 树边界进行交互或在 widget 树重建时保持状态时尤其有用。 GlobalKey 的作用 唯一标…...

vue3 路由守卫

在Vue 3中&#xff0c;路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理&#xff0c;比如权限验证、数据预取等&#xff0c;从而增强应用的安全性和效率。路由守卫分为几种不同的类型&#xff0c;每种类型的守卫都有其特定的应用场景。 其实路…...

【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.

操作环境&#xff1a; MATLAB 2022a 1、算法描述 北方苍鹰优化算法&#xff08;Northern Goshawk Optimization&#xff0c;简称NGO&#xff09;是一种新兴的智能优化算法&#xff0c;灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽&#xff0c;广泛分布于北…...

如何控制自己玩手机的时间?两台苹果手机帮助自律

对一些人来说&#xff0c;被智能手机“绑架”是一件心甘情愿的事&#xff0c;和它相处的一天中&#xff0c;不必面对现实的压力&#xff0c;它就像个“舒适区”。这是因为在使用手机的过程中&#xff0c;应用程序&#xff08;尤其是游戏和社交媒体应用&#xff09;会不断刺激大…...

【java-Neo4j 5开发入门篇】-最新Java开发Neo4j

系列文章目录 前言 上一篇文章讲解了Neo4j的基本使用&#xff0c;本篇文章对Java操作Neo4j进行入门级别的阐述&#xff0c;方便读者快速上手对Neo4j的开发。 一、开发环境与代码 1.docker 部署Neo4j #这里使用docker部署Neo4j,需要镜像加速的需要自行配置 docker run --name…...

Python的3D可视化库 - vedo (1)简介和模块功能概览

文章目录 1. vedo和它支持的功能简介1.1 安装vedo1.2 命令行接口1.3 导出3D文件1.4 文件格式转换 2. vedo模块功能概览2.1 绘制和渲染visual 管理可视化、对象及其属性的显示的基类plotter 3D渲染colors 定义和显示颜色dolfin FEniCS/Dolfin库的支持 2.2 图形数据管理mesh 多边…...

全面解析:HTML页面的加载全过程(一)--输入URL地址,与服务器建立连接

用户输入URL地址&#xff0c;与服务器建立连接 用户在浏览器地址栏输入一个URL 浏览器开始执行以下三步操作操作&#xff1a;url解析、DNS查询、TCP连接 第一步&#xff1a;URL解析 什么是URL&#xff1f; URL(Uniform Resource Locator&#xff0c;统一资源定位符)是互联网…...

elasticsearch的倒排索引是什么?

大家好&#xff0c;我是锋哥。今天分享关于【elasticsearch的倒排索引是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; elasticsearch的倒排索引是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 倒排索引&#xff08;Inverted Index&a…...

Ubuntu VNC Session启动chromium和firefox报错

问题描述 VNC客户端连接到Ubuntu Server后&#xff0c;启动chromium和firefox时报错&#xff1a; $ chromium [348564:348564:1117/102143.085649:ERROR:ozone_platform_x11.cc(244)] Missing X server or $DISPLAY [348564:348564:1117/102143.085732:ERROR:env.cc(258)] Th…...

【Tealscale + Headscale + 自建服务器】异地组网笔记

文章目录 效果为什么要用 Headscale云服务器安装 Headscale配置 config.yaml创建反向代理搭建管理 UI授权管理 UI添加互联设备参考 效果 首先是连接情况&#xff0c;双端都连接上自建的 Headscale&#xff0c; 手机使用移动流量&#xff0c;测试一下 ping 值 再试试进入游戏 可…...

优秀的个人网页/seo去哪学

杏坛中心小学效果图杏坛中心小学创办于1932年&#xff0c;当时称为马齐小学&#xff0c;1955年定为杏坛中心小学。学校现有教职工57名&#xff0c;高级教师30人&#xff0c;教师学历达标率100%&#xff0c;本科以上学历占66%&#xff0c;学校现有24个教学班&#xff0c;学生140…...

给别人做网站收多少钱/惠州百度seo哪家好

Spring MVC属于SpringFrameWork的后续产品&#xff0c;它提供了构建 Web 应用程序的全功能 MVC 模块&#xff0c;与Struts2一样是一种优秀MVC框架&#xff0c;不同的是自Spring2.5引入了注解式controller及Spring 3以后的不断完善&#xff0c;使得采用Spring MVC框架开发结构清…...

厦门建设局网站城市建设/广告推广精准引流

首先&#xff0c;说明一下为什么要写这么一篇文章。很多朋友电话问&#xff0c;老师我对网络很感冒&#xff0c;但是不知道怎么样去学习&#xff1f;如果你也有这样的疑问&#xff0c;那么就很有必要看看下文了&#xff1a;三国的时候&#xff0c;魏、蜀、吴三家最后都同归于晋…...

建网站空间的详细说明/百度贴吧怎么发广告

概念在Java中&#xff0c;对象的生命周期包括以下几个阶段&#xff1a;创建阶段(Created)应用阶段(In Use)不可见阶段(Invisible)不可达阶段(Unreachable)收集阶段(Collected)终结阶段(Finalized)对象空间重分配阶段(De-allocated)Java对象在JVM中的生命周期当你通过new语句创建…...

超简单做网站软件/搜索引擎优化师工资

前言&#xff1a; uni-app中方法整理之请求后台接口。个人封装版本与官方提供方法。 官方入口&#xff1a; 封装版本&#xff1a;目录见下 1、新建文件夹api&#xff0c;这里主要放接口信息 login.js 放登录页面的接口方法 import axios from ../util/http const Login {/…...

网站建设可用性/站长工具免费

文章预览一、环境准备二、对文档进行操作2.1、添加文档2.2、判断文档是否存在2.3、获取文档信息2.4、 更新文档2.5、删除文档记录2.6、批量插入数据2.7、查询文档一、环境准备 springboot整合ElasticSearch:https://editor.csdn.net/md/?articleId119530392 在此基础上 加上U…...