本地文件包含?如何修补此问题

时间:2010-09-04 00:15:13

标签: php security

我正在尝试修补我的php融合到一个新的漏洞。但我并没有完全承受这个漏洞。

请先在此处查看:http://www.exploit-db.com/exploits/14647/

=================Exploit=================
maincore.php
[php]
 // Locate config.php and set the basedir path
$folder_level = ""; $i = 0;
while (!file_exists($folder_level."config.php")) {
    $folder_level .= "../"; $i++;
    if ($i == 5) { die("Config file not found"); }
}
require_once $folder_level."config.php";
define("BASEDIR", $folder_level);
[/php]
----exploit----

http://{localhost}/{path}/maincore.php?folder_level=LFI

我知道本地文件包含是什么,但是如何设置一个get变量使它成为显示的代码段,它甚至不使用get变量!!

感谢任何人清理它。如果有什么需要补丁的话,我想补丁一下!

2 个答案:

答案 0 :(得分:1)

它是因为PHP中的地狱register_globals设置。

启用此功能后,可以使用您在代码中看到的名称直接访问get变量。其中

$_GET['somevar'] 

也是

$somevar;

有可能它没有在你的服务器上设置(它确实不应该),所以你可能不容易受此影响。但如果启用它就可以做些什么。

在你的具体情况下,我非常肯定这一行

$folder_level = "";

在您的脚本开始时,清除可能已在网址中设置的任何内容。

答案 1 :(得分:-1)

修补本地文件包含(LFI)和远程文件包含(RFI)漏洞的最佳方法是使用白名单。

$safe_folders=array("test","config","includes","special");

if(in_array($folder_level,$safe_folders)){
    require_once $folder_level."/config.php";
}

您发布的其他代码是垃圾......显然是因为它被黑客攻击并且漏洞利用代码已发布给公众。