PHP文件包含

文件包含本质

  • 代码复用
  • 并行开发
  • 模块化
  • 增加移植性

就像python中的引入自定义库
例如我建立一个函数库,存放加法,放入common.php

<?php

function add($num1,$num2){
return $num1+$num2;
}

?>

其余的我进行include "common.php",就可以引用函数add
那么evalinclude辨析

  • 两者都不是函数,都是语言结构,无法通过配置文件函数禁用来禁用
  • include后面跟路径,表示要执行的php文件的路径,读取路径中文件内容,然后执行里面的php代码,不能直接跟代码
  • eval后面跟php的代码,表示要执行的php代码

php常见文件包含函数,语言结构

  • include仅仅包含这个文件,如果文件不存在,那么也没啥大不了,继续执行后面代码
  • require必须要包含文件,如果包含不好,就报错
  • include_once包含一次 遇到错误继续执行
  • require_once成功包含一次,遇到错误停止

    include "flag.php";

文件包含漏洞

文件包含漏洞是指通过文件包含时,包含的内容我们用户可控

例题web30

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

上层目录特性

  1. 每个目录都有上层目录
  2. 根目录的上层目录是根目录本身

    /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

本文链接:

https://youngking.xyz/index.php/archives/662/