文件包含漏洞

1、文件包含漏洞简介

1、1什么是文件包含

         程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数
时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含。


1、2 文件包含漏洞的成因  

             随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包
含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变
量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做
合理的校验或者校验被绕过就造成了文件包含漏洞。


1、3 PHP中常见包含文件的函数


Ø include( )
当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含
进来,发生错误时之给出一个警告,继续向下执行。
Ø include_once( )
功能与Include()相同,区别在于当重复调用同一文件时,程序只调用一次
Ø require( )
require()与include()的区别在于require()执行如果发生错误,函数会输出
错误信息,并终止脚本的运行。
Ø require_once( )
功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
 
 几乎所有的脚本语言中都提供文件包含的功能,但文件包含漏洞在 PHP 中
居多,而在JSP、ASP、ASP.NET程序中非常少,甚至没有包含漏洞的存在。这

与程序开发人员的水平无关,而问题在于语言设计的弊端。


1、4 文件包含漏洞的分类

   本地文件包含漏洞:

当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。

    远程文件包含漏洞:

本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini 中的配
置选项allow_url_fopen和allow_url_include为ON的话,则包含的文件可以

是第三方服务器中的文件,这样就形成了远程文件包含漏洞。


2、文件包含漏洞的利用

常见漏洞的环境

一、

二、

三、


3. 读取文件

3.1 读取敏感文件

如果目标主机存在本地文件包含漏洞,可以通过漏洞读取服务器上一些重要的文
件,我们知道在使用文件包含时,相当与被包含的文件内容存在于包含文件处,
因此被包含的文件是 PHP 文件则会被解析执行,其他格式的文件会显示文件内
容。
示例代码一种:通过读取本地文件来检测漏洞是否存在

成功读取本地写有php指针代码的文件

示例代码二:由于在包含文件时对包含的文件有一个指定的目录 action,因此
在检测漏洞时需要使用’../’这些来跳出指定的目录。


读取PHP源码文件

在PHP中有很多内置URL风格的封装协议,使用内置的封装协议可以读取PHP

文件。例:

http://localhost/file_inclusion/inclusion_1.php/?page=php://filter/read=

convert.base64-encode/resource=inclusion_1.php
访问以上URL之后可以得到Base64编码字符串:

Base64编码之后的PHP源代码,经过解码就可以得到源代码。

如,读出本地1.php文件




解码的1.php里面的内容


 截断绕过

示例代码三可以看到,不仅对包含的文件指定了目录,还指定了文件的后缀。

如果我们上传文件的名字是 1.jpg,那么 PHP 程序在包含时变成了 1.jpg.php。

显然此文件是不存在的。但是此处可以使用截断来突破这段代码。

但是这种方法有一个前提是PHP版本小于5.3.4,并且magic_quotes_gpc=off,
如果为On,%00(NULL)会被转义,从无法进行截断。



  • 10
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值