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