
tl; dr Эта статья о коде, увеличивающем размер оболочки PHP до 35 байт, сохраняя при этом удобство использования и безопасность. Веб-оболочку можно найти на Github.
Ниндзя должны быть незаметными, но обмен юзабилити на скрытность обходится дорого. Мы хотим, чтобы наша веб-оболочка могла делать все, оставаясь при этом максимально незаметной. Итак, начнем с добавления возможности запускать произвольные функции, играя с синтаксисом PHP.

Мы можем создать действительно симпатичную веб-оболочку с помощью этого трюка

Прелесть этой веб-оболочки в том, что ее можно использовать для запуска любой произвольной функции с произвольными аргументами. Например, чтобы распечатать рабочий каталог, я могу просто сделать
https://example.com/ourshell.php?function=exec&argument=pwd
В нем 97 символов, поэтому давайте сократим его

Вещи, которые я изменил
- Мы не используем переменные для хранения значений параметров, мы используем их напрямую.
- функция сокращена до f, а аргумент - до a.
- Удален закрывающий тег, например ? ›, потому что в нем нет необходимости.
Мы сократили его до 31 символа, это действительно огромное улучшение, но что, если кто-то другой найдет нашу веб-оболочку? Он может легко использовать его для своей выгоды, если знает, как это работает.
Да, нам лучше реализовать аутентификацию.
Ничего особенного, мы просто введем новый параметр p, который можно использовать для ввода пароля. Если предоставленное значение соответствует нашему паролю, в противном случае функция не будет выполняться.

Теперь он защищен паролем, но теперь в нем 70 символов, так что давайте вернемся к его сокращению.
Мы будем использовать так называемый тернарный оператор, в основном это сокращение для блока if else.
Normal:if ($movie == 'marvel'){echo 'y'} else{'n'}With ternary operator:($movie == 'marvel' ? echo 'y' : echo 'n')
Используя тернарный оператор, мы сократили 10 символов

Вы знаете, что ... мы можем использовать $_GET[p] вместо $_GET['p']. Да, PHP позволяет это, и мы можем просто так удалить еще 8 символов. Кроме того, мы можем удалить ненужное пустое пространство, что даст нам следующее

Ура! В нем всего 47 символов, можем ли мы его сократить? Да!
На самом деле я застрял на этом этапе, но затем Йоханес указал на действительно изящный трюк, вместо использования тернарного оператора мы можем просто сделать это.
condition&&executeCode
Если условие выполнено, будет выполнен код, следующий за &&. Не путайте, это всего лишь оператор И;)

Большой! Сейчас в нем 45 символов.
На самом деле, эта статья не о лучших практиках, а о написании крошечной веб-оболочки, поэтому давайте заменим password на _
Это уменьшает общий размер до 38.
Еще один забавный факт о PHP! <? - это сокращение от <?php. Да, по умолчанию он выключен, но, к счастью, <?= разрешен.
Итак, у нас есть победитель!

Прекратите прокручивать и взгляните на это. Красиво, правда?
Я написал еще один, чуть круче, он у меня на Github.
Что ж, на сегодня все. Хорошего дня!