浅谈绕过open_basedir 的几种用法

本文介绍了PHP中open_basedir配置限制的原理,并详细探讨了几种绕过限制的方法,包括利用命令执行函数、sysmlink()、glob://伪协议以及chdir()与ini_set()的组合使用。通过实例代码展示了如何在不同场景下实现文件访问的限制规避。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值