小工具知识网

当前位置: 首页 > 行业知识 > 文件包含漏洞全面详解

行业知识

文件包含漏洞全面详解

2026-11-12 19:16:43 来源:互联网转载

文件包含漏洞总结

  • 一、什么是文件包含漏洞
  • 二、本地文件包含漏洞(LFI)
  • 三、LFI漏洞利用技巧
    • 1.配合文件上传使用
    • 2.包含Apache日志文件
    • 3.包含SESSION文件
    • 4.包含临时文件
    • 四、远程文件包含(RFI)
    • 五、PHP伪协议
      • 1.file://协议
      • 2.php://协议
      • 3.ZIP://协议
      • 4.data://协议
      • 5.伪协议利用条件
      • 六、文件包含漏洞防护

        一、什么是文件包含漏洞

        1.文件包含漏洞概述

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

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

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

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

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

        区别如下:

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

          2.漏洞成因分析

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

           

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

           

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

          将phpinfo.php文件后缀改为txt后进行访问,依然可以解析:

          将phpinfo.php文件后缀改为jpg格式,也可以解析:

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

          在上一期的文件上传漏洞的总结中,我们上传了一个jpg格式的一句话木马,如果网站有文件包含漏洞,jpg文件就可以被当做php文件解析,所以这就是文件上传漏洞通常配合文件上传使用。

          现在我们将phpinfo.jpg的内容改成一段文字:hello world!

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

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

          二、本地文件包含漏洞(LFI)

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

          测试网页包含如下代码:

           

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

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

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

          (1)使用绝对路径

          使用绝对路径直接读取:

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

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

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

          ../../windows/system.ini

          由于我的环境搭建在D盘,所以这里就不做演示了。

          (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/password //账户信息
            • /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.配合文件上传使用

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

              以DVWA平台为例,将Security Level选择low,编辑一个图片马,内容如下:

上一篇:服务器里怎么拷贝文件?

下一篇:雅微微名字解析,探寻背后的深意与独特魅力