Damn1t
for you I bleed myself dry
FRIENDS
baidu

php伪协议

2018-05-27 CTF

php伪协议

什么是伪协议

也不知道伪协议这个名字是从什么时候开始出现的,但我第一次接触还是在打ctf的时候,与其说伪协议,倒不如直接了解PHP支持的协议和封装的协议
官方文档给出了如下的php所支持的协议:

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

php://

定义:

访问各个输入/输出流(I/O streams)

php://input

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。当enctype=”multipart/form-data” 的时候 php://input 是无效的。

16年华山杯

<?php
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];
if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
echo "hello admin!<br>";
include($file); //class.php
}else{
echo "you are not admin ! ";
}
?>

则可以利用php://input:

除此自外,还可以进行代码执行,但是有一个利用条件:allow_url_include = On,开启之后可以post如:<? phpinfo(); ?>,可以查看网站配置信息

php://filter

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

相关参数

  • resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流。
  • read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
  • write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
  • <;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

iscc2018中有两道题考察了文件包含漏洞的相关知识,其中就涉及到该协议
第一题较为简单,但是考虑到过滤,所以要对php进行处理,在f后写payload:

f=PHP://filter/read=convert.base64-encode/resource=index

就可以解出来
第二题,直接给出解题链接

php://output

php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区。

php://fd

php://fd 允许直接访问指定的文件描述符。 例如 php://fd/3 引用了文件描述符 3。

php://memory 和 php://temp

php://memory 和 php://temp 是一个类似文件 包装器的数据流,允许读写临时数据。 两者的唯一区别是 php://memory 总是把数据储存在内存中, 而 php://temp 会在内存量达到预定义的限制后(默认是 2MB)存入临时文件中。 临时文件位置的决定和 sys_get_temp_dir() 的方式一致。

php://temp 的内存限制可通过添加 /maxmemory:NN 来控制,NN 是以字节为单位、保留在内存的最大数据量,超过则使用临时文件。

参考链接:
https://www.anquanke.com/post/id/146063#h3-16
https://mp.weixin.qq.com/s/RaxfIg9x5Rh1qjDgFBr82Q
https://www.jianshu.com/p/237804b9f19b
http://www.4o4notfound.org/index.php/archives/31/

Author: damn1t

Link: http://microvorld.com/2018/05/27/vulnerable/php伪协议/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
php反序列化漏洞
NextPost >
To2018
CATALOG
  1. 1. php伪协议
    1. 1.0.1. 什么是伪协议
  2. 1.1. php://
    1. 1.1.0.1. php://input
    2. 1.1.0.2. php://filter
    3. 1.1.0.3. 相关参数
    4. 1.1.0.4. php://output
    5. 1.1.0.5. php://fd
    6. 1.1.0.6. php://memory 和 php://temp