前言
本文主要讲解php filter伪协议,文件包含漏洞
php://filter伪协议是PHP中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理、rot13处理等。php://filter伪协议主要用于一体式(all-in-one)的文件函数,如readfile()、file()、file_get_contents()等,这些函数在数据流内容读取之前没有机会应用其他过滤器,而php://filter伪协议则可以在读取或写入数据时对数据进行过滤处理。
基本语法
php://filter伪协议的基本语法如下:
php://filter/<action>/resource=<待过滤的数据流>
<action>
:表示要对数据执行的过滤操作,如读取(read)、转换编码(convert)或字符串操作(string)等。<待过滤的数据流>
:通常是要读取或写入的文件路径或URL。
过滤器分类
php://filter伪协议支持的过滤器主要分为以下几类:
- 字符串过滤器:以string开头,对数据进行字符串处理,如rot13、toupper、tolower、strip_tags等。
- string.rot13:使用当前字母在字母表后第13个字母替换当前字母。
- string.toupper、string.tolower:将字符串转换为大写或小写。
- string.strip_tags:去除字符串中的HTML、XML和PHP标签。
- 转换过滤器:以convert开头,对数据进行编码转换,如base64编码、解码,quoted-printable编码、解码,iconv字符编码转换等。
- convert.base64-encode/decode:对数据进行Base64编码或解码。
- convert.quoted-printable-encode/decode:对数据进行Quoted-Printable编码或解码。
- convert.iconv.
. :对字符串进行字符编码转换。
- 压缩过滤器:如zlib.deflate(压缩)、zlib.inflate(解压)、bzip2.compress(压缩)、bzip2.decompress(解压)等。
- 加密过滤器:如mcrypt.、mdecrypt.等,用于数据的加密和解密。
使用示例
以下是一些使用php://filter伪协议的例子:
-
读取文件并进行Base64编码:
php复制代码 echo file_get_contents("php://filter/convert.base64-encode/resource=index.php");
这行代码会读取index.php文件的内容,并将其进行Base64编码后输出。
-
写入文件并进行Base64解码:
php复制代码 file_put_contents("php://filter/write=convert.base64-decode/resource=shell.php", base64_encode("<?php phpinfo(); ?>"));
这行代码会将Base64编码的字符串写入shell.php文件,并在写入前进行Base64解码,最终shell.php文件中将包含原始的
<?php phpinfo(); ?>
代码。
注意事项
- 在使用php://filter伪协议时,需要注意过滤器的选择和数据流的指定,以确保数据的正确处理和安全性。
- 在某些环境下,出于安全考虑,可能会对php://filter伪协议的使用进行限制或禁用。
靶场复现
实战之前,请大佬来吃瓜
题1
题目ctfshow这里我们的练习题目是,ctfshow的web87,分析源码,file_put_contents
函数,将$content
的内容(前面附加了一段PHP代码<?php die('大佬别秀了');?>
)写入到URL解码后的$file
指定的文件中。这段附加的PHP代码会在文件被包含或执行时显示"大佬别秀了"
这里,我们可以将我们的payload和这段die代码,对他进行base64编码,发现都是乱码
如果我们在base64编码前面加几个字符呢,我们的php一句话木马就可以直接读出来了
我们将他复制到这里,进行传参
绕过方式参考:全编码工具推荐棱角社区的https://forum.ywhack.com/coding.php
首先将我们的payload进行全编码
然后再使用ur编码
对目标文件进行传参?file=【你的payload】
此时我们去访问我们上传的php代码,
文件列表已经列出来了
找到源码
题2
ctfshow的练习web116提示
只有这一个视频
查看源码也没发现什么东西
那就从文件下手
我们拿010编辑器看文件尾部,发现是一个图片结束的16进制的图片文件
图片进制表
这里我们查找有没有png的内容
找到指定选项
从这里开始一直到最后,把他复制下来
新建一个文本文件
粘贴
保存png图片
发现是源代码,检查过滤协议
发现file和php协议没有过滤,抓包即可,php协议测试
file协议测试
标签:编码,php,包含,协议,filter,文件,file,PHP From: https://www.cnblogs.com/xiaoyus/p/18418566