php伪协议

php伪协议整理。

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

PHP的伪协议提供了一种灵活且强大的方式来访问和操作各种类型的资源。通过熟练使用这些伪协议,可以在PHP中实现更多高级和有趣的功能,提升开发效率和应用的功能性。无论是处理网络资源,还是进行高效的数据流操作,了解并掌握PHP的伪协议都将是宝贵的技能之一。

条件:

  • allow_url_fopen:off/on
  • allow_url_include :off
  • php://input
  • php://stdin
  • php://memory
  • php://temp 

需要allow_url_include:on

php://

php://filter(用于读取)

php://filter是一种元封装器,设计用于数据流打开时的筛选过滤使用。

=>是一个中间件,在读入或写入数据的时候对数据进行处理后输出

php:filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。

所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。

协议参数:

名称 描述
resource=<要过滤的数据流> 这个参数是必须的,它指定了要过滤的数据流
1
2
php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php

将index.php通过base64编码后进行输出。这样做的好处就是如果不进行编码,文件包含后就不会有输出结果,而是当做php文件执行了,而通过编码后则可以读取文件源码。

而使用的convert.base64-encode,就是一种过滤器。

php://input(用于执行)

可以访问请求的原始数据的只读流,在POST请求中访问POST的data部分,在enctype="multipart/form-data" 的时候php://input 是无效的。

data://协议

条件:

  • allow_url_fopen:on
  • allow_url_include :on

数据流封装器,以传递相应格式的数据,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。

  • 作用:自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。
data://text/plain,
data://text/plain;base64,

file://协议

file:// 协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

http://&https://协议

条件

  • allow_url_fopen:on
  • allow_url_include :on
  • 作用:常规 URL 形式,允许通过 HTTP 1.0 的 GET方法,以只读访问文件或资源。CTF中通常用于远程包含。

  • 用法

    http://example.com
    http://example.com/file.php?var1=val1&var2=val2
    http://user:password@example.com
    https://example.com
    https://example.com/file.php?var1=val1&var2=val2
    https://user:password@example.com
    

phar://协议

phar://协议类似zip://,同样可以访问zip 格式压缩包内容。

利用 phar 拓展 php 反序列化漏洞攻击面 (seebug.org)

实例:

2024MoeCTF-ImageCloud前置

alt text
看到url?=,这是一个典型的URL重定向(URL Redirection)漏洞,推测出题人在考察伪协议。
结合题目描述,考虑file://,直接读取本地文件,获取flag。

2024BaseCTF-Aura酱的礼物

alt text
第一个判断,需要把一个文件当作字符串读入,读入后的字符串等于”Aura”
想到data://,两种方法:
data://text/plain,Aura
data://text/plain;base64,QXVyYQ==

第二个判断,要求页面开头为http://jasmineaura.github.io
可以利⽤ @ 来进⾏隔断, 将 @ 前⾯的内容当做⽤⼾名,后面变成了需要转到的地址(SSRF漏洞)。

第三个的话是⼀个 include 点,flag在php文件的注释部分,使用data协议或其他会让flag.php被执行,无法查看注释。
这时就需要使用php://filter:
php://filter/convert.base64-encode/resource=flag.php


php伪协议
https://43.242.201.154/2024/09/01/fakeprotocol/
Author
Dong
Posted on
September 1, 2024
Licensed under