写点什么

浅析 PHP 伪协议在 CTF 的应用

作者:喀拉峻
  • 2022 年 2 月 11 日
  • 本文字数:946 字

    阅读完需:约 3 分钟

PHP 支持的伪协议如下:

PHP.ini

在 php.ini 里有两个重要的参数 allow_url_fopen 和 allow_url_include

allow_url_fopen:默认值是 ON,允许 url 里的封装协议访问文件

allow_url_include:默认值是 OFF,不允许包含 url 里的封装协议包含文件

php://filter

经常使用的伪协议,一般用于任意文件读取,有时也可以用于 getshell.在双 OFF 的情况下也可以使用.

php://filter 是一种元封装器,用于数据流打开时筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用。类似 readfile()、file()、file_get_contents(),在数据流读取之前没有机会使用其他过滤器。

php://filter 参数


php://filter/[read/write]=string.[rot13/strip_tags/…..]/resource=xxx
复制代码

filter 和 string 过滤器连用可以对字符串进行过滤。filter 的 read 和 write 参数有不同的应用场景。read 用于 include()和 file_get_contents(),write 用于 file_put_contents()中。

php://filter/convert.base64-[encode/decode]/resource=xxx
复制代码

这是使用的过滤器是 convert.base64-encode.它的作用就是读取 upload.php 的内容进行 base64 编码后输出。可以用于读取程序源代码经过 base64 编码后的数据

php://input

php://input 可以访问请求的原始数据的只读流,将 post 请求的数据当作 php 代码执行。当传入的参数作为文件名打开时,可以将参数设为 php://input,同时 post 想设置的文件内容,php 执行时会将 post 内容当作文件内容。

需要开启 allow_url_include

注:当 enctype=”multipart/form-data”时,php://input 是无效的。

file://

file://伪协议在双 OFF 的时候也可以用,用于本地文件包含

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

phar://

PHP 归档,常常跟文件包含,文件上传结合着考察。说通俗点就是 php 解压缩包的一个函数,解压的压缩包与后缀无关。

phar://test.[zip/jpg/png…]/file.txt
复制代码

其实可以将任意后缀名的文件(必须要有后缀名),只要是 zip 格式压缩的,都可以进行解压,因此上面可以改为 phar://test.test/file.txt 也可以运行。

zip://,bzip2://, zlib://

在双 OFF 的时候也可以用,

zip://test.zip%23file.txt
复制代码

和 phar://一样用于读取压缩文件,不过对于"zip://test.zip#file.txt"中的"#"要编码为"%23".因为 url 的 #后的内容不会被传送

data://text/plain;base64,base 编码字符串

很常用的数据流构造器,将读取后面 base 编码字符串后解码的数据作为数据流的输入

用户头像

喀拉峻

关注

左手Java右手Python,中间纹个C++ 2021.06.26 加入

还未添加个人简介

评论

发布
暂无评论
浅析PHP伪协议在CTF的应用