PHP文件包含
文件包含本质
- 代码复用
- 并行开发
- 模块化
- 增加移植性
就像python中的引入自定义库
例如我建立一个函数库,存放加法,放入common.php
中
<?php
function add($num1,$num2){
return $num1+$num2;
}
?>
其余的我进行include "common.php"
,就可以引用函数add
那么eval
与include
辨析
- 两者都不是函数,都是语言结构,无法通过配置文件函数禁用来禁用
include
后面跟路径,表示要执行的php文件的路径,读取路径中文件内容,然后执行里面的php代码,不能直接跟代码eval
后面跟php的代码,表示要执行的php代码
php常见文件包含函数,语言结构
include
仅仅包含这个文件,如果文件不存在,那么也没啥大不了,继续执行后面代码require
必须要包含文件,如果包含不好,就报错include_once
包含一次 遇到错误继续执行require_once
成功包含一次,遇到错误停止include "flag.php";
文件包含漏洞
文件包含漏洞是指通过文件包含时,包含的内容我们用户可控
php伪协议
1.何为协议
网络层协议
- IP协议
- ICMP协议
- ARP协议
- IGMP协议
应用层协议
- http协议
- https协议
- ftp协议
- ssh协议
- gopher协议
- qq拉起协议 tencent://qq/go123 交给专门的应用来处理,应用指本地程序
- 百度网盘的拉起协议等
2.协议的格式
协议头://内容
3.php中的协议
- file协议
- http协议
- ftp协议
- php 协议
- data协议
- phar协议
4.file协议
不写协议名称,默认为file协议
file://C:
相对路径&绝对路径
flag.php index.php
上层目录特性
- 每个目录都有上层目录
根目录的上层目录是根目录本身
/var/www/html/../../../ => /目录(只要多就能走到根目录)
php目录整理
/var/www/html/ctfshow/../flag.php
等价于
/var/www/html/flag.php
例题web31
三元表达式
A?B:C
如果A成立,返回B的结果,否则返回C的结果
5.http协议
读取百度的robot.txt协议
<?php
echo file_get_contents("https://www.baidu.com/robots.txt");
?>
配合文件包含,可以读取远程的php代码并在本地执行,实现了最终RCE的效果
6.ftp协议
利用默认21端口,进行文件传输协议
7.php协议
下述两个是经常的协议
php://input
上述例题web32
php://filter
花活比较多例题web33
例题web34
还有data协议
例题web35
php的文件上传机制
$_GET $_POST
$_SERVER $_COOKIE
$_SESSION $_FILES
- /tmp/phpxxxxxx
- . /???/?????????[@-[]
例题web13