php
中的文件包含函数:
incude
:
require
incude_once
require_once
为了减少重复性代码的编写;
任意后缀的文件当中只要存在
php
代码就会被当作
php
执行;
本质:由于包含的文件不可控,导致文件包含漏洞的产生
文件包含漏洞常见于
CTF
分类:
①本地文件包含
LFI
(
local file include
)
包含的代码需要满足
php
的语法规范,无配置文件要求
②远程文件包含
RFI(remote file include)
php
是否开启远程文件包含,受
allow_url_include=off
(默认配置),在
php.ini
文件中
该漏洞的前提条件
allow_url_include=on
windows
中路径位置
linux
中
文件位置
文件内容可通过
vim
配和
/
快速搜索
改完之后需重启
apache
服务
当靶机没有红色证明修改配置成功,既
fi_remote.php
不报红
实验:
在物理机中设置一个
1.txt
文件
文件内容如下:
<?php
phpinfo();
?>
通过虚拟机中的
pikachu
容器去访问该文件
访问成功之后,结果如下,
也可将命令替换为任意文件操作,此时打开虚拟机检测目录是否存在
<?php
system(
'mkdir 666'
);
//phpinfo();
?>
如果本机访问正常,容器无法访问物理机
web
服务可选择关闭防火墙(最方便)
或修改网络状态为专用网络
目录穿越
&
文件包含
由于用户输入可控,且后端代码未限制访问文件的路径,可拼接任意路径访问任意文件
../../../../../../../../../../../../../../../../../../../etc/passwd
伪协议在文件包含中的应用
如果后台代码中存在指定路径的情况,协议的使用会受限
file://
文件路径
php://fliter/
常用
①
convert.base64-encode/resource
(读取
php
代码,
php
文件通过包含会直接加载执行)
②
read=string.rot13/resource
()
等等。。。。。
编码转换较好用,可最大限度规避检测
php://input
接收
post
传参数据
受配置
allow_url_open
allow_url_include
影响
data://text/plain,
数据
data://text/plain;base64,
编码后的数据(
base64
编码后)
注:
get
请求中
+
会变成空格,故需要使用
url
编码处理
+
;