.. | ||
tools | ||
elf-tricks.md | ||
README.md |
मूल बाइनरी उत्पीड़न मेथडोलॉजी
{% hint style="success" %}
AWS हैकिंग सीखें और अभ्यास करें:HackTricks प्रशिक्षण AWS रेड टीम एक्सपर्ट (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks प्रशिक्षण GCP रेड टीम एक्सपर्ट (GRTE)
हैकट्रिक्स का समर्थन करें
- सदस्यता योजनाएं की जाँच करें!
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @hacktricks_live** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स](https://github.com/carlospolop/hacktricks) और हैकट्रिक्स क्लाउड github रेपो में PR जमा करके।
ELF मूल जानकारी
किसी भी चीज का उत्पीड़न शुरू करने से पहले, ELF बाइनरी के संरचना का हिस्सा समझना दिलचस्प है:
{% content-ref url="elf-tricks.md" %} elf-tricks.md {% endcontent-ref %}
उत्पीड़न उपकरण
{% content-ref url="tools/" %} tools {% endcontent-ref %}
स्टैक ओवरफ्लो मेथडोलॉजी
इतनी सारी तकनीकों के साथ, प्रत्येक तकनीक कब उपयोगी होगी, उसका एक योजना रखना अच्छा है। ध्यान दें कि विभिन्न तकनीकों पर एक ही सुरक्षा उपाय प्रभाव डालेगा। आप प्रत्येक सुरक्षा अनुभाग में सुरक्षा उपायों को छलने के तरीके पा सकते हैं, लेकिन इस मेथडोलॉजी में नहीं।
फ्लो को नियंत्रित करना
किसी कार्यक्रम के फ्लो को नियंत्रित करने के विभिन्न तरीके हैं:
- स्टैक ओवरफ्लो स्टैक से वापसी प्वाइंटर या EBP -> ESP -> EIP को ओवरराइट करना।
- ओवरफ्लो को कारण बनाने के लिए एक पूर्णांक ओवरफ्लो का दुरुपयोग करना पड़ सकता है
- या विशेषज्ञता को लिखने के लिए अनियमित लिखने के लिए अर्बिट्रे राइट्स + राइट वॉट व्हेयर टू एक्झीक्यूशन
- फॉर्मेट स्ट्रिंग:
printf
का दुरुपयोग करना अनियमित सामग्री को अनियमित पतों में लिखने के लिए। - एरे इंडेक्सिंग: एक खराब डिज़ाइन को दुरुपयोग करना जिससे कुछ एरे को नियंत्रित करने और एक अनियमित लिखने की संभावना हो।
- ओवरफ्लो को कारण बनाने के लिए एक पूर्णांक ओवरफ्लो का दुरुपयोग करना पड़ सकता है
- bof से WWW के माध्यम से ROP: एक बफर ओवरफ्लो का दुरुपयोग करना और एक ROP बनाने के लिए एक बफर ओवरफ्लो का दुरुपयोग करना और एक WWW प्राप्त करने की क्षमता प्राप्त करना।
आप व्हाट व्हेर टू एक्झीक्यूशन तकनीकों को निम्नलिखित में पा सकते हैं:
{% content-ref url="../arbitrary-write-2-exec/" %} arbitrary-write-2-exec {% endcontent-ref %}
अनंत लूप
ध्यान देने योग्य एक बात यह है कि आम तौर पर किसी भी वंश्यता का केवल एक उत्पीड़न काफी नहीं हो सकता है, विशेष रूप से कुछ सुरक्षा उपायों को छलना होगा। इसलिए, एक एकल वंश्यता को कई बार एक ही बाइनरी के निष्पादन में उत्पीड़नीय बनाने के कुछ विकल्पों पर चर्चा करना दिलचस्प है:
- ROP श्रृंखला में
मुख्य
फ़ंक्शन का पता लिखें या उस स्थान पर पता लिखें जहां वंश्यता हो रही है। - एक उचित ROP श्रृंखला को नियंत्रित करने के लिए आप उस श्रृंखला में सभी क्रियाएँ कर सकते हैं
exit
पता लिखें जीओटी में (या किसी अन्य फ़ंक्शन को उपयोग करने के लिए जो बाइनरी खत्म होने से पहले उपयोग किया जाएगा) वंश्यता पर वापस जाने के लिए पता- जैसा कि .fini_array** में स्पष्ट किया गया है,** यहाँ 2 फ़ंक्शन स्टोर करें, एक वन वल्न को फिर से बुलाने के लिए और एक वहाँ से**
__libc_csu_fini
** जो.fini_array
से फ़ंक्शन को फिर से बुलाएगा।
उत्पीड़न लक्ष्य
लक्ष्य: मौजूदा फ़ंक्शन को बुलाना
- ret2win: कोड में एक फ़ंक्शन है जिसे आपको बुलाने की आवश्यकता है (शायद कुछ विशिष्ट पैरामीटर्स के साथ) ताकि झंडा प्राप्त कर सकें।
- एक नियमित bof बिना PIE और canary के, आपको बस स्टैक में स्टोर किए गए वापसी पते में पता लिखने की आवश्यकता है।
- PIE के साथ एक bof में, आपको इसे छलना होगा
- canary के साथ एक bof में, आपको इसे छलना होगा
- यदि आपको सही से ret2win फ़ंक्शन को बुलाने के लिए कई पैरामीटर सेट करने की आवश्यकता है तो आप इस्तेमाल कर सकते हैं:
- यदि पैरामीटर्स को तैयार करने के लिए पर्याप्त गैजेट्स हैं, तो एक ROP श्रृंखला
- SROP (यदि आप इस सिस्टम को कॉल कर सकते हैं) एक बहुत सारे रजिस्टर्स को नियंत्रित करने के लिए
- ret2csu और ret2vdso से गैजेट्स कई रजिस्टर्स को नियंत्रित करने के लिए
- एक Write What Where के माध्यम से आप अन्य वल्न (bof नहीं) का दुरुपयोग करके
win
फ़ंक्शन को बुला सकते हैं। - पॉइंटर्स रीडायरेक्टिंग: यदि स्टैक में एक फ़ंक्शन के पॉइंटर हैं जो बुलाया जाएगा या एक स्ट्रिंग है जो एक दिलचस्प फ़ंक्शन (सिस्टम या printf) द्वारा उपयोग किया जाएगा, तो उस पते को ओवरराइट करना संभव है।
- ASLR या PIE पतों पर प्रभाव डाल सकता है।
- अअनिटाइज़्ड वेरिएबल्स: आप कभी नहीं जान सकते।
लक्ष्य: RCE
शेलकोड के माध
वाया सिसकॉल्स
- Ret2syscall:
execve
को बुलाने के लिए उपयोगी। आपको पैरामीटर्स के साथ विशिष्ट सिसकॉल को बुलाने के लिए गैजेट्स खोजने की आवश्यकता है। - यदि ASLR या PIE सक्षम हैं तो आपको उन्हें हराना होगा ROP गैजेट्स का उपयोग करने के लिए बाइनरी या लाइब्रेरी से।
- SROP ret2execve को तैयार करने के लिए उपयोगी हो सकता है।
- ret2csu और ret2vdso से कई रजिस्टर को नियंत्रित करने के लिए गैजेट्स।
वाया libc
- Ret2lib: लाइब्रेरी से फ़ंक्शन को बुलाने के लिए उपयोगी (सामान्यत:
libc
से) जैसेsystem
के साथ कुछ तैयार किए गए तर्क (जैसे'/bin/sh'
)। आपको बाइनरी को उस लाइब्रेरी को लोड करने की आवश्यकता है जिसका फ़ंक्शन आप बुलाना चाहते हैं (सामान्यत: libc)। - यदि स्थैतिक रूप से कंपाइल किया गया है और कोई PIE नहीं है, तो
system
और/bin/sh
का पता नहीं बदलेगा, इसलिए इन्हें स्थैतिक रूप से उपयोग करना संभव है। - बिना ASLR और libc संस्करण को जानते हुए,
system
और/bin/sh
का पता नहीं बदलेगा, इसलिए इन्हें स्थैतिक रूप से उपयोग करना संभव है। - ASLR के साथ लेकिन कोई PIE** नहीं, libc को जानते हुए और बाइनरी में
system
** फ़ंक्शन का उपयोग करते हुएsystem
के पते पर जाने के लिए GOT मेंret
करना संभव है'/bin/sh'
के पते में पैरामीटर (आपको इसे समझने की आवश्यकता है)। - ASLR के साथ लेकिन PIE के बिना, libc को जानते हुए और बाइनरी में
system
का उपयोग न करते हुए: ret2dlresolve
का उपयोग करेंsystem
का पता लगाने और इसे बुलाने के लिए- ASLR को बाइपास करें और
system
और'/bin/sh'
का पता लगाएं में। - ASLR के साथ और PIE के साथ और libc को नहीं जानते हुए: आपको चाहिए:
- PIE को बाइपास करें
- उपयोग किए गए
libc
संस्करण को खोजें (कुछ फ़ंक्शन पतों को लीक करें) - आगे बढ़ने के लिए ASLR के पिछले स्थितियों की जांच करें।
वाया EBP/RBP
- Stack Pivoting / EBP2Ret / EBP Chaining: ESP को नियंत्रित करने के लिए EBP में संग्रहित EBP के माध्यम से RET को नियंत्रित करें।
- ओफ-बाई-वन स्टैक ओवरफ्लो के लिए उपयोगी
- EIP को नियंत्रित करने का एक वैकल्पिक तरीका जब EIP को नियंत्रित करने के बजाय मेमोरी में पेलोड निर्मित करने और फिर उस पर जाने के लिए EBP के माध्यम से उस पर जाने के लिए।
विविध
- Pointers Redirecting: यदि स्टैक में एक फ़ंक्शन के पॉइंटर या एक स्ट्रिंग के पॉइंटर है जो बुलाया जाएगा या जो एक दिलचस्प फ़ंक्शन (सिस्टम या प्रिंटफ़) द्वारा उपयोग किया जाएगा, तो उस पते को ओवरराइट करना संभव है।
- ASLR या PIE पतों पर प्रभाव डाल सकते हैं।
- Uninitialized variables: आप कभी नहीं जान सकते