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

2023-09-20 11:38:10

简介

当利用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。同时,对于敏感文件的读取应该进行严格的权限控制和访问授权,避免被恶意攻击者利用。

更多推荐

药品咨询报告合集整理平台打包(一共36597份)【专题推荐】

<医药行业从业者必看>笔者今天分享高价值医药行业报告36500余份的获取/下载方法,报告涵盖了医药细分领域研究报告+药品报告(所有上市药品)+医药行业分析报告+医药环境观察报告+药品市场调研报告+药品靶点研究报告+医药白皮书;数据来源于药融云自产报告&药品报告自动生成系统(最新日期)。①报告下载途径药品报告:药融云医药

Linux文件操作基础:快速入门指南和实用技巧

文章目录linux文件操作基础I.查看文件和目录1.`ls`命令用法`ls`命令详细介绍`pwd`命令用法:`pwd`命令详细介绍`cd`命令用法:`cd`命令详细介绍:II.创建文件和目录`touch`命令用法`touch`命令详细介绍III.复制、移动和重命名`cp`命令用法`cp`命令详细介绍IV.删除文件和目录

无人机(UAV)隐蔽通信(covert communication)的联合功率分配和轨迹设计

文章目录摘要Introduction本文是JointPowerAllocationandTrajectoryDesignforUAV-EnabledCovertCommunication一文的阅读笔记摘要在本文中,我们研究了无人机(UAV)网络中的隐蔽通信,其中无人机将信息传输给多个地面用户(GU),而不会被隐藏探测器

计算机竞赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0前言🔥优质竞赛项目系列,今天要分享的是🚩深度学习机器视觉车位识别车道线检测该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🥇学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:3分创新点:4分🧿更多资料,项目分享:https://gitee.com/dancheng-senior/postgr

走进人工智能|自主无人系统 从概念到现实的飞跃

前言:自主无人系统是具备自主感知、决策和执行能力的智能系统,无需人类干预即可完成任务的技术体系。文章目录序言AUS的现有应用从概念到现实的飞跃`技术发展历程`目前形式领跑人困难和挑战总结自主无人系统(AutonomousUnmannedSystems,简称AUS)是当代科技领域的重要发展方向之一。它代表了人工智能、机器

云原生之深入解析Kubernetes Pod的网络状态监控

一、前言在Kubernetes系统里,由kubelet内置的cadvisor组件收集每个容器资源监控信息,但官方基于性能相关的考虑,如果抓取这些每个容器中网络相关的指标,将会耗费大量的CPU内存资源,cadvisor中默认给关掉了网络等相关指标的收集。https://github.com/google/cadvisor

vue中使用vue-property-decorator

一、前言Vue.js是一个非常受欢迎的前端框架,它能够快速构建交互性强的单页面应用。而vue-property-decorator是一个用于Vue.js的装饰器库,可以帮助我们更方便地编写Vue.js组件。下面来详细讲解vue-property-decorator的用法。vue-class-component是vue的

更快更强更稳定:腾讯向量数据库测评

向量数据库:AI时代的新基座人工智能在无处不在影响着我们的生活,而人工智能飞速发展的背后是需要对越来越多的海量数据处理,传统数据库已经难以支撑大规模的复杂数据处理。特别是大模型的出现,向量数据库横空出世。NVIDIACEO黄仁勋在NVIDIAGTCKeynote演讲中首次提到了向量数据库,并强调它在构建专有大型语言模型

【操作系统】进程控制与进程通信

🐌个人主页:🐌叶落闲庭💨我的专栏:💨c语言数据结构javaEE操作系统Redis石可破也,而不可夺坚;丹可磨也,而不可夺赤。操作系统一、进程控制1.1什么是进程控制1.2如何实现进程控制(“原语”实现)1.2.1如何实现原语的“原子性”1.3进程的创建1.4进程的终止1.5进程的阻塞1.6进程的唤醒1.7进程的

阶段性总结:跨时钟域同步处理

对时序图与Verilog语言之间的转化的认识:首先明确工程要实现一个什么功能;用到的硬件实现一个什么功能。要很明确这个硬件的工作时序,即:用什么样的信号,什么变化规则的信号去驱动这个硬件。然后对工程进行模块划分,顶层尽量不要有逻辑设计,尽量只放在子模块里,尽量提升模块复用性。按照模块划分,画出子模块的时序图。重点:再画

全量数据采集:不同网站的方法与挑战

简介在当今数字化时代中,有数据就能方便我们做出很多决策。数据的获取与分析已经成为学术研究、商业分析、战略决策以及个人好奇心的关键驱动力。本文将分享不同网站的全量数据采集方法,以及在这一过程中可能会遇到的挑战。部分全量采集方法1.撞店铺ID(限店铺ID是数字)通过循环店铺ID,我们能够收集店铺内所有在售商品的信息。这一方

热文推荐