
Golang के go get कमांड में रिमोट कमांड निष्पादन का शोषण
Golang के go get कमांड में रिमोट कमांड निष्पादन के लिए शोषण (Exploit)।
जब आप go get के माध्यम से कोई पैकेज प्राप्त करते हैं, तो Go को इस तरह डिज़ाइन किया गया है कि वह पैकेज को उससे कोई कोड चलाए बिना बनाता और इंस्टॉल करता है। इसका उद्देश्य यह है कि आप बिना किसी भरोसे के Go पैकेज को सुरक्षित रूप से प्राप्त, बनाया और इंस्टॉल कर सकते हैं। सिद्धांत रूप में, यह Go टूलचेन के लिए एक सरल कार्य प्रतीत होता है, लेकिन वास्तविकता में यह एक वास्तविक चुनौती है। go get बहुत कुछ करता है, जिसमें तृतीय-पक्ष टूल जैसे git और clang को ऐसे तरीकों से शामिल करना शामिल है जो पैकेज कॉन्फ़िगरेशन से अत्यधिक प्रभावित होते हैं। यह सुनिश्चित करना कि ये कॉलिंग सुरक्षित हैं, एक कठिन लड़ाई है जिसे Go ने अभी तक पूरी तरह से नहीं जीता है।
जब cgo सक्षम होता है, तो "go get" के दौरान बिल्ड चरण होस्ट C कंपाइलर, gcc या clang को बुलाता है, और Go स्रोत फ़ाइलों में निर्दिष्ट कंपाइलर फ़्लैग जोड़ता है। और दोनों एक प्लगइन तंत्र का समर्थन करते हैं जिसमें एक शेयर्ड-लाइब्रेरी प्लगइन को कंपाइलर में लोड किया जाता है, जैसा कि कंपाइलर फ़्लैग्स द्वारा निर्देशित किया जाता है। इसका मतलब है कि एक Go पैकेज रिपॉजिटरी में फ़ाइल के साथ-साथ एक Go स्रोत फ़ाइल हो सकती है जो (उदाहरण के लिए) कहती है, जिससे बिल्ड के दौरान आक्रमण प्लगइन होस्ट C कंपाइलर में लोड हो जाता है। और प्लगइन्स होस्ट सिस्टम तक उनकी पहुंच में पूरी तरह से अप्रतिबंधित हैं।
gccclangexploit.so// #cgo CFLAGS: -fplugin=exploit.sogccclangGo 1.8.7 से पहले, Go 1.9.x 1.9.4 से पहले, और Go 1.10 से पहले के प्री-रिलीज़ (Go 1.10rc2 से पहले) में, go get सोर्स कोड बिल्ड के दौरान रिमोट कमांड निष्पादन की अनुमति देता है, क्योंकि -fplugin= और -plugin= आर्गुमेंट्स को ब्लॉक नहीं किया गया था।
Exploit के लिए हमें अपने दुर्भावनापूर्ण पैकेज को होस्ट करना होगा। हमें TLS और मान्य प्रमाणपत्र श्रृंखला वाली एक वेबसाइट चाहिए। ऐसा करने का एक आसान तरीका github का उपयोग करना है।
फिर आपको एक दुर्भावनापूर्ण प्लगइन/.so फ़ाइल की आवश्यकता होगी। exploit.c में कोड इसमें आपकी मदद करेगा।
नोट: exploit.c में निम्नलिखित कोड को अपने कमांड के अनुसार बदलें
void exploit() {
system("<Your CMD>");
}
नोट: इस फ़ाइल को अपने पीड़ित की मशीन/पीसी आर्किटेक्चर के अनुसार कंपाइल करें
आप निम्नलिखित कमांड का उपयोग करके exploit.so बना सकते हैं:
gcc -shared -o exploit.so -fPIC exploit.c
एक बार जब आप अपना पूरा पेलोड Github पर होस्ट कर लेते हैं, तो आप पीड़ित को पैकेज लिंक पास करने में सक्षम होना चाहिए।