SSRF漏洞(利用file协议读取本地文件)

news/2024/5/19 20:59:02/文章来源:https://blog.csdn.net/lkbzhj/article/details/133071470

简介

当利用SSRF漏洞时,攻击者可以通过构造恶意请求来读取本地文件。其中一种方法是使用file协议来读取本地文件。例如,file:///etc/passwd是一个常见的示例,它用于读取Linux系统上的passwd文件。

passwd文件是Linux系统中用于存储用户账户信息的文件,其中包含了所有用户的用户名、密码和相关配置信息。攻击者可以利用SSRF漏洞,构造一个恶意的请求,通过服务端向file:///etc/passwd发送请求,从而读取该文件的内容。

攻击者可以利用web应用程序中的SSRF漏洞,构造一个包含file协议的URL,例如:file:///etc/passwd。当应用程序没有对目标地址做过滤和限制时,服务端会向该URL发送请求,读取passwd文件的内容。如果攻击者能够成功读取到该文件的内容,就可以获得系统中的用户账户信息,进而进行更进一步的攻击。

除了passwd文件外,攻击者还可以尝试读取其他敏感文件,例如shadow文件(存储密码哈希值)或配置文件等,以获取更多有用的信息。

例题([NISACTF 2022]easyssrf Leaderchen)

1.打开环境,如下所示,查看源码,没有任何就可以利用

2.在输入框输入1,发现有回显,输入flag测试

3.得到提示文件在/fl4g,构造payload

file:///fl4g

测试结果如下

4.看到ha1x1ux1u.php,直接访问

源码分析

  1. <?php:这是PHP代码的开始标记。
  2. highlight_file(__FILE__):这个函数调用会输出当前文件的源代码。它用于调试或显示当前文件的源代码,但通常不建议在生产环境中使用,因为它可能会泄露敏感信息。
  3. error_reporting(0);:这条语句关闭了所有错误报告。错误报告通常是用来向开发者提供问题反馈的,但在这种情况下,你禁用了所有的错误报告。这可能会导致难以发现和修复问题。
  4. $file = $_GET["file"];:从HTTP GET请求中获取名为"file"的参数并将其值赋给变量$file。这样,用户可以在URL中通过添加?file=somefile.txt来指定要读取的文件。
  5. if (stristr($file, "file")){ die("你败了."); }:这个if语句检查$file是否包含字符串"file"。如果包含,它会终止程序并输出"你败了."。这个逻辑可能意味着你不想让用户能够通过传递参数来读取名为"file"的文件,但这个逻辑是不完整的,因为它仅检查文件名是否包含"file",而不是文件路径。
  6. echo file_get_contents($file);:这个语句会读取$file指定的文件内容并将其输出。但是,由于之前的逻辑只检查文件名,而不检查文件路径,这可能会导致任意文件读取漏洞。例如,如果用户尝试访问/?file=/etc/passwd,它可能会读取到敏感的系统文件。

5.直接构造payload 

?file=../../../../../../flag

得到答案 

 解决方案

为了防范SSRF漏洞的利用,需要对服务端的请求进行严格的过滤和限制,确保只允许访问指定的、安全的URL,而禁止访问本地或内网的URL。同时,对于敏感文件的读取应该进行严格的权限控制和访问授权,避免被恶意攻击者利用。

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

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

相关文章

2.求循环小数

题目 对于任意的真分数 N/M &#xff08; 0 < N < M &#xff09;&#xff0c;均可以求出对应的小数。如果采用链表表示各个小数&#xff0c;对于循环节采用循环链表表示&#xff0c;则所有分数均可以表示为如下链表形式。 输入&#xff1a; N M 输出&#xff1a; 转换…

时序数据库 TimescaleDB 安装与使用

TimescaleDB 是一个时间序列数据库&#xff0c;建立在 PostgreSQL 之上。然而&#xff0c;不仅如此&#xff0c;它还是时间序列的关系数据库。使用 TimescaleDB 的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库 (PostgreSQL)&#xff0c;所有这些都具有完整的…

力扣:103. 二叉树的锯齿形层序遍历(Python3)

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 来源&#xff1a;力扣&#xff08;LeetCode&#…

Android StateFlow初探

Android StateFlow初探 前言&#xff1a; 最近在学习StateFlow&#xff0c;感觉很好用&#xff0c;也很神奇&#xff0c;于是记录了一下. 1.简介&#xff1a; StateFlow 是一个状态容器式可观察数据流&#xff0c;可以向其收集器发出当前状态更新和新状态更新。还可通过其 …

Go语言开发环境搭建指南:快速上手构建高效的Go开发环境

Go 官网&#xff1a;https://go.dev/dl/ Go 语言中文网&#xff1a;https://studygolang.com/dl 下载 Go 的语言包 进入官方网站 Go 官网 或 Go 语言中文网&#xff1a; 选择下载对应操作系统的安装包&#xff1a; 等待下载完成&#xff1a; 安装 Go 的语言包 双击运行上…

Linux 远程登录(Xshell7)

为什么需要远程登录Linux&#xff1f;因为通常在公司做开发的时候&#xff0c;Linux 一般作为服务器使用&#xff0c;而服务器一般放在机房&#xff0c;linux服务器是开发小组共享&#xff0c;且正式上线的项目是运行在公网&#xff0c;因此需要远程登录到Liux进行项日管理或者…

PgSQL-安全加固实践-如何设置非全零监听

PgSQL-安全加固实践-如何设置非全零监听 1、介绍 PgSQL在启动前需要配置listen_addresses配置项&#xff0c;该配置项表示允许PgSQL服务监听程序绑定的IP。我们知道一个host上可以有多个网卡&#xff0c;每个网卡可以绑定多个IP&#xff0c;该参数就是控制PgSQL服务绑定在哪个或…

容器的数据卷

容器的数据卷 操作数据卷 # 基本格式 docker volume [common] # 创建一个volume docker volume create # 显示一个或多个volume docker volume inspect # 列出所以的volume docker volume ls # 删除未使用的volume docker volume prune # 删除一个或多个volume docker volume…

C++笔记之引用折叠规则

C笔记之引用折叠规则 文章目录 C笔记之引用折叠规则1. 当两个左值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。2. 当一个左值引用和一个右值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。3. 当两个右值引用结合在一起时&#xff0c;它们也会折叠成一个右…

typeof的作用

typeof 是 JavaScript 中的一种运算符&#xff0c;用于获取给定值的数据类型。 它的作用是返回一个字符串&#xff0c;表示目标值的数据类型。通过使用 typeof 运算符&#xff0c;我们可以在运行时确定一个值的类型&#xff0c;从而进行相应的处理或逻辑判断。 常见的数据类型…

9月19日上课内容 zabbix监控系统与部署Zabbix5.0监控

本章结构 前言 监控软件的作用 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果和网站的健康状态 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; ●通过一个友好的界面进行浏览整…

Renko图表发展史,一次说清楚

Renko图表的发展史&#xff0c;很多交易者都不清楚&#xff0c;今天FPmarkets澳福一次说清楚。 自从几百年前&#xff0c;大米交易商在记录他们产品每一次价格变动的同时&#xff0c;也可以节省时间、纸张和墨水&#xff0c;也是他们建立了一个系统&#xff0c;也就是Renko图。…

springboot线程池简单用法及配置解析

定义线程池 package com.example.demo.start.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.sche…

【深度学习框架格式转化】【CPU】Pytorch模型转ONNX模型格式流程详解【入门】

【深度学习框架格式转化】【GPU】Pytorch模型转ONNX模型格式流程详解【入门】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习框架格式转化】【GPU】Pytorch模型转ONNX模型格式流程详解【入门】前言PyTorch模型环境搭建(CPU)安装onn…

开源日报 0825 | 简化开发过程,提升Swift应用性能的扩展工具库

OpenZeppelin/openzeppelin-contracts Stars: 22.8k License: MIT OpenZeppelin Contracts 是一个用于安全智能合约开发的库。它建立在社区验证过的代码基础上&#xff0c;具有以下主要功能&#xff1a; 实现了 ERC20 和 ERC721 等标准。灵活的基于角色的权限控制方案。可重…

【Springboot】整合Xxl-job

目录 一&#xff0c;下载1.1 官方文档地址1.2 源码仓库地址 二&#xff0c; 配置部署 "调度中心"2.1 初始化 "调度数据库"2.2 修改配置文件2.3 启动调度中心 三&#xff0c;springboot项目整合3.1 添加依赖3.2 修改配置文件3.3 执行器组件配置4.4 编写测试…

spring的ThreadPoolTaskExecutor装饰器传递调用线程信息给线程池中的线程

概述 需求是想在线程池执行任务的时候&#xff0c;在开始前将调用线程的信息传到子线程中&#xff0c;在子线程完成后&#xff0c;再清除传入的数据。 下面使用了spring的ThreadPoolTaskExecutor来实现这个需求. ThreadPoolTaskExecutor 在jdk中使用的是ThreadPoolExecutor…

LabVIEW开发航天器模拟器的姿态控制和反作用轮动量管理

LabVIEW开发航天器模拟器的姿态控制和反作用轮动量管理 在过去十年中&#xff0c;航天器一直是现代技术进步的先决条件。迄今为止&#xff0c;为了更好地完成各种实际任务&#xff0c;已经在航天器姿态控制领域进行了大量研究。航天器一旦进入太空&#xff0c;就容易出现不确定…

Linux 编译安装中的 configure 命令

用了这么久的 Linux 系统&#xff0c;也许你会发现&#xff0c;在编译安装中&#xff0c;有的服务编译安装需要执行 configure 命令&#xff0c;而有的却不需要&#xff0c;这是为什么呢&#xff1f;也是不是像我一样一头雾水呢&#xff1f;其实这取决于服务的构建系统和配置方…

简单聊聊G1垃圾回收算法整个流程 --- 理论篇 -- 下

简单聊聊G1垃圾回收算法整个流程 --- 理论篇 -- 下 软实时性预测转移时间预测可信度GC 暂停处理的调度并发标记中的暂停处理 分代 G1 GC 模式不同点新生代区域分代对象转移具体转移流程分代选择回收集合设置最大新生代区域数 GC的切换GC执行的时机 总结 上一篇 文章我们简单看了…