文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

[php知识点]PHP伪协议

2023-09-03 07:45

关注

目录

一、前言

1、什么是PHP伪协议

PHP伪协议事实上就是支持的协议与封装协议,主要包括以下当然还有其他。

2、什么时候用PHP伪协议

文件包含!!!

可能遇到的文件包含函数:
1、include 2、require 3、include_once 4、require_once 5、highlight_file 6、show_source 7、flie 8、readfile
9、file_get_contents 10、file_put_contents 11、fopen (比较常见)

include和require函数

通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。

include 和 require 语句是相同的,除了错误处理方面:

语法:

include 'filename';require 'filename';

例如:

由于23333.php不存在
使用include的时候,只会在当前语句报错,然后执行后边的正常语句

但是使用require的时候,就会直接报错然后跳出函数。

include和include_once的区别(require与require_once的区别)

include_once (require_once)语句在脚本执行期间包含并运行指定文件。此行为和 include (require)语句类似,区别是如果该文件中的代码已经被包含了,则不会再次包含,只会包含一次。include_once(require_once)需要查询一遍已加载的文件列表, 确认是否存在, 然后再加载。

这种情况下1.php被包含两次。

这种情况下,第二次包含时,是不会进行包含的。

highlight_file()和show_source()

两个函数的用法相同,因为show_source()是highlight_file()的别名

show_source(filename,return);highlight_file(filename,return);

其中return是可选项

参数描述
filename必需。要进行高亮处理的 PHP 文件的路径。
return可选。如果设置 true,则本函数返回高亮处理的代码,而不是输出它们。

readfile和file_get_contents和file

首先看看三者的区别:

看单个函数的用法

file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

file_get_contents(path,include_path,context,start,max_length)
参数描述
path必需。规定要读取的文件。
include_path可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。
context可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。
start可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。
max_length可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。

readfile() 函数读取一个文件,并写入到输出缓冲。如果成功,该函数返回从文件中读入的字节数。如果失败,该函数返回 FALSE 并附带错误信息。您可以通过在函数名前面添加一个 '@' 来隐藏错误输出。

readfile(filename,include_path,context)
参数描述
filename必需。规定要读取的文件。
include_path可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。
context可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。

与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。

file(path,include_path,context)
参数描述
path必需。规定要读取的文件
include_path可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"
context可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 null,则忽略。

file_put_contents

file_put_contents() 函数把一个字符串写入文件中。

该函数访问文件时,遵循以下规则:

如果成功,该函数将返回写入文件中的字符数。如果失败,则返回 False。

int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
参数功能
filename必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件
data必需。规定要写入文件的数据。可以是字符串、数组或数据流
mode可选。规定如何打开/写入文件。可能的值: * FILE_USE_INCLUDE_PATH * FILE_APPEND * LOCK_EX
context可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。

fopen

fopen(filename,mode,include_path,context)

二、PHP伪协议

参考文档:
https://www.php.cn/manual/view/276.html

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

file://

/path/to/file.extrelative/path/to/file.extfileInCwd.extC:/path/to/winfile.extC:pathtowinfile.extsmbserversharepathtowinfile.extfile:///path/to/file.ext

(这里只能用绝对路径,不知道为什么用相对路径会报错2333,可能是win的原因吧。。。)
原来访问相对路径直接访问就行了

http://

http://example.comhttp://example.com/file.php?var1=val1&var2=val2http://user:password@example.comhttps://example.comhttps://example.com/file.php?var1=val1&var2=val2https://user:password@example.com
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt

利用include函数,报错如下

原因就是,没有打开 allow_url_include
在php.ini默认设置中:
* allow_url_fopen=On
* allow_url_include=Off

修改完成后就可成功执行

php://

摘自:https://www.php.cn/php-weizijiaocheng-481803.html

该协议的参数会在该协议路径上进行传递,多个参数都可以在一个路径上传递。具体参考如下:

php://filter/read=convert.base64-encode/resource=[文件名]读取文件源码(针对php文件需要base64编码)

http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php

php://input + [POST DATA]执行php代码

http://127.0.0.1/include.php?file=php://input[POST DATA部分]

若有写入权限,写入一句话木马

http://127.0.0.1/include.php?file=php://input[POST DATA部分]'); ?>

参考:https://php.net/manual/zh/wrappers.php.php

zip:// & bzip2:// & zlib:// 协议

压缩 phpinfo.txt 为 phpinfo.zip ,压缩包重命名为 phpinfo.jpg ,并上传

http://127.0.0.1/include.php?file=zip://E:phpStudyPHPTutorialWWWphpinfo.jpg#phpinfo.txt

compress.bzip2://file.bz2
压缩 phpinfo.txt 为 phpinfo.bz2 并上传(同样支持任意后缀名)

http://127.0.0.1/include.php?file=compress.bzip2://E:phpStudyPHPTutorialWWWphpinfo.bz2

compress.zlib://file.gz
压缩 phpinfo.txt 为 phpinfo.gz 并上传(同样支持任意后缀名)

http://127.0.0.1/include.php?file=compress.zlib://E:phpStudyPHPTutorialWWWphpinfo.gz

http://php.net/manual/zh/wrappers.compression.php

data://

phar://

phar://协议与zip://类似,同样可以访问zip格式压缩包内容,在这里只给出一个示例

http://127.0.0.1/include.php?file=phar://E:/phpStudy/PHPTutorial/WWW/phpinfo.zip/phpinfo.txt

注意这里与zip://不同的地方是,phar访问压缩包内容是通过/访问,而zip是通过#访问

来源地址:https://blog.csdn.net/Jeff_12138/article/details/124815370

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯