House of Roman
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)
यह एक बहुत ही दिलचस्प तकनीक थी जिसने नकली फास्टबिन, अनसॉर्टेड_बिन हमले और सापेक्ष ओवरराइट के माध्यम से RCE की अनुमति दी। हालाँकि इसे पैच किया गया है।
You can find an example in https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c
सापेक्ष पॉइंटर्स का दुरुपयोग करके RCE प्राप्त करना
फास्टबिन और अनसॉर्टेड बिन पॉइंटर्स को संपादित करें
12 बिट की यादृच्छिकता को ब्रूट फोर्स किया जाना चाहिए (काम करने की 0.02% संभावना)
कई चंक्स बनाएं:
fastbin_victim
(0x60, offset 0): UAF चंक जिसे बाद में हीप पॉइंटर को LibC मान की ओर इंगित करने के लिए संपादित किया जाएगा।
chunk2
(0x80, offset 0x70): अच्छे संरेखण के लिए
main_arena_use
(0x80, offset 0x100)
relative_offset_heap
(0x60, offset 0x190): 'main_arena_use' चंक पर सापेक्ष ऑफसेट
फिर free(main_arena_use)
करें जो इस चंक को अनसॉर्टेड सूची में रखेगा और fd
और bk
पॉइंटर्स में main_arena + 0x68
का एक पॉइंटर प्राप्त करेगा।
अब एक नया चंक fake_libc_chunk(0x60)
आवंटित किया गया है क्योंकि इसमें fd
और bk
में main_arena + 0x68
के लिए पॉइंटर्स होंगे।
फिर relative_offset_heap
और fastbin_victim
को मुक्त किया जाता है।
fastbin_victim
का fd
relative_offset_heap
की ओर इशारा करता है
relative_offset_heap
fake_libc_chunk
से दूरी का एक ऑफसेट है, जिसमें main_arena + 0x68
की ओर एक पॉइंटर होता है
बस fastbin_victim.fd
के अंतिम बाइट को बदलकर, fastbin_victim points
को main_arena + 0x68
की ओर इशारा करना संभव है
पिछले कार्यों के लिए, हमलावर को fastbin_victim
के fd पॉइंटर को संशोधित करने में सक्षम होना चाहिए।
फिर, main_arena + 0x68
इतना दिलचस्प नहीं है, इसलिए इसे संशोधित करते हैं ताकि पॉइंटर __malloc_hook
की ओर इशारा करे।
ध्यान दें कि __memalign_hook
आमतौर पर 0x7f
से शुरू होता है और इसके पहले शून्य होते हैं, फिर इसे 0x70
फास्ट बिन में एक मान के रूप में फेक करना संभव है। क्योंकि पते के अंतिम 4 बिट रैंडम होते हैं, इसलिए मान के अंत में इशारा करने के लिए 2^4=16
संभावनाएँ होती हैं। इसलिए यहां एक BF हमला किया जाता है ताकि चंक इस तरह समाप्त हो: 0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)
।
(बाकी बाइट्स के बारे में अधिक जानकारी के लिए how2heap उदाहरण में व्याख्या देखें)। यदि BF काम नहीं करता है, तो प्रोग्राम बस क्रैश हो जाता है (इसलिए फिर से शुरू करें जब तक यह काम न करे)।
फिर, 2 mallocs किए जाते हैं ताकि 2 प्रारंभिक फास्ट बिन चंक्स को हटाया जा सके और एक तीसरा आवंटित किया जाता है ताकि __malloc_hook:
में एक चंक प्राप्त किया जा सके।
अधिक जानकारी के लिए आप देख सकते हैं:
Unsorted Bin Attackलेकिन मूल रूप से यह chunk->bk
में निर्दिष्ट किसी भी स्थान पर main_arena + 0x68
लिखने की अनुमति देता है। और हमले के लिए हम __malloc_hook
चुनते हैं। फिर, इसे ओवरराइट करने के बाद, हम एक सापेक्ष ओवरराइट का उपयोग करेंगे) एक one_gadget
की ओर इशारा करने के लिए।
इसके लिए हम एक चंक प्राप्त करना शुरू करते हैं और इसे unsorted bin में डालते हैं:
Use an UAF in this chunk to point unsorted_bin_ptr->bk
to the address of __malloc_hook
(हमने इसे पहले ब्रूट फोर्स किया था)।
ध्यान दें कि यह हमला अनसॉर्टेड बिन को भ्रष्ट करता है (इसलिए छोटे और बड़े भी)। इसलिए हम केवल अब फास्ट बिन से आवंटन का उपयोग कर सकते हैं (एक अधिक जटिल प्रोग्राम अन्य आवंटन कर सकता है और क्रैश हो सकता है), और इसे ट्रिगर करने के लिए हमें उसी आकार का आवंटन करना होगा या प्रोग्राम क्रैश हो जाएगा।
तो, __malloc_hook
में main_arena + 0x68
के लिखने को ट्रिगर करने के लिए, हम unsorted_bin_ptr->bk
में __malloc_hook
सेट करने के बाद बस यह करने की आवश्यकता है: malloc(0x80)
पहले चरण में, हम __malloc_hook
वाले एक चंक को नियंत्रित करने में सफल रहे (चर malloc_hook_chunk
में) और दूसरे चरण में, हम यहां main_arena + 0x68
लिखने में सफल रहे।
अब, हम malloc_hook_chunk
में एक आंशिक ओवरराइट का दुरुपयोग करते हैं ताकि हम वहां लिखे गए libc पते (main_arena + 0x68
) का उपयोग करके एक one_gadget
पते की ओर इशारा कर सकें।
यहां 12 बिट की यादृच्छिकता को ब्रूटफोर्स करना आवश्यक है (अधिक जानकारी के लिए how2heap उदाहरण)।
अंत में, एक बार सही पता ओवरराइट हो जाने पर, malloc
कॉल करें और one_gadget
को ट्रिगर करें।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)