初识文件包含漏洞

目录

什么是文件包含漏洞?

文件包含的环境要求

常见的文件包含函数

PHP伪协议

file://协议

php://协议

php://filter

php://input

zip://、bzip2://、zlib://协议

zip://

bzip2://

zlib://

data://协议

文件包含漏洞演示

案例1:php://input

案例2:php://input

案例3:php://filter

案例4:zip://


什么是文件包含漏洞?

文件包含(File  Include)漏洞也是web安全中很重要的一个漏洞,它主要会出现在PHP与JSP应用中,如果应用在运行过程中会动态加载其他脚本文件,并且加载的文件的文件路径由外部输入变量控制,就有可能产生文件包含漏洞

文件包含漏洞又可以被细分为两类:

  • 本地文件包含(Local File Include)
  • 远程文件包含(Remote File Include)

本地文件包含漏洞很多时候也是路径穿越漏洞,include()函数,其加载的文件如果是外部输入变量控制的,但是文件包含漏洞特指文件被Web应用载入并执行,比如在PHP中用include()或者require()函数载入文件并执行。在允许上传文件的场景中,攻击者可以上传恶意代码,再通过本地文件包含漏洞来执行该代码

远程文件包含是指应用可以通过一个URL加载并执行远程代码,比如PHP中的include(),就支持指定一个URL作为参数,利用远程文件包含漏洞,攻击者无须上传恶意文件到目标服务器,只需要将其放在远程服务器上即可

文件包含的环境要求

  • allow_url_fopen=On 规定是否允许从远程服务器或者网站检索数据

  • allow_url_include=On 规定是否允许include/require远程文件

常见的文件包含函数

  • include()

  • require()

  • include_once()

  • require()_once()

include与require的区别在错误处理方面:

  • include(),只生成警告(E_WARNING),并且脚本会继续

  • require(),会生成致命错误(E_COMPILE_ERROR)并停止脚本

  • include_once()与require()_once(),表示如果文件已包含,则不会包含

PHP伪协议

有的小伙伴就会好奇了,上面还是文件包含漏洞,怎么突然就到PHP伪协议,那当然是可以用得到了,那么下面就先介绍一下常见的php伪协议

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

file://协议

file:// 协议在下面两个配置均是on/off的情况下均可以正常使用:

allow_url_fopen :off/on

allow_url_include:off/on

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的因为它的使用不受allow_url_fopen与allow_url_include的影响

使用格式:file:// [文件的绝对路径和文件名]

可以可以测试一下,在已经本地物理路径的前提下,可以尝试读取一下文件,比如说现在index.html文件目录中有一个web.txt文件,我们尝试使用file://伪协议来进行包含 :

web.txt:

<?php phpinfo();?>

然后尝试使用file://伪协议包含一下该文件:

 可以看到,这里我们的txt文件使用了file://伪协议包含后,成功的将php文件解析了。这就说明使用file://伪协议包含的文件会被视为php文件来解析

注:在Linux中也可以使用file://伪协议来读取文件

php://协议

php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,

php://filter用于读取源码php://input用于执行php代码。

条件:

allow_url_fopen:off/on

allow_url_include :  仅php://input php://stdin php://memory php://temp 需要on

php://filter

php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

php://filter在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

常见的过滤器:

字符串过滤器作用
string.rot13等同于str_rot13(),rot13变换
string.toupper等同于strtoupper(),转大写字母
string.tolower等同于strtolower(),转小写字母
string.strip_tags等同于strip_tags(),去除html、PHP语言标签
转换过滤器作用
convert.base64-encode & convert.base64-decode等同于base64_encode()base64_decode(),base64编码解码
convert.quoted-printable-encode & convert.quoted-printable-decodequoted-printable 字符串与 8-bit 字符串编码解码
压缩过滤器作用
zlib.deflate & zlib.inflate在本地文件系统中创建 gzip 兼容文件的方法,但不产生命令行工具如 gzip的头和尾信息。只是压缩和解压数据流中的有效载荷部分。
bzip2.compress & bzip2.decompress同上,在本地文件系统中创建 bz2 兼容文件的方法。

下面就可以尝试使用php://filter伪协议的过滤器来包含一下文件看看有什么效果:

比如使用转换过滤器读取上面的web.txt文件:

可以看到是一串字符,将其进行base64解码就会发现是文件的内容:

但是并没有对该文件进行解析,说明它是无法解析php的

php://input

php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。

当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容,然后导致任意代码执行。

条件:

allow_url_fopen :off/on

allow_url_include:on

还是使用上面的web.txt文件,然后换成php://input伪协议包含一下看看

因为这里需要畸形POST提交,因此我使用Burpsuite抓下面的数据包,然后添加phpinfo();来测试,再进行发送,看看是否会解析:

http://127.0.0.1/include/include.php?file=php://input

可以看到,成功的解析了php文件

zip://、bzip2://、zlib://协议

条件

allow_url_fopen:off/on

allow_url_include :off/on

作用zip:// & bzip2:// & zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx 等等。

zip://

格式:zip://[压缩文件绝对路径]%23[压缩文件内的子文件名](#编码为%23)

这里还是使用上面的web.txt文件然后将web.txt进行zip压缩,压缩文件名为web.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。

bzip2://

这里没有解析成功,不知道是什么原因,按道理是可以解析成功的(╥﹏╥) 

zlib://

data://协议

data:// 协议是是受限于allow_url_fopen的,官方文档上给出的是NO,所以要使用data://协议需要满足双on条件

即:

allow_url_fopen :on

allow_url_include:on

然后可以使用data://伪协议来包含一个txt文件:

格式1:data://text/plain,

格式2:data://text/plain;base64,

文件包含漏洞演示

案例1:php://input

代码:

<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://filter") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){exit('hacker!');
}
if($file){if ($file!="http://www.baidu.com") echo "tips:flag在当前目录的某个文件中";include($file); //用户传递过来的
}else{echo '<a href="?file=http://www.baidu.com">click go baidu</a>';
}
?>

访问发现是一个链接,点击会跳转到百度页面:

在百度页面可以看到是给file传入了一个www.baidu.com网址,因此跳转到了百度页面,

尝试更换file的网址发现网页提示我们flag在某一个文件中:

那么现在就可以使用上面的PHP伪协议来尝试获取一个页面中的文件,可以使用php://input来进行获取,因为php://input需要使用POST传参,因此我们首先抓一个数据包,然后尝试在后面加上执行的命令,例如执行一个phpinfo()文件:

为了找到flag,可以使用下面的命令查看当前目录,然后发现另一个flag.txt文件:

使用下面的命令打开该文件,就可以拿到flag了:

案例2:php://input

代码:

<?php
show_source(__FILE__);
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){echo "success\n";echo $flag;
}

 flag:

//flag.php
<?php
$flag = ‘flag{flag_is_here}’;
?>

访问页面发现这里说flag就在这样,有本事就来拿吧:

查看了代码后,发现当参数$a不为空,且读取的文件中包含’I want flag’时,即可显示$flag。

所以可以使用php://input得到原始的post数据,访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行来进行绕过。

注:遇到file_get_contents()要想到用php://input绕过。

案例3:php://filter

代码:

<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){exit('hacker!');
}
if($file){include($file);
}else{echo '<a href="?file=flag.php">tips</a>';
}
?>

可以看到种类将php://input、zip://、phar://、data://伪协议都限制了,但是却并没有限制php:filter伪协议,可以使用它可以进行读取文件:

可以看到得到了一串base64的编码,解码后:

案例4:zip://

代码:

//index.php
<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if (!$file) echo '<a href="?file=upload">upload?</a>';
if(stristr($file,"input")||stristr($file, "filter")||stristr($file,"data")/*||stristr($file,"phar")*/){echo "hick?";exit();
}else{include($file.".php");
}
?>
<!-- flag在当前目录的某个文件中 -->
//upload.php
<meta charset="utf-8">
<form action="upload.php" method="post" enctype="multipart/form-data" ><input type="file" name="fupload" /><input type="submit" value="upload!" />
</form>
you can upload jpg,png,zip....<br />
<?php
if( isset( $_FILES['fupload'] ) ) {$uploaded_name = $_FILES[ 'fupload' ][ 'name' ];         //文件名$uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);   //文件后缀$uploaded_size = $_FILES[ 'fupload' ][ 'size' ];         //文件大小$uploaded_tmp  = $_FILES[ 'fupload' ][ 'tmp_name' ];     // 存储在服务器的文件的临时副本的名称$target_path = "uploads\\".md5(uniqid(rand())).".".$uploaded_ext;if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" || strtolower( $uploaded_ext ) == "zip" ) &&( $uploaded_size < 100000 ) ) {if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {// Noecho '<pre>upload error</pre>';}else {// Yes!echo "<pre>".dirname(__FILE__)."\\{$target_path} succesfully uploaded!</pre>";}}else {echo '<pre>you can upload jpg,png,zip....</pre>';}
}?>

访问index.php文件看到有一个upload?点击后就来到了upload.php页面:

可以看到这里我们可以传入jpg,png,zip文件,这里就可以使用我们上面的zip://伪协议了:

先上传一个zip文件:

然后使用zip://伪协议包含:

可以看到也是成功的包含并且解析了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker-现代化应用部署的利器

一、容器部署的发展 今天我们来说说容器部署。我们知道容器部署的发展大致分三个阶段&#xff0c;下面来介绍一下不同阶段的部署方式的优缺点 物理机部署 优点是可以提供更高的性能、资源控制&#xff0c;也可以提供更好的数据隔离和安全性&#xff0c;因为不同的应用程序运行在…

从0开始图形学(光栅化)

前言 说起图形学&#xff0c;很多人就会提到OpenGL&#xff0c;但其实两者并不是同一个东西。引入了OpenGL加重了学习的难度和成本&#xff0c;使得一些原理并不直观。可能你知道向量&#xff0c;矩阵&#xff0c;纹理&#xff0c;重心坐标等概念&#xff0c;但就是不知道这些概…

移动端设置position: fixed;固定定位,底部出现一条缝隙,不知原因,欢迎探讨!!!

1、问题 在父盒子中有一个子盒子&#xff0c;父盒子加了固定定位&#xff0c;需要子盒子上下都有要边距&#xff0c;用margin或者padding挤开时&#xff0c;会出现缝隙是子盒子背景颜色的。 测试过了&#xff0c;有些手机型号有&#xff0c;有些没有&#xff0c;微信小程序同移…

vscode +git +gitee 文件管理

文章目录 前言一、gitee是什么&#xff1f;2. Gitee与VScode连接大概步骤 二、在vscode中安装git1.安装git2.安装过程3.安装完后记得重启 三、使用1.新建文件夹first2.vscode 使用 四、连接git1.初始化仓库2.设置git 提交用户和邮箱3.登陆gitee账号新建仓库没有的自己注册一个4…

绕过安全狗

本节我们想要绕过的安全狗版本为v4.023957 &#xff0c;它是网站安全狗的Apache版。 首先搭建环境。渗透环境选用DVWA漏洞集成环境&#xff0c;下载地址 为http://www.dvwa.co.uk/ 。DVWA是一款集成的渗透测试演练环境&#xff0c;当刚刚入门 并且找不到合适的靶机时&#xff…

视觉开发板—K210自学笔记(二)

视觉开发板—K210 一、开发之前的准备 工欲善其事必先利其器。各位同学先下载下面的手册&#xff1a; 1.Sipeed-Maix-Bit 资料下载&#xff1a;https://dl.sipeed.com/shareURL/MAIX/HDK/Sipeed-Maix-Bit/Maix-Bit_V2.0_with_MEMS_microphone 2.Sipeed-Maix-Bit 规格书下载&…

vue3 之 商城项目—登陆

整体认识 登陆页面的主要功能就是表单校验和登陆登出业务 路由配置 模版 <script setup></script><template><div><header class"login-header"><div class"container m-top-20"><h1 class"logo"&g…

在Ubuntu上部署Stable Video Diffusion动画制作

Stable Diffusion团队推出的开源模型Stable Video Diffusion&#xff0c;支持生成约3秒的视频&#xff0c;分辨率为5761024。通过测试视频展示了其令人瞩目的性能&#xff0c;SVD模型是一个生成图像到视频的扩散模型&#xff0c;通过对静止图像的条件化生成短视频。其特点主要包…

Spring基础 - Spring简单例子引入Spring要点

Spring基础 - Spring简单例子引入Spring要点 设计一个Spring的Hello World 设计一个查询用户的案例的两个需求&#xff0c;来看Spring框架帮我们简化了什么开发工作 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"htt…

无人机图像识别技术研究及应用,无人机AI算法技术理论,无人机飞行控制识别算法详解

在现代科技领域中&#xff0c;无人机技术是一个备受瞩目的领域。随着人们对无人机应用的需求在不断增加&#xff0c;无人机技术也在不断发展和改进。在众多的无人机技术中&#xff0c;无人机图像识别技术是其中之一。 无人机图像识别技术是利用计算机视觉技术对无人机拍摄的图像…

springboot169基于vue的工厂车间管理系统的设计

基于VUE的工厂车间管理系统设计与实现 摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本…

第7章 智能租房——首页

学习目标 掌握房源总数展示功能&#xff0c;能够实现将统计的房源总数在首页中展示 掌握最新房源数据展示功能&#xff0c;能够实现将查询的最新房源数据在首页中展示 掌握热点房源数据展示功能&#xff0c;能够实现将查询的热点房源数据在首页中展示 了解智能提示搜索框的功…

Apache Paimon 文件操作

本文旨在澄清不同文件操作对文件的影响。 本页面提供具体示例和实用技巧&#xff0c;以有效地管理这些操作。此外&#xff0c;通过对提交&#xff08;commit&#xff09;和压实&#xff08;compact&#xff09;等操作的深入探讨&#xff0c;我们旨在提供有关文件创建和更新的见…

STM32 定时器

目录 TIM 定时器定时中断 定时器外部时钟 PWM驱动LED呼吸灯&#xff08;OC&#xff09; PWM控制舵机 PWMA驱动直流电机 输入捕获模式测频率&#xff08;IC&#xff09; 输入捕获模式测占空比 编码器接口测速(编码器接口) TIM 通用定时器 高级定时器 定时器定时中断 Ti…

springboot项目热部署实现(Spring Boot DevTools方式)

文章目录 Spring Boot DevTools简介Spring Boot DevTools原理spring Boot Devtools优缺点Spring Boot DevTools集成步骤第一步&#xff1a;添加maven依赖第二步&#xff1a;IDEA热部署配置 Spring Boot DevTools简介 Spring Boot DevTools是Spring Boot提供的一个开发工具&…

Vue事件中如何使用 event 对象

在Vue中&#xff0c;事件处理函数常常需要获取事件触发时的相关信息&#xff0c;比如鼠标位置、按键信息等。而要获取这些信息&#xff0c;就需要使用event对象。那么在Vue的事件中如何正确使用event对象呢&#xff1f;接下来就来详细介绍一下。 首先&#xff0c;在Vue的事件中…

JSP编程

JSP编程 您需要理解在JSP API的类和接口中定义的用于创建JSP应用程序的各种方法的用法。此外,还要了解各种JSP组件,如在前一部分中学习的JSP动作、JSP指令及JSP脚本。JSP API中定义的类提供了可借助隐式对象通过JSP页面访问的方法。 1. JSP API的类 JSP API是一个可用于创建…

专业145+总分400+合肥工业大学833信号分析与处理综合考研经验电子信息通信,真题,大纲,参考书

今年专业课145总分400&#xff0c;我总结一下自己的专业课合肥工业大学833信号分析与处理和其他几门的复习经验。希望对大家复习有帮助。 我所用的教材是郑君里的《信号与系统》&#xff08;第三版&#xff09;和高西全、丁玉美的《数字信号处理》&#xff08;第四版&#xff…

堆排序----C语言数据结构

目录 引言 堆排序的实现**堆的向下调整算法** 对排序的时间复杂度建堆的时间复杂度&#xff1a;排序过程的时间复杂度&#xff1a;总体时间复杂度&#xff1a; 引言 堆排序&#xff08;Heap Sort&#xff09;是一种基于比较的排序算法&#xff0c;利用堆的数据结构来实现。它的…

备战蓝桥杯---动态规划之背包问题引入

先看一个背包问题的简单版&#xff1a; 如果我们暴力枚举可能会超时。 但我们想一想&#xff0c;我们其实不关心怎么放&#xff0c;我们关心的是放后剩下的体积。 用可行性描述即可。 于是我们令f[i][j]表示前i个物品能否放满体积为j的背包。 f[i][j]f[i-1][j]||f[i-1][j-v…