当前位置: 首页 > article >正文

文件包含(精讲)

1. 文件包含基础

1.1 简介

在⼀个PHP脚本中,去将另外⼀个⽂件包含进来,去合作完成⼀件事情。

1.2 作用

⽂件包含可以更好的提⾼代码的重⽤性,引⼊⽂件包含函数,可以通过⽂件包含函数将⽂件包含进来,直接使⽤包含⽂件的代码。

1.3 文件包含函数

include:找不到被包含的⽂件时只会产⽣警告,但是不会终⽌程序的运⾏,程序会继续运⾏
include_once:与include函数的作⽤相同,但是⽂件被include_once函数包含过⼀次之后,将不会再被包含
require:找不到被包含的⽂件时会终⽌程序的运⾏,同时也会产⽣告警
require_once:与require函数的作⽤相同,但是⽂件只会被包含⼀次

1.4 案例

Include.php:

<?php
include('1.php');
echo '<br>';
include('1.php');
?>

在这里插入图片描述
Include_once:

<?php
header('Conten-type:text/html;character=utf-8');
include_once('1.php');
echo '<br>';
include_once('1.php');
echo '<br>';
echo "This is second include!!!";
?>

在这里插入图片描述
Require.php:

<?php
require('1.php');
echo '<br>';
echo 'report error';
require('2.php');
?>

在这里插入图片描述
Require_once.php:

<?php
require_once('1.php');
echo '<br>';
echo 'This is second include!!!';
require_once('1.php');
?>

在这里插入图片描述

2. 文件包含漏洞基础

2.1 成因

程序开发⼈员⼀般希望代码更灵活,所以将被包含的⽂件设置为变量,⽤来进⾏动态调⽤,⽂件包含函数加载的参数没有经过过滤或者严格的定义,可以被⽤户控制,包含其他恶意⽂件,导致了执⾏了⾮预期的代码。从⽽导致客户端可以调⽤⼀个恶意⽂件,造成⽂件包含漏洞。

2.2 危害

读取⽂件
远程⽂件读取实现⽹站挂⻢
包含⽇志⽂件getshell
利⽤php://input伪协议可以执⾏任意脚本代码(即时没有⽂件上传也能执⾏脚本代码)
配合⽂件上传漏洞getshell

2.3 利用

2.3.1 本地文件包含

代码:

<?php
include $_GET['a'];
?>

image.png
在这里插入图片描述

2.3.2 远程文件包含

需要将allow_url_include改为On状态
在这里插入图片描述

地址栏输入:http://192.168.187.129/zzyinclude/test1.php/?a=http://192.168.187.129/include.php
在这里插入图片描述

2.4 特点

2.4.1无视文件扩展名

在PHP中当使⽤上⾯的⼀些函数的时候,这个⽂件就会被当作PHP代码进⾏执⾏,PHP内核并不会在意包含的⽂件是什么类型的,也就是说当发过来的是.png的⽂件也会被当作PHP执⾏。

2.4.2 无条件解析php代码

在文件中如果有符合php代码规范时,会无条件执行。

3. 文件包含漏洞综合利用

3.1 伪协议利用

3.1.1 常见伪协议

php://filter 是⼀种元封装器,设计⽤于数据流打开时的筛选过滤应⽤
data:// 同样类似与php://input,可以让⽤户来控制输⼊流
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执⾏
phar://xxx.png/shell.php 解压缩的⼀个函数,不管后缀是什么,都会当作压缩包来解压。
zip://会将所有格式的⽂件按照压缩⽂件的格式进⾏处理

3.1.2 php://filter利用

地址栏输入:
http://192.168.187.129/zzyinclude/test1.php/?a=php://filter/convert.base64-encode/resource=C:/phpstudy_pro/www/include.php
加粗样式

3.1.3 php://input利用

使用lfi靶场,在原先的GET请求体中间加一条php://input,并在请求包的最下方写入<?php phpinfo();?>
在这里插入图片描述

3.1.4 data://

利用:data://text/plain,php代码
地址栏后附上:data://text/plain,<?php phpinfo();?>
在这里插入图片描述

3.1.5 zip://

地址栏输入:zip://C:/phpstudy_pro/www/1.zip%231.txt
在这里插入图片描述

4.绕过

4.1 关于空字符绕过之魔术引号

空字符绕过是存在PHP⼩于5.3.4版本的⼀个漏洞,这个漏洞就是⽤于接收来⾃路径中的空字符,这样在部分需求下攻击者可以利⽤将此字符放置安全⽂件后⾯来绕过访问限制。
前提条件就是需要PHP版本⼩于5.3.4,并且关闭PHP魔术引号 。
在php.ini中将magic_quote_gpc改为off状态
image.png
之后地址栏访问:http://192.168.187.129/include.php?name=C:/phpstudy_pro/www/phpinfo.php%00
在这里插入图片描述

4.2 其他绕过方式

00截断,但是PHP版本必须⼩于5.3
⻓路径:利⽤系统特性绕过waf。windowx系统中,当点号数量⼤于256个字符时,256个字符以后的内容就会被丢弃,
因此可利⽤此特性进⾏绕过;Liunx系统中点号⼤于4096个。
路径双写绕过:…/./…/./
后缀处添加斜杠点号进⾏绕过:info.php/.
?绕过:phpinfo.php?
绕过:直接使⽤并不能绕过,需要输⼊编码%23才能够⽣效。phpinfo.php%23

5. 防御

5.1 过滤

对传⼊的⽂件名进⾏过滤
对敏感路径的关键字进⾏过滤

5.2 php.ini配置文件设置

allow_url_fopen=off #表示本地⽂件包含
allow_url_include=off #表示远程⽂件包含
开启魔术引号magic_quotes_qpc=on

5.3 对包含文件的范围做限制

后台定义被包含⽂件的⽩名单
配置open_basedir=指定⽬录,限制访问区域
修改Apache⽇志⽂件的存放地址


http://www.kler.cn/a/418219.html

相关文章:

  • 认识redis 及 Ubuntu安装redis
  • 202页MES项目需求方案深入解读,学习MES系统设计规划
  • 《Vue零基础入门教程》第十四课:列表渲染
  • pip安装github上的开源软件包
  • 简单的Activiti Modoler 流程在线编辑器
  • 图像显示的是矩阵的行和列,修改为坐标范围。
  • 【论文复现】StreamPETR
  • 数据分析自动化工具对比指南Cursor Composer和Google Data Science Agent
  • 第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解
  • Spring Web MVC(详解上)
  • 【BUUCTF】warmup_csaw_2016
  • [2024年1月28日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(1))
  • 给定一个整数可能为正,0,负数,统计这个数据的位数.
  • K8S网络系列--Flannel网络下UDP、VXLAN模式的通信流程机制分析
  • 【接口封装】——11、Qt 的单例模式
  • Python 元组详解
  • pycharm链接neo4j(导入文件)
  • SpringBoot项目的配置文件
  • 零拷贝相关知识点(二)
  • Paper -- 建筑物高度估计 -- 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算
  • 【赵渝强老师】PostgreSQL的段、区和块
  • 太古可口可乐香港通过SAP S/4HANA推动数字化转型
  • 延时系统建模,整数延时与分数延时,连续传函与离散传函,Pade近似与Thiran近似,Matlab实现
  • 会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场
  • SpringBoot条件装配@Conditional
  • C语言:深入理解指针(1)