一、伪协议
file:// — 访问本地文件系统http:// — 访问 HTTP(s) 网址ftp:// — 访问 FTP(s) URLsphp:// — 访问各个输入/输出流(I/O streams)zlib:// — 压缩流data:// — 数据(RFC 2397)glob:// — 查找匹配的文件路径模式phar:// — PHP 归档ssh2:// — Secure Shell 2rar:// — RARogg:// — 音频流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.
例如:
?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,
?page=data://text/plain,
拿到flag
来源地址:https://blog.csdn.net/m0_51683653/article/details/128907240