मैं लिनक्स में बफर ओवरफ्लो शोषण सीख रहा हूंx86 बाइनरीज़ मैं एएसएलआर को अक्षम करके और एनएक्स बिट और स्टैक कैनरी को अक्षम करके द्विआधारी संकलन करके उबंटू 12.04 वीएम में रूट खोल खोलने के लिए क्लासिक स्टैक को तोड़ रहा हूं।
मेरे निष्पादन के दौरान रिटर्न पता ओवरराइट हो रहा है और शेलकोड निष्पादित हो रहा है, लेकिन मुझे रूट खोल नहीं मिल रहा है, इसके परिणामस्वरूप यह एक बैश खोल में परिणाम देता है।
बैश सुरक्षा को कम करने के लिए, मैं zsh खोल का उपयोग कर रहा हूं और मैंने sh-> बैश प्रतीकात्मक लिंक हटा दिया है और / bin निर्देशिका में zsh shell के साथ sh का प्रतीकात्मक लिंक बनाया है
मैंने रूट द्वारा स्वामित्व वाली एक सेटुइड सक्षम बाइनरी (अन्य उपयोगकर्ता के लिए निष्पादन अनुमति) के साथ प्रयास किया है, लेकिन फिर भी मुझे रूट खोल नहीं मिल रहा है।
मैंने सी प्रोग्राम के साथ अपना खोल कोड सत्यापित किया है औरपरीक्षण कार्यक्रम (मेरे खोल कोड के) को संकलित करके और इसे सेट्यूइड सक्षम करने के बाद इसे निष्पादित करके। तो परीक्षण कार्यक्रम रूट खोल दे रहा है। लेकिन जब मैं बफर ओवरफ्लो के साथ एक ही शेलकोड का उपयोग करता हूं तो रूट रूट प्राप्त नहीं कर पा रहा हूं ..
जब मैं gdb में इस परिदृश्य को डीबग कर रहा हूं, ओवरफ्लो / बिन / zsh4 के दौरान निष्पादित हो रहा है लेकिन परिणामस्वरूप एक बैश खोल में परिणाम मिलता है।
यहां तक कि मैं एक के साथ रूट खोल पाने में सक्षम नहीं हूँlibc हमले पर भी लौटें। इसके परिणामस्वरूप एक बैश खोल भी होता है। मैंने उबंटू 12.04, उबंटू 11.04 और उबंटू 9 में इन चरणों का प्रयास किया है लेकिन फिर भी परिणाम एक जैसा है।
मैं इस क्षेत्र में शुरुआत कर रहा हूं। तो उपर्युक्त चरणों में से कुछ में मैंने कुछ गलतियां की हैं। तो आप में से कोई भी सलाह दे सकता है कि संभावित समस्या क्या हो सकती है और इसे कैसे हल किया जाए
उत्तर:
जवाब के लिए 3 № 1अंत में मैंने इस त्रुटि के कारण का पता लगाया।
मेरे निष्पादन के दौरान मेरा मूल विशेषाधिकार गिरा दिया गया थाक्योंकि मैंने किसी अन्य उपकरण पर काम करने के लिए प्रक्रिया प्रणाली स्तर के ptrace को अक्षम कर दिया था। मैंने ओवरराइट / proc / sys / कर्नेल / yama / ptrace_scope मान 0 पर लिखा था। यही कारण है कि मेरे लिए रूट खोल नहीं मिला।
मुझे यह जानकारी निष्पादन के मैन पेज से मिली (जिसे मैं शेलकोड बनाने के लिए उपयोग कर रहा था):
यदि प्रोग्राम पर सेट-उपयोगकर्ता-आईडी बिट सेट हैद्वारा इंगित फ़ाइल फ़ाइल नाम, और अंतर्निहित फ़ाइल सिस्टम nosuid घुड़सवार नहीं है (माउंट (2) के लिए MS_NOSUID ध्वज), और कॉलिंग प्रक्रिया नहीं है छेड़छाड़ की जा रही है, तो कॉलिंग प्रक्रिया का प्रभावी उपयोगकर्ता आईडी है प्रोग्राम फ़ाइल के मालिक के रूप में बदल गया। इसी प्रकार, कब प्रोग्राम फ़ाइल का सेट-समूह-आईडी बिट प्रभावी समूह आईडी सेट किया गया है कॉलिंग प्रक्रिया प्रोग्राम प्रोग्राम के समूह पर सेट है।
तो अब जब मैं ptrace_scope को अक्षम नहीं कर रहा हूं, तो मुझे रूट खोल मिल रहा है।
इस चर्चा का हिस्सा बनने के लिए धन्यवाद merlin2011 और naab।