Basic Binary Exploitation Methodology

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

ELF मूल जानकारी

किसी भी चीज का उत्पीड़न शुरू करने से पहले ELF बाइनरी की संरचना का हिस्सा समझना दिलचस्प है:

pageELF Basic Information

उत्पीड़न उपकरण

pageExploiting Tools

स्टैक ओवरफ्लो मेथडोलॉजी

इतनी सारी तकनीकों के साथ, हर तकनीक कब उपयोगी होगी इसका एक योजना रखना अच्छा है। ध्यान दें कि विभिन्न सुरक्षा उपायों पर विभिन्न तकनीकों को प्रभावित किया जाएगा। आप प्रत्येक सुरक्षा खंड में सुरक्षा उपायों को छलना पा सकते हैं लेकिन इस उपकरण में नहीं।

नियंत्रण करना

किसी कार्यक्रम के नियंत्रण को अंत में करने के लिए विभिन्न तरीके हैं:

  • स्टैक ओवरफ्लो स्टैक से रिटर्न प्वाइंटर या EBP -> ESP -> EIP को ओवरराइट करना।

  • ओवरफ्लो को कारण बनाने के लिए एक पूर्णांक ओवरफ्लो का दुरुपयोग करना पड़ सकता है

  • या विशेष लिखें + लिखें क्या कहाँ से निष्पादन तक

  • फॉर्मेट स्ट्रिंग: printf का दुरुपयोग करके किसी भी पते पर विचारशील सामग्री लिखना।

  • एरे इंडेक्सिंग: एक खराब डिज़ाइन को दुरुपयोग करना ताकि कुछ एरे को नियंत्रित किया जा सके और एक विचारशील लेखन प्राप्त किया जा सके।

  • ओवरफ्लो को कारण बनाने के लिए एक पूर्णांक ओवरफ्लो का दुरुपयोग करना पड़ सकता है

  • bof से WWW के माध्यम से ROP: एक बफर ओवरफ्लो का दुरुपयोग करके एक ROP बनाने और एक WWW प्राप्त करने की क्षमता प्राप्त करने के लिए।

आप लिखें क्या कहाँ से निष्पादन तकनीकों को निम्नलिखित में पा सकते हैं:

urlhttps://github.com/HackTricks-wiki/hacktricks/blob/in/binary-exploitation/arbitrary-write-2-exec/README.md

अनंत लूप

ध्यान देने योग्य एक बात यह है कि आम तौर पर किसी भी एक भयानकता का एक उत्पीड़न पर्याप्त नहीं हो सकता है एक सफल उत्पीड़न को निष्पादित करने के लिए, विशेष रूप से कुछ सुरक्षा को छलना होगा। इसलिए, एक एकल भयानकता को कई बार एक ही बाइनरी के निष्पादन में एक सफल उत्पीड़न करने के लिए कुछ विकल्पों पर चर्चा करना दिलचस्प है:

  • ROP श्रृंखला में main फ़ंक्शन का पता या वहाँ पता लिखना

  • एक उचित ROP श्रृंखला को नियंत्रित करके आप उस श्रृंखला में सभी क्रियाएँ कर सकते हैं

  • exit पता GOT में लिखें (या किसी अन्य फ़ंक्शन का उपयोग करें जिसे बाइनरी द्वारा उपयोग किया जाता है समाप्त होने से पहले) वापस भयानकता पर जाने के लिए पता

  • जैसा कि .fini_array में स्पष्ट किया गया है, यहाँ 2 फ़ंक्शन संग्रहित करें, एक वुल्न को फिर से बुलाने के लिए और एक फ़ंक्शन को बुलाने के लिए __libc_csu_fini जो .fini_array से फिर से फ़ंक्शन को बुलाएगा।

उत्पीड़न लक्ष्य

लक्ष्य: मौजूदा फ़ंक्शन को बुलाना

  • ret2win: कोड में एक फ़ंक्शन है जिसे आपको बुलाने की आवश्यकता है (शायद कुछ विशेष पैरामीटर्स के साथ) ताकि झंडा प्राप्त करें।

  • एक सामान्य bof बिना PIE और canary के, आपको बस स्टैक में संग्रहित रिटर्न पते में पता लिखने की आवश्यकता है।

  • PIE के साथ एक bof में, आपको इसे छलना होगा

  • canary के साथ एक bof में, आपको इसे छलना होगा

  • यदि आपको ret2win फ़ंक्शन को सही ढंग से बुलाने के लिए कई पैरामीटर सेट करने की आवश्यकता है तो आप इस्तेमाल कर सकते हैं:

  • यदि पैरामीटर्स को तैयार करने के लिए पर्याप्त गैजेट्स हैं तो एक ROP श्रृंखला

  • SROP (यदि आप इस सिगनल को कॉल कर सकते हैं) जिससे आपको कई रजिस्टर्स को नियंत्रित करने में मदद मिल सकती है

  • ret2csu और ret2vdso से गैजेट्स जिससे आप कई रजिस्टर्स को नियंत्रित कर सकते हैं

  • एक Write What Where के माध्यम से आप अन्य वल्न्स (बफर ओवरफ्लो नहीं) का दुरुपयोग करके win फ़ंक्शन को बुला सकते हैं।

  • पॉइंटर्स रीडायरेक्टिंग: यदि स्टैक में एक फ़ंक्शन के पॉइंटर हैं जो बुलाया जाएगा या एक स्ट्रिंग है जो एक दिलचस्प फ़ंक्शन (सिस्टम या printf) द्वारा उपयोग किया जाएगा, तो उस पते को ओवरराइट करना संभव है।

  • ASLR या PIE पतों को प्रभावित कर सकता है।

  • अअनितीयकृत वेरिएबल्स: आप कभी नहीं जान सकते।

लक्ष्य: RCE

शेलकोड के माध्यम से, यदि nx अक्षम है या शेलकोड को ROP के साथ मिश्रित करना:

  • [**(स्टैक) श

वाया सिसकॉल्स

  • Ret2syscall: इस्तेमाल होता है execve को कॉल करने के लिए विचित्र कमांड्स चलाने के लिए। आपको स्पष्ट सिसकॉल को पैरामीटर्स के साथ कॉल करने के लिए गैजेट्स खोजने की आवश्यकता है

  • अगर ASLR या PIE सक्षम हैं तो आपको उन्हें हराना होगा ROP गैजेट्स का उपयोग करने के लिए बाइनरी या पुस्तकालय से।

  • SROP तैयार करने के लिए उपयोगी हो सकता है ret2execve

  • ret2csu और ret2vdso से गैजेट्स कई रजिस्टर्स को नियंत्रित करने के लिए

वाया libc

  • Ret2lib: इस्तेमाल होता है लाइब्रेरी से फ़ंक्शन को कॉल करने के लिए (सामान्यत: libc से) जैसे system के साथ कुछ तैयार पैरामीटर्स के साथ (जैसे '/bin/sh')। आपको बाइनरी को लाइब्रेरी लोड करने की आवश्यकता है जिसमें आपको कॉल करना है फ़ंक्शन (सामान्यत: libc)।

  • अगर स्थायी रूप से कंपाइल किया गया है और कोई PIE नहीं है, तो system और /bin/sh का पता नहीं बदलेगा, इसलिए इन्हें स्थायी रूप से उपयोग करना संभव है।

  • बिना ASLR और लाइब्रेरी संस्करण को जानते हुए, system और /bin/sh का पता नहीं बदलेगा, इसलिए इन्हें स्थायी रूप से उपयोग करना संभव है।

  • ASLR के साथ लेकिन कोई PIE** नहीं, लाइब्रेरी को जानते हुए और बाइनरी का system** फ़ंक्शन उपयोग करते हुए यह संभव है कि आप system के पते पर जाएं GOT में '/bin/sh' के पते के साथ (आपको इसे समझने की आवश्यकता है)।

  • ASLR के साथ लेकिन PIE के बिना, लाइब्रेरी को जानते हुए और बाइनरी का system उपयोग न करते हुए:

  • ret2dlresolve का उपयोग करें system का पता लगाने और उसे कॉल करने के लिए

  • ASLR को बाइपास करें और system और '/bin/sh' का पता लगाएं मेमोरी में।

  • ASLR के साथ और PIE और लाइब्रेरी को नहीं जानते हुए: आपको चाहिए:

  • PIE को बाइपास करें

  • उपयोग किए गए libc संस्करण को खोजें (कुछ फ़ंक्शन पतों को लीक करें)

  • आगे बढ़ने के लिए ASLR के पिछले स्थितियों की जाँच करें

वाया EBP/RBP

  • Stack Pivoting / EBP2Ret / EBP Chaining: ESP को नियंत्रित करने के लिए एबीपी में संग्रहित ईबीपी के माध्यम से आरईटी को नियंत्रित करें।

  • ओफ-बाई-वन स्टैक ओवरफ्लो के लिए उपयोगी

  • ईआईपी को नियंत्रित करने के एक वैकल्पिक तरीके के रूप में उपयुक्त है जबकि ईआईपी को अभियांत्रिकी में पेडलोड निर्माण करने और फिर उस पर जाने के लिए ईबीपी के माध्यम से जंप करने के लिए।

विविध

  • Pointers Redirecting: यदि स्टैक में एक फ़ंक्शन के पॉइंटर हैं जो कॉल किया जाएगा या एक स्ट्रिंग है जो एक दिलचस्प फ़ंक्शन (सिस्टम या प्रिंटफ़) द्वारा उपयोग किया जाएगा, तो उस पते को ओवरराइट करना संभव है।

  • ASLR या PIE पतों को प्रभावित कर सकते हैं।

  • Uninitialized variables: आप कभी नहीं जान सकते

Last updated