配合php伪协议利用文件包含漏洞

本文介绍PHP支持的多种封装协议,包括php://、file://、phar://、zip://、data等,探讨它们如何与文件包含漏洞相结合,并展示了如何通过这些协议进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php支持多种封装协议,这些协议常被CTF出题中与文件包含漏洞结合,这里做个小总结。实验用的是DVWA平台,low级别,phpstudy中的设置为5.4.45版本,

设置allow_url_fopen和allow_url_include都为On.

index.php


index.php同级目录下有mytest001.txt ,

mytest002.txt ,


mytest003.zip(其中包含mytest003.txt).


有个小失误,应该写成test003的。

再说明一下,include()函数对文件后缀名无要求,而对其中的语法有要求,即使后缀名为txt,jpg也会被当做php文件解析,只要文件内是<?php  ?>形式就可以执行,但是如果不是php语法的形式,即使后缀为php,也无法执行。

一,php://  访问输入输出流,有两个常用的子协议
1,php://filter  设计用来过滤筛选文件

用法

非php语法文件include失败,直接输出源码内容。


php语法文件include成功,直接运行


如果想要读取运行php文件的源码,可以先base64编码,再传入include函数,这样就不会被认为是php文件,不会执行,会输出文件的base64编码,再解码即可。



若采用rot13编码,对php文件中的<?是无效的,仍会被认为是php文件去执行,但其中的内容是乱码的,是没有输出效果的。




2,php://input

这个协议的利用方法是 将要执行的语法php代码写在post中提交,不用键与值的形式,只写代码即可。

如果可以自己构造代码,就可以看到更重要的信息:

二,file:// 与php:filter类似,访问本地文件,但是只能传入绝对路径


三,phar://  可以查找指定压缩包内的文件
1,传入绝对路径

2,传入相对路径,即同级目录下的文件

四,zip://  用法与phar类似,不过有两点要注意

1,只能传入绝对路径。

2,要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23


五,data  与input 类似,都是用户可以控制传入的php代码
1,直接写入代码

data: text/plain,<?php 执行内容 ?>


2,使用base64编码

data:text/plain;(注意是分号不是逗号,与前面不同)base64,编码后的php代码


有一点要注意的问题,base64编码后的加号和等号要手动的url编码,否则无法识别。

 


同样的,给了自己写代码的权利,就可看到更多东西


六,http协议

include中也可以传入外部链接,采用http://,具体怎么利用以后再来填坑。


 

最后来总结一下,

php://filter  file:// 可以访问本地的文件

zip://  phar://  可以访问本地压缩文件

php://input  data:  可以自己写入php代码

 

关于allow_url_fopen和allow_url_include的设置和用法这里有个总结:


 

参考:http://www.freebuf.com/column/148886.html

转载指明出处

文章同步到我的博客:http://119.23.249.120/archives/206


<think>嗯,用户想了解PHP伪协议读取文件内容。首先,我需要回忆一下PHP支持的伪协议有哪些,比如file://、php://filter、php://input、data://等等。然后,用户可能想知道这些协议的具体用法和常见场景。 用户可能在使用伪协议时遇到问题,或者想了解如何利用它们读取文件内容,特别是在安全方面的考虑。比如,php://filter常被用来读取文件源码,这在CTF题目或者漏洞利用中常见。需要解释不同协议的使用方法,比如如何用php://filter/resource=文件路径,或者配合转换过滤器如convert.base64-encode来绕过某些限制。 还要注意安全风险,比如如果允许用户输入伪协议路径,可能导致文件泄露,所以开发者需要注意过滤。可能需要举几个例子,比如读取配置文件、日志文件等,并说明如何防范。 另外,用户可能对伪协议的具体语法不太熟悉,比如如何构造URL,是否需要编码,不同的封装协议有什么限制。比如php://input需要允许访问输入流,并且POST数据。而data://协议可以用于包含外部数据,但同样有启用条件。 还要考虑不同PHP版本之间的差异,某些协议可能在新版本中被禁用或默认关闭。需要提醒用户检查自己的PHP环境和配置。 最后,要确保回答结构清晰,分点说明各个伪协议的用法,给出示例代码,并强调安全注意事项。这样用户既能了解如何正确使用,也能意识到潜在的风险,避免被恶意利用。</think>PHP伪协议PHP中封装的一系列特殊流协议,常用于文件处理、数据流操作等场景。以下是常用的文件读取协议及示例: 一、常用伪协议 1. php://filter 最常用于读取文件源码 基本语法: ```php $content = file_get_contents('php://filter/read=convert.base64-encode/resource=目标文件'); ``` 示例: ```php // 读取config.php并base64编码 $data = file_get_contents('php://filter/convert.base64-encode/resource=config.php'); echo base64_decode($data); // 解码查看源码 ``` 2. file:// 访问本地文件系统(默认封装协议) 示例: ```php // 绝对路径读取 echo file_get_contents('file:///etc/passwd'); // 相对路径读取 echo file_get_contents('file://./index.php'); ``` 3. data:// 将数据内联为流(需allow_url_include开启) 示例: ```php // 读取文本数据 $data = file_get_contents('data://text/plain,Hello%20World'); // 读取base64数据 $file = file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo='); ``` 二、安全注意事项 1. 文件包含漏洞常见利用方式 ```php // 危险代码示例 include($_GET['file']); // 攻击者可构造: ?file=php://filter/read=convert.base64-encode/resource=config.php ``` 2. 防御措施 - 禁用危险协议:php.ini中设置 ```ini allow_url_fopen = Off allow_url_include = Off ``` - 过滤输入参数 ```php $allowed = ['safe_file1', 'safe_file2']; if(!in_array($_GET['file'], $allowed)) { die('Invalid request'); } ``` 三、典型应用场景 1. 调试场景:快速查看文件内容 2. CTF题目:绕过文件读取限制 3. 日志分析:读取access.log等日志文件 4. 配置文件验证:检查配置文件内容 四、扩展技巧 1. 组合过滤器链 ```php // 使用多个过滤器 $url = 'php://filter/read=string.toupper|string.rot13/resource=file.txt'; ``` 2. ZIP协议读取(需zip扩展) ```php // 读取压缩包内文件 $content = file_get_contents('zip://archive.zip#file.txt'); ``` 重要提示:伪协议使用应严格遵守安全规范,避免在未验证用户输入的情况下直接使用,防止造成文件泄露漏洞
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值