文件包含漏洞浅析

首先先介绍下什么是文件包含:
程序开放人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需进行编写,这种调用过程被称呼为文件包含

文件包含漏洞的成因:
编程人员为了让代码的书写变得更加灵活,通常把被包含的文件设置为变量,用来动态调用,但如果用户对这个变量可控而且服务器端又没有对动态调用的文件进行足够的检测,或者校验被绕过就造成了文件包含漏洞。

PHP中常见的文件包含函数:
include()
使用该函数包含文件,只有当代码执行到include()时,文件才会被包含进来,如果被包含的代码出错,系统会给出一个警告,然后继续执行函数
include_once()
功能与include()相同,但是当程序重复调用同一文件时,只会调用一次
require()
require和include()类似,但是当require()调用的文件发生错误时,程序会输出错误信息,并终止脚本的执行
require_once()
该函数和require函数用法一样,区别类似与于include_once(),调用的文件发生错误时,程序会输出错误信息,并终止脚本的执行。

文件包含漏洞的分类:
本地文件包含漏洞:
被包含文件在服务器本端上。

远程文件包含漏洞:
本地文件包含和远程文件包含造成漏洞的原因是一样的,但是远程文件包含漏洞形成的原因更为苛刻,它要求php.ini中的配置选项  allow_url_fopen和 allow_url_include同时这设置为On状态。这样的话被包含的文件就可以是远程第三方服务器上的文件。

文件包含漏洞的危害:
1.配合文件上传漏洞Getshell  (常见图片马中)
2.可执行任意脚本代码
3.网站源码文件及配置文件泄露
4.远程包含GetShell
5.控制整个网站甚至服务器

漏洞的利用:
一、常见漏洞的环境:
示例代码3:


在示例代码2中,我们看到,该代码对上传的目录尽享了限制,这个时候我们可以使用:    ./    ../等相对路径的表示方法,将目录转移到我们想要的目录那里。

在示例3中,我们看到改代码对文件的路径和后缀名都做了限制,这个时候我们除了用
../来进行文件目录的切完外,还需要用 %00对文件后缀名进行截断。
但截断能够是有的前提是  PHP版本小于5.3.4,并且magic_guotes_gpc=off
如果改配置这里是On,%00会被转义,从而无法截断

二、配合图片马Getshell
1.我们只需要将带有木马的图片上传到服务器端,然后结合文件包含漏洞,在服务器端解析执行木马代码就可以了


三、远程文件包含
1.远程文件包含的运用前提是:服务器端php.ini配置中将allow_url_fopen 和allow_url_include两个选项设置为On。

2.接着将要包含文件的URL输入到文件包含处就可以了


文件包含漏洞的防御
1.PHP中使用open_basedir配置限制用户在指定区域访问
2.过滤.  /    \  等符号(防止黑客通过相对路径查看,调用别的文件)
3.禁止服务器远程文件包含



猜你喜欢

转载自blog.csdn.net/sdb5858874/article/details/80669297
今日推荐