【Pikachu】SSRF(Server-Side Request Forgery)服务器端请求伪造实战
尽人事以听天命
1.Server-Side Request Forgery服务器端请求伪造学习
SSRF(服务器端请求伪造)攻击的详细解析与防范
SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种安全漏洞,它允许攻击者通过伪造服务器端的请求,从服务器发起对攻击者指定的目标地址的请求。这种攻击通常利用了服务端向外部或内部网络发起请求的功能,但服务器没有对请求目标进行有效的验证与过滤,从而使攻击者能够利用这一漏洞访问内部网络或发起恶意请求。
SSRF的攻击流程
攻击者利用服务器可以发起网络请求的能力,向其传递恶意的目标地址(URL)。服务器处理该请求后,实际上是在未经过适当验证的情况下向外部或内部系统发起了请求,攻击者可能通过此请求获取敏感信息或执行恶意操作。数据流的简化模型如下:
攻击者 -----> 服务器 -----> 目标地址
攻击者通过输入一个恶意 URL 或目标地址,服务器会根据该地址执行请求,结果将返回给攻击者。这种攻击手段不仅限于外部攻击,也可能是针对内部服务和私有网络的攻击。
SSRF攻击的常见场景
-
内网穿透:攻击者利用 SSFR 漏洞,向内部网络的地址发起请求,访问服务器不应访问的资源。例如,内部数据库、管理接口、云服务元数据接口等。
-
信息泄露:通过 SSFR,攻击者可能会从目标服务获取敏感信息,比如内部文件、服务器状态信息、API 密钥、私有数据等。
-
拒绝服务(DoS)攻击:攻击者可以通过伪造大量请求,导致目标服务器的资源消耗殆尽,进而导致服务不可用。
-
跨站请求伪造(CSRF):某些情况下,攻击者可以伪造请求来执行某些敏感操作,甚至修改服务端数据库、配置等。
-
执行远程代码:通过伪造请求,攻击者可能利用远程文件包含等漏洞执行恶意代码。
PHP中导致 SSRF 漏洞的函数
在 PHP 中,一些常见的函数,如果使用不当,可能会导致 SSRF 漏洞。以下是几种常见的漏洞来源:
-
file_get_contents():此函数用于从指定的文件或 URL 中读取内容。如果攻击者能够控制传入的 URL,且没有进行足够的过滤与校验,可能会导致服务器向任意外部或内部目标发起请求。$data = file_get_contents($url); // 攻击者可以控制 $url如果
$url是攻击者传入的值,攻击者可以通过构造恶意的 URL,迫使服务器向内部敏感资源发起请求,或者访问外部恶意网站。 -
fsockopen():此函数用于打开一个网络连接(TCP/UDP)。如果攻击者能够控制传入的目标地址,则可以通过该函数向任意地址发起请求。$fp = fsockopen($host, $port); // 攻击者可以控制 $host 和 $port类似于
file_get_contents(),如果没有严格的目标验证,攻击者可以利用该函数绕过访问控制,从而获取或修改系统资源。 -
curl_exec():curl_exec()是 PHP 中用于发起 HTTP 请求的常用函数。攻击者如果能控制请求的 URL,便能够通过该函数对任意服务器发起请求。$ch = curl_init($url); // 攻击者可以控制 $url $response = curl_exec($ch);攻击者可以通过伪造 URL,使得 PHP 服务器访问内部资源,甚至执行跨站请求。
SSRF漏洞的影响
-
泄露敏感信息:如果攻击者能够访问到服务器内部的敏感服务,如数据库、私有 API 或元数据接口,那么他们可以获取敏感的凭证信息、配置或用户数据。
-
内网攻击:攻击者利用服务器发起请求到内部网络,访问那些直接无法访问的内网资源。比如,通过发起请求到
http://127.0.0.1:8080或其他本地地址,攻击者可以发现内部未暴露的服务。 -
绕过认证与访问控制:有些系统可能会在外部请求和内部请求上进行不同的权限控制。通过伪造请求,攻击者可能能够绕过这些限制,访问本不应访问的资源。
-
服务拒绝(DoS):攻击者可以通过不断发起恶意请求,导致目标服务的负载过高,进而导致系统崩溃或拒绝服务。
如何防范SSRF
-
严格验证和过滤 URL:最有效的防御措施是对传入的 URL 进行严格的验证,确保只允许特定的、受信任的地址进行请求。可以使用白名单机制,只允许已知的合法地址。
- 正则过滤:检查目标地址是否为合法的域名格式、是否符合预期的协议(如 HTTP、HTTPS)等。
- 限制协议:禁止请求本地回环地址(如
127.0.0.1,localhost)或保留地址范围(如169.254.x.x,10.x.x.x)。 - 限制端口范围:禁止访问特定的端口(例如:只允许访问 80 和 443 端口,禁止访问 22 端口等)。
-
采用 DNS 解析与 IP 地址校验:在服务器进行外部请求之前,进行 DNS 解析,并确保解析结果符合预期。避免通过 IP 地址直接访问可能绕过 DNS 检查的攻击。
-
使用安全的 HTTP 客户端:避免使用
file_get_contents()、fsockopen()等函数发起请求,改用更安全的 HTTP 客户端库,如 Guzzle 或 Symfony HTTP Client,并确保它们内置了安全检查和防护机制。 -
访问控制和最小权限原则:对于需要与外部通信的服务,应严格控制访问权限,尽量将与外部通信的服务限制在最小范围内。
-
检测与日志监控:通过监控服务器发起的请求,及时发现是否存在异常的请求行为,特别是来自不受信任来源的请求。
-
防止内网穿透:如果服务器部署在云环境中,可以限制请求只能访问特定的资源,避免对内部网络的请求。
总结
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提供了一套基础组件,类似HTML里的标签元素,不推荐在uni-app中使用使用div等HTML标签。在uni-app中,对应<div>的标签是view,对应<span>的是text,对应<a>的是navigator,常用uni-app…...
基于Amazon Bedrock:一站式多模态数据处理新体验
目录 引言 关于Amazon Bedrock 基础模型体验 1、进入环境 2、发现模型及快速体验 3、打开 Amazon Bedrock 控制台 4、通过 Playgrounds 体验模型 (1)文本生成 (2)图片生成 关于资源清理 结束语 引言 在云计算和人工智能…...
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…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
