Basic Stack Binary Exploitation Methodology
ELF मूल जानकारी
किसी भी चीज का उत्पीड़न शुरू करने से पहले, ELF बाइनरी के संरचना का हिस्सा समझना दिलचस्प है:
उत्पीड़न उपकरण
स्टैक ओवरफ्लो मेथडोलॉजी
इतनी सारी तकनीकों के साथ, प्रत्येक तकनीक कब उपयोगी होगी, उसका एक योजना रखना अच्छा है। ध्यान दें कि विभिन्न तकनीकों पर एक ही सुरक्षा उपाय प्रभाव डालेगा। आप प्रत्येक सुरक्षा अनुभाग में सुरक्षा उपायों को छलने के तरीके पा सकते हैं, लेकिन इस मेथडोलॉजी में नहीं।
फ्लो को नियंत्रित करना
किसी कार्यक्रम के फ्लो को नियंत्रित करने के विभिन्न तरीके हैं:
स्टैक ओवरफ्लो स्टैक से वापसी प्वाइंटर या EBP -> ESP -> EIP को ओवरराइट करना।
ओवरफ्लो को कारण बनाने के लिए एक पूर्णांक ओवरफ्लो का दुरुपयोग करना पड़ सकता है
या विशेषज्ञता को लिखने के लिए अनियमित लिखने के लिए अर्बिट्रे राइट्स + राइट वॉट व्हेयर टू एक्झीक्यूशन
फॉर्मेट स्ट्रिंग:
printf
का दुरुपयोग करना अनियमित सामग्री को अनियमित पतों में लिखने के लिए।एरे इंडेक्सिंग: एक खराब डिज़ाइन को दुरुपयोग करना जिससे कुछ एरे को नियंत्रित करने और एक अनियमित लिखने की संभावना हो।
ओवरफ्लो को कारण बनाने के लिए एक पूर्णांक ओवरफ्लो का दुरुपयोग करना पड़ सकता है
bof से WWW के माध्यम से ROP: एक बफर ओवरफ्लो का दुरुपयोग करना और एक ROP बनाने के लिए एक बफर ओवरफ्लो का दुरुपयोग करना और एक WWW प्राप्त करने की क्षमता प्राप्त करना।
आप व्हाट व्हेर टू एक्झीक्यूशन तकनीकों को निम्नलिखित में पा सकते हैं:
अनंत लूप
ध्यान देने योग्य एक बात यह है कि आम तौर पर किसी भी वंश्यता का केवल एक उत्पीड़न काफी नहीं हो सकता है, विशेष रूप से कुछ सुरक्षा उपायों को छलना होगा। इसलिए, एक एकल वंश्यता को कई बार एक ही बाइनरी के निष्पादन में उत्पीड़नीय बनाने के कुछ विकल्पों पर चर्चा करना दिलचस्प है:
ROP श्रृंखला में
मुख्य
फ़ंक्शन का पता लिखें या उस स्थान पर पता लिखें जहां वंश्यता हो रही है।एक उचित ROP श्रृंखला को नियंत्रित करने के लिए आप उस श्रृंखला में सभी क्रियाएँ कर सकते हैं
exit
पता लिखें जीओटी में (या किसी अन्य फ़ंक्शन को उपयोग करने के लिए जो बाइनरी खत्म होने से पहले उपयोग किया जाएगा) वंश्यता पर वापस जाने के लिए पताजैसा कि .fini_array** में स्पष्ट किया गया है,** यहाँ 2 फ़ंक्शन स्टोर करें, एक वन वल्न को फिर से बुलाने के लिए और एक वहाँ से**
__libc_csu_fini
** जो.fini_array
से फ़ंक्शन को फिर से बुलाएगा।
उत्पीड़न लक्ष्य
लक्ष्य: मौजूदा फ़ंक्शन को बुलाना
ret2win: कोड में एक फ़ंक्शन है जिसे आपको बुलाने की आवश्यकता है (शायद कुछ विशिष्ट पैरामीटर्स के साथ) ताकि झंडा प्राप्त कर सकें।
PIE के साथ एक bof में, आपको इसे छलना होगा
canary के साथ एक bof में, आपको इसे छलना होगा
यदि आपको सही से ret2win फ़ंक्शन को बुलाने के लिए कई पैरामीटर सेट करने की आवश्यकता है तो आप इस्तेमाल कर सकते हैं:
यदि पैरामीटर्स को तैयार करने के लिए पर्याप्त गैजेट्स हैं, तो एक ROP श्रृंखला
SROP (यदि आप इस सिस्टम को कॉल कर सकते हैं) एक बहुत सारे रजिस्टर्स को नियंत्रित करने के लिए
एक Write What Where के माध्यम से आप अन्य वल्न (bof नहीं) का दुरुपयोग करके
win
फ़ंक्शन को बुला सकते हैं।पॉइंटर्स रीडायरेक्टिंग: यदि स्टैक में एक फ़ंक्शन के पॉइंटर हैं जो बुलाया जाएगा या एक स्ट्रिंग है जो एक दिलचस्प फ़ंक्शन (सिस्टम या printf) द्वारा उपयोग किया जाएगा, तो उस पते को ओवरराइट करना संभव है।
अअनिटाइज़्ड वेरिएबल्स: आप कभी नहीं जान सकते।
लक्ष्य: RCE
शेलकोड के माध
वाया सिसकॉल्स
Ret2syscall:
execve
को बुलाने के लिए उपयोगी। आपको पैरामीटर्स के साथ विशिष्ट सिसकॉल को बुलाने के लिए गैजेट्स खोजने की आवश्यकता है।SROP ret2execve को तैयार करने के लिए उपयोगी हो सकता है।
वाया libc
Ret2lib: लाइब्रेरी से फ़ंक्शन को बुलाने के लिए उपयोगी (सामान्यत:
libc
से) जैसेsystem
के साथ कुछ तैयार किए गए तर्क (जैसे'/bin/sh'
)। आपको बाइनरी को उस लाइब्रेरी को लोड करने की आवश्यकता है जिसका फ़ंक्शन आप बुलाना चाहते हैं (सामान्यत: libc)।यदि स्थैतिक रूप से कंपाइल किया गया है और कोई PIE नहीं है, तो
system
और/bin/sh
का पता नहीं बदलेगा, इसलिए इन्हें स्थैतिक रूप से उपयोग करना संभव है।बिना ASLR और libc संस्करण को जानते हुए,
system
और/bin/sh
का पता नहीं बदलेगा, इसलिए इन्हें स्थैतिक रूप से उपयोग करना संभव है।ret2dlresolve
का उपयोग करेंsystem
का पता लगाने और इसे बुलाने के लिएASLR को बाइपास करें और
system
और'/bin/sh'
का पता लगाएं में।PIE को बाइपास करें
उपयोग किए गए
libc
संस्करण को खोजें (कुछ फ़ंक्शन पतों को लीक करें)आगे बढ़ने के लिए ASLR के पिछले स्थितियों की जांच करें।
वाया EBP/RBP
Stack Pivoting / EBP2Ret / EBP Chaining: ESP को नियंत्रित करने के लिए EBP में संग्रहित EBP के माध्यम से RET को नियंत्रित करें।
ओफ-बाई-वन स्टैक ओवरफ्लो के लिए उपयोगी
EIP को नियंत्रित करने का एक वैकल्पिक तरीका जब EIP को नियंत्रित करने के बजाय मेमोरी में पेलोड निर्मित करने और फिर उस पर जाने के लिए EBP के माध्यम से उस पर जाने के लिए।
विविध
Pointers Redirecting: यदि स्टैक में एक फ़ंक्शन के पॉइंटर या एक स्ट्रिंग के पॉइंटर है जो बुलाया जाएगा या जो एक दिलचस्प फ़ंक्शन (सिस्टम या प्रिंटफ़) द्वारा उपयोग किया जाएगा, तो उस पते को ओवरराइट करना संभव है।
Uninitialized variables: आप कभी नहीं जान सकते
Last updated