Large Bin Attack
Reading time: 4 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Basic Information
एक बड़े बिन के बारे में अधिक जानकारी के लिए इस पृष्ठ को देखें:
आप how2heap - large bin attack में एक शानदार उदाहरण देख सकते हैं।
बुनियादी रूप से, यहाँ आप देख सकते हैं कि glibc (2.35) के नवीनतम "वर्तमान" संस्करण में, यह जांचा नहीं जाता है: P->bk_nextsize
जिससे एक बड़े बिन चंक के मान के साथ एक मनमाना पते को संशोधित करना संभव है यदि कुछ शर्तें पूरी होती हैं।
उस उदाहरण में आप निम्नलिखित शर्तें पा सकते हैं:
- एक बड़ा चंक आवंटित किया गया है
- पहले से छोटे एक बड़े चंक को उसी इंडेक्स में आवंटित किया गया है
- इसे बिन में पहले आना चाहिए
- (एक चंक शीर्ष चंक के साथ विलय को रोकने के लिए बनाया गया है)
- फिर, पहले बड़े चंक को मुक्त किया जाता है और इससे बड़ा एक नया चंक आवंटित किया जाता है -> Chunk1 बड़े बिन में जाता है
- फिर, दूसरे बड़े चंक को मुक्त किया जाता है
- अब, भेद्यता: हमलावर
chunk1->bk_nextsize
को[target-0x20]
में संशोधित कर सकता है - फिर, चंक 2 से बड़ा एक चंक आवंटित किया जाता है, इसलिए चंक2 बड़े बिन में डाला जाता है जो
chunk1->bk_nextsize->fd_nextsize
के पते को चंक2 के पते से ओवरराइट करता है
tip
अन्य संभावित परिदृश्य हैं, बात यह है कि बड़े बिन में एक चंक जोड़ना है जो बिन में वर्तमान X चंक से छोटा है, इसलिए इसे बिन में इसके ठीक पहले डाला जाना चाहिए, और हमें X के bk_nextsize
को संशोधित करने में सक्षम होना चाहिए क्योंकि वहीं छोटे चंक का पता लिखा जाएगा।
यह malloc से संबंधित कोड है। समझने के लिए टिप्पणियाँ जोड़ी गई हैं कि पता कैसे ओवरराइट किया गया:
/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck; // fwd = p1
bck = bck->bk; // bck = p1->bk
victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
}
यह libc के global_max_fast
वैश्विक चर को ओवरराइट करने के लिए उपयोग किया जा सकता है ताकि बड़े टुकड़ों के साथ एक तेज़ बिन हमले का शोषण किया जा सके।
आप इस हमले का एक और शानदार विवरण guyinatuxedo में पा सकते हैं।
अन्य उदाहरण
- La casa de papel. HackOn CTF 2024
- उसी स्थिति में बड़े बिन हमले के बारे में how2heap में।
- लिखने की प्राइमिटिव अधिक जटिल है, क्योंकि
global_max_fast
यहाँ बेकार है। - शोषण को समाप्त करने के लिए FSOP की आवश्यकता है।
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।