我们首先创建一个目录
且在该目录下新建一个1.txt 内容为abc
再在该目录下创建一个目录命名为b
并且在该目录下创建一个1.php文件内容为
且在php.ini中设置好我们的open_basedir
我们尝试执行1.php看看open_basedir是否会限制我们的访问
执行效果如图
很明显我们无法直接读取open_basedir所规定以外的目录文件。
接下来我们用system函数尝试绕open_basedir的限制来删除1.txt
编辑1.php为
先来看看执行1.php之前的文件情况
执行1.php之后
我们先来了解一下symlink函数
symlink函数将建立一个指向target的名为link的符号链接,当然一般情况下这个target是受限于open_basedir的。
由于早期的symlink不支持windows,我的测试环境就放在Linux下了。
测试的PHP版本是5.3.0,其他的版本大家自测吧。
在Linux环境下我们可以通过symlink完成一些逻辑上的绕过导致可以跨目录 *** 作文件。
我们首先在/var/www/html/1.php中 编辑1.php的内容为
接着在/var/www/中新建一个1.txt文件内容为
再来设置一下我们的open_basedir
在html目录下编辑一个php脚本检验一下open_basedir
执行看下。
意料之中,文件无法访问。
我们执行刚才写好的脚本,1.php
此时tmplink还是一个符号链接文件,它指向的路径是c/d,因此exploit指向的路径就变成了
由于这个路径在open_basedir的范围之内所以exploit成功建立了。
之后我们删除tmplink符号链接文件再新建一个同名为tmplink的文件夹,这时exploit所指向的路径为
由于这时候tmplink变成了一个真实存在的文件夹所以tmplink/../../变成了1.txt所在的目录即/var/www/
然后再通过访问符号链接文件exploit即可直接读取到1.txt的文件内容
当然,针对symlink()只需要将它放入disable_function即可解决问题,所以我们需要寻求更多的方法。
glob是php自5.3.0版本起开始生效的一个用来筛选目录的伪协议,由于它在筛选目录时是不受open_basedir的制约的,所以我们可以利用它来绕过限制,我们新建一个目录在/var/www/下命名为test
并且在/var/www/html/下新建t.php内容为
执行结果如图:
成功躲过open_basedir的限制读取到了文件。
open_basedir, if set, limits all file operations to the defined directoryand below. This directive makes most sense if used in a per-directory or
per-virtualhost web server configuration file. This directive is
*NOT* affected by whether Safe Mode is turned On or Off.
open_basedir = .
open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也
可用符号"."来代表当前目录。注意用open_basedir指定的限制实际上是前缀,而不是目录名。
举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是
可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。例如设置成:
"open_basedir = /dir/user/"
open_basedir也可以同时设置多个目录, 在Windows中用分号分隔目录,在任何其它系统中用,这样看看吧,希望能帮到你,我刚问我在后盾网学习的朋友的♡(❀ฺ•㉨•❀ฺ)♡为你加油!!!!!!
☆ * . ☆
. ∧_∧ ∩ * ☆
* ☆ ( ・∀・)/ .
. ⊂ ノ* ☆
☆ * (つ ノ .☆
(ノ
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)