WWW2Exec - .dtors & .fini_array
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
आजकल एक बाइनरी में .dtors सेक्शन मिलना बहुत अजीब है!
Destructor वे फ़ंक्शन हैं जो कार्यक्रम समाप्त होने से पहले (जब main
फ़ंक्शन लौटता है) निष्पादित होते हैं।
इन फ़ंक्शनों के पते बाइनरी के .dtors
सेक्शन के अंदर संग्रहीत होते हैं और इसलिए, यदि आप __DTOR_END__
में shellcode के लिए पता लिखने में सफल होते हैं, तो वह कार्यक्रम समाप्त होने से पहले निष्पादित होगा।
इस सेक्शन का पता प्राप्त करें:
आमतौर पर आप DTOR मार्कर ffffffff
और 00000000
के बीच पाएंगे। इसलिए यदि आप केवल उन मानों को देखते हैं, तो इसका मतलब है कि कोई फंक्शन रजिस्टर नहीं है। इसलिए 00000000
को shellcode के पते से overwrite करें ताकि इसे निष्पादित किया जा सके।
बिल्कुल, आपको पहले shellcode को स्टोर करने के लिए एक स्थान खोजना होगा ताकि बाद में इसे कॉल किया जा सके।
आधारभूत रूप से यह एक संरचना है जिसमें फंक्शन होते हैं जो प्रोग्राम समाप्त होने से पहले कॉल किए जाएंगे, जैसे .dtors
। यह दिलचस्प है यदि आप अपने shellcode को केवल एक पते पर कूदकर कॉल कर सकते हैं, या उन मामलों में जहां आपको फिर से main
पर वापस जाना है ताकि दूसरी बार कमजोरियों का शोषण किया जा सके।
ध्यान दें कि जब .fini_array
से कोई फ़ंक्शन निष्पादित होता है, तो यह अगले फ़ंक्शन पर चला जाता है, इसलिए इसे कई बार निष्पादित नहीं किया जाएगा (अनंत लूप को रोकना), लेकिन यह केवल आपको यहाँ रखे गए फ़ंक्शन का 1 निष्पादन देगा।
ध्यान दें कि .fini_array
में प्रविष्टियाँ विपरीत क्रम में कॉल की जाती हैं, इसलिए आप शायद अंतिम प्रविष्टि से लिखना शुरू करना चाहेंगे।
.fini_array
का दुरुपयोग करने के लिए अनंत लूप प्राप्त करने के लिए आप यहाँ क्या किया गया था, जांच सकते हैं: यदि आपके पास .fini_array
में कम से कम 2 प्रविष्टियाँ हैं, तो आप:
अपने पहले लिखने का उपयोग करके कमजोर अनियंत्रित लिखने वाले फ़ंक्शन को फिर से कॉल कर सकते हैं
फिर, __libc_csu_fini
(वह फ़ंक्शन जो सभी .fini_array
फ़ंक्शनों को कॉल कर रहा है) द्वारा स्टैक में संग्रहीत लौटने के पते की गणना करें और वहाँ __libc_csu_fini
का पता डालें
इससे __libc_csu_fini
फिर से खुद को कॉल करेगा, जिससे .fini_array
फ़ंक्शन फिर से निष्पादित होंगे, जो कमजोर WWW फ़ंक्शन को 2 बार कॉल करेगा: एक बार अनियंत्रित लिखने के लिए और एक बार फिर से स्टैक पर __libc_csu_fini
के लौटने के पते को ओवरराइट करने के लिए ताकि यह फिर से खुद को कॉल कर सके।
ध्यान दें कि पूर्ण RELRO** के साथ, .fini_array
अनुभाग पढ़ने के लिए केवल बना दिया गया है। नवीनतम संस्करणों में, [आंशिक RELRO] के साथ भी .fini_array
अनुभाग पढ़ने के लिए केवल बना दिया गया है।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)