7.2 文件包含

1. 本地文件包含

PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。最常见的就属于本地文件包含漏洞了。 有如下代码:

if($_GET['file']){
    include $_GET['file'];
}else{
    include 'default.php';
}

本来是一段正常的代码,正常提交http://www.example.com/test.php?file=exam.php调用exam.php的内容,那么如果我们提交http://www.example.com/test.php?file=uploads/test.jpg,test.php是我们上传的恶意图片,那么就会造成恶意代码被包含进去。这就是一个简单的本地文件包含漏洞。

2. 远程文件包含

远程文件包含顾名思义就是可以包含远程的文件从而造成漏洞,远程文件包含需要的条件:allow_url_fopen=On和allow_url_include=On,默认,(allow_url_fopen=On,allow_url_include=Off).包含支持http,https,ftp data,file,php://input流等。

<?php include($_GET['url']); ?>

3. 截断文件包含

测试代码:<?php include($_GET['file'].'.php');?> %00截断(需要 magic_quotes_gpc=off,PHP小于5.3有效)

当我们提交http://www.example.com/test.php?file=test.jpg%00,即可执行我们test.jpg里面的内容.

利用'.'和反斜杠'/'来截断 http://www.example.com/test.php?file=test.jpg............[...],经测试windows需要大于228'.'可以截断,(seay说240个点,kuuki说256个点),但是大于256个点是肯定可以截断的。linux下需要'./'组合4096个字符截断。

挖掘方法,我们主要通过查找include,include_once,require,require_once关键字来查找漏洞。

results matching ""

    No results matching ""