基础知识:
open_basedir 是php.ini 中的 一个配置选项。可以用作与 将用户访问文件的活动范围限制在指定的区域 , 假设 open_basedir=/var/www/html:/tmp/ , 那么通过 web 1 访问服务器的用户 就无法获取服务器上除了 /var/www/html/web1 和 /tmp 这两个目录 以外 的文件。
注意: open_basedir 指定的限制实际上是前缀 而不是 目录名,
举个例子, 若“open_basedir” = /dir/user 那么目录 /dir/user 和 /dir/user1 都是可以访问的。。
所以,如果要访问限制在仅为指定的目录,请用斜线结束路径名。例如 设置成:“open_basedir”
=/dir/user/
另外。 open_basedir 也可以同时设置多个目录。在windows中 用分号分割目录。
例如:
open_basedir=/home/wwwroot/home/web1/:/tmp/
下面说一下如何绕过 open_basedir:
利用命令执行函数绕过:
open_basedir 对命令执行函数没有限制,我们可以使用system()试一下。在前面代码加上。
<?php
//echo file_get_contents('/home/1.txt');
show_source(__FILE__);
system('cat /home/1.txt');
?>
确实能够访问的。且不受open_basedir限制:
一般情况下,system()等危险函数可能会被disable_functions 禁用,因此 运用场景不多
利用sysmlink()函数bypass:
符号链接:
1,符号链接又叫软连接,是一类特殊的文件,这个文件包含了另一个文件的路径名(绝对路径或者相对路径)
2,在对符号文件进行读或者写的 操作的时候,系统会自动把该操作转换为对源文件的操作。
3,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
symlink()
symlink()函数创建一个从指定名称连接的现存目标文件开始的符号连接。如果成功,该函数返回TRUE。如果失败,则返回FALSE。
官方:symlink ( s