本文大量转载于:https://blog.csdn.net/qq_41289254/article/details/81388343 (感谢博主)
一,php:// 访问输入输出流,有两个常用的子协议
1,php://filter 设计用来过滤筛选文件
使用方法:非php语法文件include失败,直接输出源码内容。
php://filter/resource=需要包含的文件
还有一种使用方法是:以读的形式,将需要包含的文件名转化为base64编码的方式进行读取,这样传入至include函数的文件名不会被误以为是php执行文件而执行,而是以base64编码方式显示源码
php://filter/read=convert.base64-encode/resouece=需要包含的文件
二、php://input
利用方法:将要执行的语法php代码写在post中提交,不用键与值的形式,只写代码即可
三、file:// 后跟文件目录绝对路径
file:// 与php:filter类似,访问本地文件,但是只能传入绝对路径
四、phar:// 可以查找指定压缩包内的文件
使用绝对路径与相对路径均可
五、zip:// 用法与phar类似,不过有两点要注意
1,只能传入绝对路径。
2,要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23
六、data 与input 类似,都是用户可以控制传入的php代码
1,直接写入代码
data: text/plain,<?php 执行内容 ?>
2、base64编码后写入代码
data:text/plain;(注意是分号不是逗号,与前面不同)base64,编码后的php代码
注:有一点要注意的问题,base64编码后的加号和等号要手动的url编码,否则无法识别。如下图所示:
七、http协议
include中也可以传入外部链接,采用http://
关于allow_url_fopen和allow_url_include的设置和用法总结:
标签:分析,协议,include,编码,url,base64,filter,php
来源: https://www.cnblogs.com/cute-puli/p/14392472.html