BF Forked & Threaded Stack Canaries
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)
यदि आप एक बाइनरी का सामना कर रहे हैं जो एक कैनरी और PIE (पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल) द्वारा सुरक्षित है, तो आपको शायद उन्हें बायपास करने का एक तरीका खोजने की आवश्यकता है।
ध्यान दें कि checksec
यह नहीं पहचान सकता है कि एक बाइनरी कैनरी द्वारा सुरक्षित है यदि इसे स्थिर रूप से संकलित किया गया है और यह फ़ंक्शन की पहचान करने में असमर्थ है।
हालांकि, आप इसे मैन्युअल रूप से देख सकते हैं यदि आप पाते हैं कि एक मान फ़ंक्शन कॉल की शुरुआत में स्टैक में सहेजा गया है और इस मान की जांच निकासी से पहले की जाती है।
एक साधारण कैनरी को बायपास करने का सबसे अच्छा तरीका है यदि बाइनरी एक प्रोग्राम है जो हर बार जब आप इसके साथ एक नया कनेक्शन स्थापित करते हैं तो चाइल्ड प्रोसेस को फोर्क करता है (नेटवर्क सेवा), क्योंकि हर बार जब आप इससे कनेक्ट होते हैं तो वही कैनरी का उपयोग किया जाएगा।
फिर, कैनरी को बायपास करने का सबसे अच्छा तरीका है बस इसे चर द्वारा चर ब्रूट-फोर्स करना, और आप यह पता लगा सकते हैं कि क्या अनुमानित कैनरी बाइट सही थी यह जांचकर कि क्या प्रोग्राम क्रैश हुआ है या अपनी नियमित धारा जारी रखता है। इस उदाहरण में फ़ंक्शन 8 बाइट्स कैनरी (x64) को ब्रूट-फोर्स करता है और एक सही अनुमानित बाइट और एक खराब बाइट के बीच अंतर करता है बस जांचकर कि क्या सर्वर द्वारा एक प्रतिक्रिया वापस भेजी गई है (दूसरी स्थिति में अन्य तरीके हो सकते हैं जैसे try/except का उपयोग करना):
यह उदाहरण 64 बिट्स के लिए लागू किया गया है लेकिन इसे 32 बिट्स के लिए आसानी से लागू किया जा सकता है।
यह 32 बिट्स के लिए लागू किया गया है, लेकिन इसे आसानी से 64 बिट्स में बदला जा सकता है। इसके अलावा, इस उदाहरण के लिए कार्यक्रम ने पहले इनपुट के आकार को इंगित करने के लिए एक बाइट की अपेक्षा की और पेलोड।
एक ही प्रक्रिया के थ्रेड भी एक ही कैनरी टोकन साझा करेंगे, इसलिए यह संभव होगा कि यदि बाइनरी हर बार हमले के होने पर एक नया थ्रेड उत्पन्न करती है तो कैनरी को ब्रूट-फोर्स किया जा सके।
इसके अलावा, एक थ्रेडेड फ़ंक्शन में बफर ओवरफ्लो जो कैनरी से सुरक्षित है, का उपयोग TLS में संग्रहीत मास्टर कैनरी को संशोधित करने के लिए किया जा सकता है। इसका कारण यह है कि, यह संभव हो सकता है कि थ्रेड के स्टैक में एक bof के माध्यम से उस मेमोरी स्थिति तक पहुँचा जा सके जहाँ TLS संग्रहीत है (और इसलिए, कैनरी)। इसके परिणामस्वरूप, यह शमन बेकार है क्योंकि जांच दो समान (हालांकि संशोधित) कैनरी के साथ की जाती है। यह हमला इस लेख में किया गया है: http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads
इसके अलावा, https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015 की प्रस्तुति देखें जो बताती है कि आमतौर पर TLS को mmap
द्वारा संग्रहीत किया जाता है और जब एक थ्रेड का स्टैक बनाया जाता है तो यह भी mmap
द्वारा उत्पन्न होता है, जो पिछले लेख में दिखाए गए ओवरफ्लो की अनुमति दे सकता है।
64 bits, no PIE, nx, BF canary, write in some memory a ROP to call execve
and jump there.