मेरी बिल्ली की मदद से किसी फ़ाइल के परमिट बदलें


56
root@system:~# less myfile
-bash: /bin/less: Input/output error

रूट फाइलसिस्टम मृत है। लेकिन मेरी बिल्ली अभी भी जीवित है (मेरी याद में):

root@system:~# cat > /tmp/somefile
C^d
root@system:~#

हालांकि वह अकेला है, उसके सभी दोस्त चले गए हैं:

root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error

प्रणाली अभी भी चल रही है, और अपने उद्देश्य को पूरा कर रही है। मुझे पता है, मुझे पता है, इस प्रणाली को नीचे लाने और रूट ड्राइव को बदलने के लिए केवल एकमात्र प्रतिक्रिया है। दुर्भाग्य से यह एक विकल्प नहीं है क्योंकि इसमें बहुत समय और पैसा खर्च होता है। इसके अलावा, यह मेरी बिल्ली को मार देगा, और यह मुझे दुखी करेगा।

मैंने उसे एक डोनर से उसके सामान्य दोस्त लाने के बारे में सोचा है। मेरी हिम्मत नहीं हुई कि मैं उन्हें डांट दूँ, अगर ssh इसे लोड करने की कोशिश करता है और लाइन काट देता है (बाइनरी वैसे भी चली जाती है)। यह मेरी बिल्ली के चचेरे भाई के लिए एक नौकरी की तरह लगता है:

root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found

दुर्भाग्य से वह लंबे समय से चला गया है।

अब, मैं अपनी बिल्ली को फिर से जीवित करने के लिए एक अनुष्ठान करने की कोशिश कर सकता हूं:

cat > netcat < /dev/tcp/localhost/9999

और उस तरह काम किया। वह लगभग जीवित है:

root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied

उसे बस जीवन की एक छोटी सी चिंगारी चाहिए। वह छोटा सा +xजादू संयोग जिसे मैं फिलहाल याद नहीं कर सकता।

क्या आप मेरी बिल्ली के दोस्तों को वापस लाने में मेरी सहायता कर सकते हैं?


3
क्या आप /lib/ld-linux.so.2 ./netcat(या आपके सिस्टम के समतुल्य) चला सकते हैं और कुछ प्राप्त कर सकते हैं ?
माइकल होमर

4
यह भी: यह कौन सा ऑपरेटिंग सिस्टम है? क्या आपके पास कोई vfat या NTFS फाइलसिस्टम आरोहित है? नेटवर्क फाइल सिस्टम? विभाजन आप की सामग्री को मिटा सकते हैं? क्या निष्पादन की अनुमति के साथ कोई सुलभ फाइलें हैं?
माइकल होमर

3
"इसके अलावा, यह मेरी बिल्ली को मार देगा, और यह मुझे दुखी करेगा।" - मैंने हमेशा कहा था कि "इस के उत्पादन के दौरान कोई किडनी को नुकसान नहीं पहुँचाया गया था" सिर्फ एक कहावत थी, लेकिन अच्छी तरह से ...
रगड़

7
मुझे पूरी तरह से इन सभी बिल्ली
उपमाओं के लिए इसे उभारना पड़ा

2
गरीब बिल्ली, मुझे आशा है कि वह ठीक है :(
बिल्ली

जवाबों:


37

आपकी स्थिति के सटीक मापदंडों के आधार पर, कई संभावनाएं हैं। मैं लागू होने वाले उदाहरणों में लिनक्स को संभालने जा रहा हूं, लेकिन अधिकांश मामलों में अन्य प्लेटफार्मों पर समान कार्यक्षमता मौजूद है।

  • आप अपने लिए एक निष्पादन योग्य चलाने के लिए गतिशील लोडर प्राप्त करने में सक्षम हो सकते हैं। मान लिया जाए catकि गतिशील रूप से जुड़ा हुआ है, तो आपके प्लेटफ़ॉर्म के समतुल्य होने /lib/ld-linux.so.2की संभावना स्मृति में भी होगी और इस प्रकार एक बाइनरी चलाने के लिए उपयोग करने योग्य:

    $ /lib64/ld-linux-x86-64.so.2 ./chmod
    chmod: missing operand

    आपके पास इनमें से कई (32- और 64-बिट होने की संभावना है) और कई प्रतियां उपलब्ध हो सकती हैं, या सिमिलिंक हो सकते हैं जिन्हें हल करने की आवश्यकता होती है। उनमें से एक काम कर सकता है।

  • यदि आपके पास एक माउंटेड vfat या NTFS फाइल सिस्टम है, या कोई अन्य जो सभी फाइलों को 777 के रूप में मानता है, तो आप वहां से अपना निष्पादन योग्य बना सकते हैं।

    $ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
  • यदि आपके पास एक माउंटेड नेटवर्क फाइल सिस्टम है, भले ही यह स्थानीय रूप से उपयुक्त न हो, तो आप रिमोट सिस्टम पर फाइलें बना सकते हैं और सामान्य रूप से उन का उपयोग कर सकते हैं।
  • यदि कोई माउंटेड पार्टीशन है, तो आप उस ड्राइव की सामग्री की परवाह नहीं करते हैं, जो अभी भी ज्यादातर काम कर रहा है, आप सामग्री को उसी फाइल सिस्टम की नई छवि के साथ बदल सकते हैं, जिसमें आप चाहते हैं कि निष्पादन योग्य युक्त फ़ाइल प्रकार - catइसके लिए ठीक होना चाहिए भूमिका आमतौर पर लोग उपयोग ddकरते हैं, और आप नेटवर्क पर छवि प्रदान कर सकते हैं।

    $ cat > /dev/sdb1 < ...

    यह एक प्रशंसनीय है, लेकिन इसमें बहुत सारे स्थान हैं जो इस बात पर निर्भर नहीं करते हैं कि वास्तव में उस विभाजन से अभी भी क्या है।

  • यदि कोई सुलभ फ़ाइल है जो किसी भी योग्य फ़ाइल सिस्टम पर अनुमति निष्पादित करती है, तो आप cat >सामग्री को अपने चयन के बाइनरी के साथ बदल सकते हैं।

    $ cat > ~/test.py < ...
  • चूँकि बैश अभी भी चल रहा है, आप गतिशील रूप से बाम प्लगइन को इस प्रक्रिया में लोड कर सकते हैं जो कि चामोद को उजागर करता है। विशेष रूप से, आप इंस्टॉल और लोडctypes.sh कर सकते हैं , जो बैश और फिर एक विदेशी फ़ंक्शन इंटरफ़ेस प्रदान करता है dlcall chmod ./netcat 511
  • आप foo.soअपने निर्माण की एक गतिशील पुस्तकालय फ़ाइल ला सकते हैं और फिर catअपनी ओर से इसे लोड कर सकते हैं LD_PRELOAD, जिससे आप मनमाने कोड को निष्पादित कर सकते हैं।

    $ LD_PRELOAD=./hack.so cat /dev/null

    यदि आप उदाहरण के लिए, अवरोधन करते हैं open:

    int open(const char *path, int flags, ...) {
        chmod(path, 0755);
        return -1;
    }

    फिर आप वहां जो कुछ भी करने की जरूरत है उसे कर सकते हैं।

मेरा सुझाव busyboxपहले आइटम (या वास्तव में, केवल आइटम) के रूप में एक सांख्यिकीय रूप से जुड़े निष्पादन योग्य में लाना होगा , ताकि आपके पास जो भी हैक करने के लिए आपको मिल रहा है, उसका पुन: उपयोग किए बिना आदेशों की पूरी श्रृंखला उपलब्ध हो।


3
पुन: "स्टेटिकली-लिंक्ड busybox": ध्यान दें कि sashविशेष रूप से इस तरह के उपयोग-केस के लिए डिज़ाइन किया गया था और चुटकी में अधिक आसानी से उपलब्ध हो सकता है (उदाहरण के लिए आप इसे पहले से इंस्टॉल कर सकते हैं, और कहीं कॉपी चल रही छोड़ सकते हैं तो यह सिस्टम में होने पर स्मृति में है। टूट जाता है ... या आप अपने पालतू जानवरों को खोद सकते हैं और मवेशियों का एक झुंड खरीद सकते हैं, मुझे लगता है)।
केविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.