【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…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...