В этом руководстве я расскажу о кодировщике PHP без альфа-канала. Я сначала покажу некоторую базовую концепцию, прежде чем мы углубимся в нее, что может вызвать повреждение мозга.
поэтому, если ‘A’ xor ‘A’ должно быть 0. как пример ниже:
теперь давайте попробуем «A» xor «1»:
Подождите, что? .. как это может быть "р"? .. какая там логика ?. Хорошо, хорошо .. Я возвращаюсь к основам.
Открыв онлайн-калькулятор
В шестнадцатеричном формате «A» - это «0x41», а «1» - «0x31», на самом деле это не 0x01. Таким образом, после xor значение, оно получает «0x70», который может быть алфавитом «p» в таблице ascii.
Хорошо, а что такое не-альфа?
Не буквенно-цифровые символы, которые считаются символами, также обрабатываются как пробелы.
Вопрос в том, что? .. не могут альфа будет строить, чтобы стать струнами? .. ответ: Да !!
Хорошо, давай еще раз взглянем. в шестнадцатеричной таблице я буду использовать шестнадцатеричный код от 0x20 до 0x40 и от 0x7B до 0x7E, поэтому он не входит в диапазон алфавита. поэтому с помощью этой комбинации я пытаюсь построить строку
Теперь у вас есть основная концепция. Давайте запустим наш PHP-cli (я буду использовать php7.x). Как мы знаем, объявление переменных в большинстве языков программирования принимает буквы a-z, A-Z, 0–9 и знак подчеркивания. Я буду использовать подчеркивание в качестве переменной.
Первая команда, которую я использую, чтобы объявить свои переменные «$ _;». Он будет содержать неопределенную переменную, которую мы можем принять как «Null» или «0».
Во-вторых, я пытаюсь увеличить «$ _;», добавляя «++» в конце ($ _ ++; ). Результатом будет числовая «1»
3-я, при объединении строки и числа PHP примет первый параметр в качестве своего типа. ‘’. $ _ - строка ‘1’. Я снова пытаюсь выполнить xor с помощью «A», получается «p». Надеюсь, это понятно.
Итак, давайте построим нашу строку. но ленив? .. ладно, я сделал для вас какой-то инструмент и изучаю код.
PHP_alphanumeric_encoder
Что такое Python argumentparser? и как его объявить?
Модуль argparse упрощает создание удобных интерфейсов командной строки. Программа определяет, какие аргументы ей требуются, а argparse выясняет, как их анализировать из sys.argv. Модуль argparse также автоматически генерирует справочные сообщения и сообщения об использовании и выдает ошибки, когда пользователи предоставляют программе недопустимые аргументы.
Затем я инициализирую класс php_encoder с тремя аргументами: полезная нагрузка, метод и badchar. Я также создаю symbolic_list, используя string.digits + string.printable [62:94].
Наконец, я создаю список «xor» и «или» не альфа, который нужно сохранить.
Ниже приведена функция, заменяющая badchar на «» (нет).
php_encoder проверяется:
- проверьте, успешно ли закодированы все символы полезной нагрузки.
- итерация xor non-apha и non-alpha.
- если полезная нагрузка содержит не-альфа, он напрямую выбирает не-альфа-символ.
- иначе он будет «xor» и проверит соответствие, он добавится в список.
Если вы посмотрите на код, я использую другую логику. который является кодировщиком "или". вы можете выяснить это самостоятельно.
Давайте протестируем код:
эхо $ __ ($ _); на самом деле это то же самое, что и echo shell_exec («whoami»).
Практическое время !!! , приведенный ниже код уязвим для кодировщика php-nonalpha, который ограничивает нас только записью числа и некоторых символов.
С той же полезной нагрузкой, которую мы создавали раньше. Попробуйте использовать функцию eval.
($ _ = ('7' ^ '@'). ('7' ^ '_'). ('/' ^ '@') . (':' ^ '['). ('@' ^ '-'). ('[' ^ '2')) определяется для whoami.
($ __ = ('3' ^ ' @ '). (' 3 '^' ['). (' 8 '^'] '). (', '^' @ '). (' @ '^', '). ”_”. (' ['^' ›'). ('] '^'% '). (' ^ '^'; '). (' ^ '^' = ')) Определяется для shell_exec.
($ __ ($ _)) равно shell_exec ('whoami').
eval ('print'. ($ _ = ('7' ^ '@'). ('7' ^ '_'). ('/' ^ '@'). (':' ^ '['). ('@' ^ '-'). ('[' ^ '2')). ($ __ = ('3' ^ '@'). ('3' ^ '['). ('8' ^ ']'). (',' ^ '@'). ('@' ^ ','). ”_”. ('[' ^ '›'). (']' ^ '%'). ( '^' ^ ';'). ('^' ^ '=')). ($ __ ($ _)). ”;”);
Я использую скобки для каждой переменной, определяю и выполняю ее, вызывая ($ __ ($ _))
Поздравляю !! .. Вы освоили первую технику. «Mucomplex, у вас есть другая альтернатива?». . Ответ - да !.
Этот метод определяется как метод приращения.
Сначала мы пытаемся создать строку из PHP stdout. Посмотрите на пример ниже. Есть много способов определить это.
Строка «Массив» будет сохранена в переменной «$ _». Затем мы пытаемся создать «0», установив неопределенную переменную ($ __). Тогда мы получим «A», когда «$ ___ = $ _ [$ __]», что означает, что у нас есть доступ к «A» в строке «Array». Если мы увеличиваем «$ ___ ++», мы можем получить алфавит от A до Z. Затем мы пытаемся увеличить $ __ ++ так, чтобы оно имело значение 1. Затем снова введите «$ _ [$ __]», мы получим «r». если мы увеличим «$ __» еще в 2 раза, мы можем получить малый капитал «а». Теперь у вас есть общее представление о том, как мы можем контролировать A – Z, a – z, 0–9.
Это все от меня. Удачного взлома.