伪协议

#PHP伪协议整理
首先归纳下常见的文件包含函数:
include、require、include_once、require_once、highlight_file 、show_source 、readfile 、file_get_contents 、fopen 、file,计划对文件包含漏洞与php封装协议的利用方法进行总结,
##本篇先总结下一些封装协议,涉及的相关协议:file://、
php://filter、php://input、zip://、compress.bzip2://、compress.zlib://、data://,后续再对每个文件包含函数进一步进行探讨。
环境概要: PHP.ini:
allow_url_fopen :on 默认开启 该选项为on便是激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象文件等。
allow_url_include:off 默认关闭,该选项为on便是允许 包含URL 对象文件等。
php伪协议:
File:// 访问本地文件系统
http:// 访问 HTTPs 网址
ftp:// 访问 ftp URL
Php:// 访问输入输出流
Zlib:// 压缩流
Data:// 数据
Ssh2:// security shell2
Expect:// 处理交互式的流
Glob:// 查找匹配的文件路径

php://协议
条件:
不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。
php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。
参考自:http://php.net/manual/zh/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-descriptioq
php://filter
读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。
PHP.ini:
php://filter在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on

伪协议_第1张图片在这里插入图片描述

伪协议_第2张图片
伪协议_第3张图片

Php:// input访问输入输出流
php://input时抓取到的包会是POST.
可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
PHP.ini:
allow_url_fopen :off/on
allow_url_include:on
伪协议_第4张图片伪协议_第5张图片也可以写入shell,这个地方需要对$”进行加\操作,否则会被过滤。

")?>

伪协议_第6张图片

File:// 访问本地文件系统
PHP.ini:
file:// 协议在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on
file:// 用于访问本地文件系统,如c:盘中的东西。在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响。
参考自:http://php.net/manual/zh/wrappers.file.php
伪协议_第7张图片

file:// [文件的绝对路径和文件名]
伪协议_第8张图片

linux 系统环境下:
(1) http://127.0.0.1/FI/LFI.php?file=file:///etc/passwd
winows 系统环境下:
http://127.0.0.1/code/1.php?file=file:///E:\phpStudy\WWW\code\phpinfo.php

伪协议总结
File协议用于读取系统文件,c盘关键内容。Php://filter 用来读取文件内容,但是要base64后出来,否则会造成文件执行从而只看到执行结果。Php://input(代码执行)可将post请求中的数据作为PHP代码执行。可以用于写木马。Zip可以用于躲避白名单,只需要只要物理路径和目录执行权限就可执行。Phar和zip作用相似,但是在使用方式上有差别,zip是使用绝对路径。Data和input相似,可以代码执行,但只有在php<5.3且include=on时可以写木马。

你可能感兴趣的:(伪协议)