文件包含漏洞

article/2025/10/9 21:46:50

【文件包含】文件包含漏洞知识总结

一、什么是文件包含漏洞?

1、文件包含概述

和SQL注入等攻击方式一样,文件包含漏洞也是一种“注入型漏洞”,其本质就是输入一段用户能够控制的脚本或者代码,并让服务器端执行。

什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程就叫做包含。

有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

以PHP为例,常用的文件包含函数有以下四种:

include(),require(),include_once(),require_once()

区别如下:

  • require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
  • include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
  • include_once()与include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
  • require_once()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

2、漏洞成因分析

我们先直接来看一个简单的例子,网页代码如下:

在这里插入图片描述

再创建一个phpinfo.php页面,代码如下:

在这里插入图片描述

利用文件包含,我们通过include函数来执行phpinfo.php页面,成功解析:

在这里插入图片描述
将phpinfo.php文件后缀改为txt后进行访问,依然可以解析:

在这里插入图片描述
修改为jpg格式,也可以解析:

在这里插入图片描述

可以看出,include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来。

在上一期文件上传漏洞的总结中,我们上传了一个jpg格式的一句话木马,如果网站有文件包含漏洞,jpg文件就可以被当作php文件进行解析,现在知道是为什么了吧~

我们将phpinfo.jpg的内容改成一段文字:

在这里插入图片描述

再次进行访问,可以读出文本内容:

在这里插入图片描述

利用这个特性,我们可以读取一些包含敏感信息的文件。

二、本地文件包含漏洞

能够打开并包含本地文件的漏洞,我们称为本地文件包含漏洞(LFI)。

测试网页包含如下代码:

在这里插入图片描述

网站利用文件包含功能读取一些php文件,例如phpinfo:

在这里插入图片描述

利用该代码,我们可以读取一些系统本地的敏感信息。

例如C:\Windows\system.ini文件。

(1)使用绝对路径

使用绝对路径直接进行读取:

在这里插入图片描述

(2)使用相对路径进行读取:

当前页面所在路径为C:\Apache24\htdocs\,我们需要使用…/退到C盘再进行访问,构造路径如下:

…/…/windows/system.ini

成功读取到文件信息:

在这里插入图片描述

./表示当前位置路径,…/表示上一级路径位置,在linux中同样适用。

(3)一些常见的敏感信息路径:

Windows系统:

  • c:\boot.ini // 查看系统版本
  • c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
  • c:\windows\repair\sam // 存储Windows系统初次安装的密码
  • c:\ProgramFiles\mysql\my.ini // MySQL配置
  • c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
  • c:\windows\php.ini // php 配置信息

Linux/Unix系统:

  • /etc/passwd // 账户信息
  • /etc/shadow // 账户密码文件
  • /usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
  • /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
  • /usr/local/app/php5/lib/php.ini // PHP相关配置
  • /etc/httpd/conf/httpd.conf // Apache配置文件
  • /etc/my.conf // mysql 配置文件

三、LFI漏洞利用技巧

1、字符串截断

首先我们来看一段改进后的代码:

在这里插入图片描述

我们去读取根目录下的site目录中的phpinfo.php文件:

在这里插入图片描述

此时如果我们想通过文件包含漏洞读取本地敏感信息,就会遇到一些问题。因为服务器会给路径加上./site/路径,以及.php后缀。

此时我们可以使用使用%00截断:

%00为结束符,在filename后带上%00,就可以截断末尾的.php。

当前路径为./site/,如果要读取system.ini,则需要输入:…/…/…/windows/system.ini%00,成功读取如下:

在这里插入图片描述

需要注意的是,%00截断需要php版本小于5.3.4,且关闭magic_quotes_gpc功能。

2、配合文件上传使用

有时候我们找不到文件上传漏洞,无法上传webshell,可以先上传一个图片格式的webshell到服务器,再利用本地文件包含漏洞进行解析。

以DVWA平台为例,编辑一个图片马,内容如下:

在这里插入图片描述

找到上传点进行上传:

在这里插入图片描述

文件保存的完整路径为:

C:\phpStudy\WWW\hackable\uploads\webshell.jpg

DVWA平台low等级文件包含漏洞页面如下:

在这里插入图片描述

该页面用于读取C:\phpStudy\WWW\vulnerabilities\fi\路径中的文件,代码如下:

在这里插入图片描述

现在我们利用该页面去执行我们上传的图片马,路径需要从C:\phpStudy\WWW\vulnerabilities\fi\ 转到C:\phpStudy\WWW\hackable\uploads\webshell.jpg

构造URL如下,页面无报错:

在这里插入图片描述

可以看到fi文件夹中生成了一个webshell:

在这里插入图片描述

使用webshell管理工具连接即可。

注:我们也可以直接在webshell.jpg中写一句话木马,然后再通过文件包含漏洞去连接webshell.jpg,但这种方法有时候webshell功能会出现异常。所以我们选择上面的方式,生成一个.php格式的一句话木马,再去连接。

3、包含Apache日志文件

有时候网站存在文件包含漏洞,但却没有文件上传点。这个时候我们还可以通过利用Apache的日志文件来生成一句话木马。

在用户发起请求时,服务器会将请求写入access.log,当发生错误时将错误写入error.log,日志文件如下:

在这里插入图片描述

当我们正常访问一个网页时,如http://127.0.0.1/login.php,access日志会进行记录,如下图所示:

在这里插入图片描述

如果我们访问一个不存在的资源,也一样会进行记录,例如访问

127.0.0.1/<?php phpinfo();?>

但查看日志会发现被编码了,如下:

在这里插入图片描述

我们再次进行访问,并使用burp抓包,发现被编码:

在这里插入图片描述
我们将报文修改回去,再进行发送即可:
在这里插入图片描述
此时再查看access日志,正确写入php代码:

在这里插入图片描述

再通过本地文件包含漏洞访问,即可执行:

在这里插入图片描述

我可以在此处写入一句话木马,再使用Webshell管理工具进行连接。

四、远程文件包含

如果PHP的配置选项allow_url_include、allow_url_fopen状态为ON的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞(RFI)。

在这里插入图片描述

首先我们来看一段代码:

在这里插入图片描述

访问本地phpinfo.php文件:

在这里插入图片描述

该页面并没有对$path做任何过滤,因此存在文件包含漏洞。

我们在远端Web服务器/site/目录下创建一个test.php文件,内容为phpinfo(),利用漏洞去读取这个文件。

但是代码会给我们输入的路径后面加上’/phpinfo.php’后缀,如果php版本小于5.3.4,我们可以尝试使用%00截断,这里php版本为7.2.7,不适用。

还有一种截断方法就是?号截断,在路径后面输入?号,服务器会认为?号后面的内容为GET方法传递的参数,成功读取test.php如下:

在这里插入图片描述

如果test.php是恶意webshell文件,那么利用该漏洞就可以获取到服务器权限。

五、PHP伪协议

PHP内置了很多URL风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数,如下所示:

在这里插入图片描述

1、php://filter

有一些敏感信息会保存在php文件中,如果我们直接利用文件包含去打开一个php文件,php代码是不会显示在页面上的,例如打开data目录下的config.php:

在这里插入图片描述

这时候我们可以以base64编码的方式读取指定文件的源码:

输入:php://filter/convert.base64-encode/resource=文件路径

得到config.php加密后的源码:

在这里插入图片描述

再进行base64解码,获取到数据库账号等敏感信息:

在这里插入图片描述

2、data://

利用data:// 伪协议可以直接达到执行php代码的效果,例如执行phpinfo()函数:

在这里插入图片描述
如果此处对特殊字符进行了过滤,我们还可以通过base64编码后再输入:

在这里插入图片描述

3、zip:// 执行压缩文件

如果网站允许我们上传压缩文件,我们也可以将php文件压缩后进行上传,再通过zip://协议执行。

以DVWA平台为例,我们将phpinfo.php文件进行压缩后上传:

在这里插入图片描述

通过zip://协议执行zip压缩包中的phpinfo.php文件:

在这里插入图片描述

4、php://input

利用该方法,我们可以直接写入php文件,输入file=php://input,然后使用burp抓包,写入php代码:

在这里插入图片描述

发送报文,可以看到本地生成了一句话木马:

在这里插入图片描述

5、伪协议利用条件

伪协议的利用方法还有很多,这里就不一一举例了。

伪协议的用法小结:

在这里插入图片描述

六、文件包含漏洞防护

1、使用str_replace等方法过滤掉危险字符

2、配置open_basedir,防止目录遍历

3、php版本升级,防止%00截断

4、对上传的文件进行重命名,防止被读取

5、对于动态包含的文件可以设置一个白名单,不读取非白名单的文件

6、做好管理员权限划分,做好文件的权限管理


http://chatgpt.dhexx.cn/article/kE6FrL4S.shtml

相关文章

Vector关于Apache Log4Shell CVE-2021-45105,CVE-2021-45046,CVE-2021-44228 的安全漏洞配合与修复全面详解

Apache Log4j2 是一个基于 Java 的日志记录开源组件。近日&#xff0c;Log4j2 被爆出现安全漏洞&#xff0c;攻击者可以通过向易受攻击的服务器或应用程序发送操纵请求来利用安全漏洞。Vector 德国PREEvison产品团队已经通过官网和客户管理系统及时通知客户&#xff0c;有关PRE…

Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面

摘要&#xff1a;二进制SCA工具要想更好的辅助安全人员实现安全审计、降低漏洞检测的误报率&#xff0c;必须向更细颗粒度的检测维度发展&#xff0c;而不仅仅停留在开源软件的层面&#xff0c;同时对漏洞库的要求也需要向细颗粒度的精准信息提出的挑战。 本文分享自华为云社区…

kali linux渗透测试之漏洞扫描

主题内容就是进行漏洞扫描 文章目录 前言一、Nikto1.Nikto漏洞扫描介绍2.Nikto使用 二、Nessus1.Nessus介绍2.安装nessus3.nessus的简单使用3.nessus扫描之advanced scan 三、 skipfish扫描工具1.介绍2.skipfish的使用3.批量处理4.使用字典5.命令选项6.打开文件 四、 AWVS漏洞扫…

【CVE-2022-0185】Linux kernel [文件系统挂载API] 堆溢出漏洞分析与利用

0x00.一切开始之前 CVE-2022-0185 是 2022 年初爆出来的一个位于 filesystem context 系统中的 fsconfig 系统调用中的一个堆溢出漏洞&#xff0c;对于有着 CAP_SYS_ADMIN 权限&#xff08;或是开启了 unprivileged namespace&#xff09;的攻击者而言其可以利用该漏洞完成本地…

Spring 新版本修复远程命令执行漏洞(CVE-2022-22965),墨菲安全开源工具可应急排查

漏洞简述 3月31日&#xff0c;spring 官方通报了 Spring 相关框架存在远程代码执行漏洞&#xff0c;并在 5.3.18 和 5.2.20.RELEASE 中修复了该漏洞。 漏洞评级&#xff1a;严重 影响组件&#xff1a;org.springframework:spring-beans 影响版本&#xff1a;< 5.3.18 和…

❤️❤️爆肝3万字整理小白入门与提升分布式版本管理软件:Git,图文并茂(建议收藏)❤️❤️

小白快速快入门Git 什么是GitSVN VS Git什么是版本控制安装Git谁在操作&#xff1f;Git本地仓库本地仓库构造重点 Git常用基本操作git addgit commitgit diffgit loggit resetgit mvcheckoutgit tagclear Github使用教程什么是Github安装Github添加远程仓库找到key打开Github官…

代码版本管理软件评比

转载的&#xff0c;回头在翻译一下 If you spend time talking to software developers about tools, one of the biggest topics I hear about are version control tools. Once youve got to the point of using version control tools, and any competent developers does,…

Git(代码版本管理软件、工具 详细)

Git 使用步骤 在创建的文件夹里面 。。。 &#xff08;不要用中文名字&#xff09;右键Git Bash Here 小黑框在小黑框里写&#xff1a;git init (意思是初始化一个仓库)&#xff0c;//一个项目一次就可以 会出现一个隐藏的.git文件夹&#xff0c;不要动在里面敲代码就可以了 小…

Git版本管理软件使用

Git是目前世界上最先进的分布式版本控制系统&#xff0c;下面介绍如何使用Git管理项目。 一、下载Window Git工具 https://pan.baidu.com/s/1EF_KybTb32VACzXniFBDdw 下载安装 设置Window环境变量path&#xff0c;包括Git的bin目录 启动CMD窗口&#xff0c;输入git,出现如…

cad图纸版本号管理软件-彩虹EDM图纸管理软件

cad图纸版本号管理软件-彩虹EDM图纸管理软件-由南宁市二零二五科技有限公司 自主研发。 通过安装对应软件接口&#xff0c;彩虹EDM能够与CAD/EDA软件集成通讯&#xff1b;可以读取CAD/EDA图纸信息创建装配关系&#xff0c;在这些软件提供在线菜单&#xff0c;在编辑文件的时候…

03-代码版本管理软件推荐

http://www.gitkraken.com/ GitKraken也同时支持其他的代码托管服务&#xff0c;&#xff08;非GitHub仅有&#xff09;&#xff0c;但是确实并不是所有功能都是完全免费的&#xff08;大家可以搜索GitCracken&#xff0c;但还是希望大家支持正版&#xff09;&#xff1b; 另外…

版本管理软件--Git的安装、配置并使用

版本管理软件分类 集中式&#xff0c;典型代表 SVN 分布式&#xff0c;典型代表 Git 安装 安装git&#xff0c;一直 下一步 安装即可&#xff0c;如果不想安装到C盘&#xff0c;可以把C换成D不要安装到含有中文的路径中。安装完毕&#xff0c;不可以剪切&#xff08;移动&a…

R、冗余分析(RDA)、ggplot2、置信椭圆

R、冗余分析&#xff08;RDA&#xff09;、ggplot2、置信椭圆 在生态环境领域中&#xff08;实际中&#xff0c;其他专业也用到&#xff09;&#xff0c;冗余分析&#xff08;RDA&#xff09;是我们常用的分析方法&#xff0c;分析目的为“解释变量”对“响应变量”的影响情况。…

R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

判别分析包括可用于分类和降维的方法。线性判别分析&#xff08;LDA&#xff09;特别受欢迎&#xff0c;因为它既是分类器又是降维技术。二次判别分析&#xff08;QDA&#xff09;是LDA的变体&#xff0c;允许数据的非线性分离。最后&#xff0c;正则化判别分析&#xff08;RDA…

222Beta多样性限制性排序CPCoA/CCA/RDA/LDA

222Beta多样性限制性排序CPCoA/CCA/RDA/LDA 本节作者&#xff1a;文涛&#xff0c;南京农业大学&#xff1b;刘永鑫&#xff0c;中科院遗传发育所 版本1.0.5&#xff0c;更新日期&#xff1a;2020年8月12日 本项目永久地址&#xff1a;https://github.com/YongxinLiu/Microbiom…

R包vegan的冗余分析(RDA)

冗余分析(Redundancy analysis,RDA)是一种回归分析结合主成分分析的排序方法,也是多响应变量(multi-response)回归分析的拓展。在群落分析中常使用RDA,将物种多度的变化分解为与环境变量相关的变差(variation;或称方差,variance,因为RDA中变差=方差;由约束/典范轴承…

RDA_环境因子_群落结构_统计检验_可视化

RDA环境因子群落结构统计检验可视化 环境因子的筛选及数据的转化方面请参阅宏基因组公众号之前的推文&#xff0c;本文主要侧重统计分析与可视化 看到师兄文章里的图自己可能用到&#xff0c;想复现一下&#xff0c;于是就尝试了一下&#xff0c;顺便写个推文记录&#xff0c;在…

使用RDA技术实现数据的自动化分析

有人说&#xff0c;数据是一种新的能源&#xff0c;形成了一种令人垂涎的资源&#xff0c;为企业决策提供动力。虽然&#xff0c;原始形式的数据并没有多大用处。它需要被提取、提炼和加工——其成分通过从源头到炼油厂再到最终消费者&#xff0c;输送到各种产品中。 数据处理的…

在线画图工具-CCA与RDA分析

网站&#xff1a; http://www.qplot.cn:3838/sample-apps/006-CCA_RDA/ RDA分析(Redundancy analysis)&#xff0c;即冗余分析&#xff0c;对比主成分分析可以发现&#xff0c;其实冗余分析就是约束化的主成分分析。 RDA或CCA的选择问题&#xff1a;RDA是基于线性模型&#xff…

rda分析怎么做_R语言做冗余分析(RDA)的一个简单小例子

冗余分析(redundancy analysis, RDA)自己之前也听过,好像是生态学研究中用的比较多,主要是用来探索环境和一些样本指标之间的关系。最近自己在看一些群体遗传相关的内容,发现RDA也可以用在群体遗传方面 ,比如这个参考链接 https://popgen.nescent.org/2018-03-27_RDA_GEA.h…