WWW2Exec - .dtors & .fini_array

हैकट्रिक्स का समर्थन करें

.dtors

आजकल किसी भी बाइनरी में .dtors सेक्शन पाना बहुत अजीब है!

डिस्ट्रक्टर्स वे फ़ंक्शन हैं जो प्रोग्राम समाप्त होने से पहले चलाए जाते हैं (जब main फ़ंक्शन वापस लौटता है)। इन फ़ंक्शनों के पते बाइनरी के .dtors सेक्शन में संग्रहीत होते हैं और इसलिए, यदि आप शेलकोड में पते को लिखने में सफल होते हैं __DTOR_END__ , तो वह प्रोग्राम समाप्त होने से पहले चलाया जाएगा

इस सेक्शन का पता प्राप्त करें:

objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”

सामान्यत: आपको DTOR मार्कर के बीच मान ffffffff और 00000000 के बीच पाए जाएंगे। तो अगर आप सिर्फ उन मानों को देखते हैं, तो इसका मतलब है कि वहाँ कोई फ़ंक्शन रजिस्टर नहीं है। इसलिए 00000000 को शैलकोड के पते से ओवरराइट करें ताकि इसे निष्पादित किया जा सके।

बिल्कुल, पहले आपको शैलकोड को संग्रहित करने के लिए एक स्थान खोजना होगा ताकि आप बाद में इसे बुला सकें।

.fini_array

मूल रूप से यह एक संरचना है जिसमें फ़ंक्शन होते हैं जो कार्यक्रम समाप्त होने से पहले बुलाए जाएंगे, जैसे .dtors। यह दिलचस्प है अगर आप अपने शैलकोड को बस एक पते पर जाकर बुला सकते हैं, या उन मामलों में जहाँ आपको main पर वापस जाने की आवश्यकता होती है ताकि आप सुरक्षा दोष का दूसरी बार शारण कर सकें

objdump -s -j .fini_array ./greeting

./greeting:     file format elf32-i386

Contents of section .fini_array:
8049934 a0850408

#Put your address in 0x8049934

शाश्वत लूप

.fini_array का दुरुपयोग करने के लिए एक शाश्वत लूप प्राप्त करने के लिए आप यहाँ क्या किया गया था यह जांच सकते हैं: यदि आपके पास कम से कम 2 प्रविष्टियाँ .fini_array में हैं, तो आप:

  • अपनी पहली लेखन का उपयोग करें विकल्पी लेखन कार्य को फिर से बुलाने के लिए

  • फिर, __libc_csu_fini द्वारा संग्रहित स्टैक में वापसी पता करें (जो सभी .fini_array फ़ंक्शन को बुलाने वाला है) और वहाँ __libc_csu_fini का पता डालें

  • इससे __libc_csu_fini खुद को फिर से बुलाएगा और .fini_array फ़ंक्शन को फिर से बुलाएगा जो विकल्पी WWW फ़ंक्शन को 2 बार बुलाएगा: एक बार के लिए विकल्पी लेखन और एक और बार __libc_csu_fini के वापसी पते को फिर से ओवरराइट करने के लिए स्टैक पर अपने आप को फिर से बुलाने के लिए.

पूर्ण RELRO** के साथ ध्यान दें,** खंड .fini_array को केवल पढ़ने योग्य बनाया जाता है। नवीनतम संस्करणों में, [आंशिक RELRO] के साथ खंड .fini_array को केवल पढ़ने योग्य बनाया जाता है।

HackTricks का समर्थन करें

Last updated