BROP - Blind Return Oriented Programming
मूल जानकारी
इस हमले का उद्देश्य है कि किसी भी वंशीय बाइनरी के बारे में कोई जानकारी के बिना एक आरओपी का दुरुपयोग किया जा सके। यह हमला निम्नलिखित स्थिति पर आधारित है:
एक स्टैक कमजोरी और उसे ट्रिगर करने के तरीके की जानकारी।
एक सर्वर एप्लिकेशन जो क्रैश होने के बाद पुनरारंभ होता है।
हमला
1. वंशीय ऑफसेट खोजें सर्वर के किसी खराबी की पहचान करने तक एक अधिक वर्ण भेजें
2. कैनरी को ब्रूट-फोर्स करें इसे लीक करने के लिए
3. स्टोर्ड आरबीपी और आरआईपी को ब्रूट-फोर्स करें स्टैक में इन्हें लीक करने के लिए
आप इन प्रक्रियाओं के बारे में अधिक जानकारी यहाँ (बीएफ फोर्क्ड और थ्रेडेड स्टैक कैनरीज) और यहाँ (बीएफ एड्रेसेस इन द स्टैक) से पा सकते हैं।
4. स्टॉप गैजेट खोजें
यह गैजेट मुख्य रूप से यह साबित करता है कि कुछ दिलचस्प चल रहा था आरओपी गैजेट द्वारा क्योंकि निष्पादन क्रैश नहीं हुआ। सामान्यत: यह गैजेट कुछ है जो निष्पादन को रोकता है और यह आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आरओपी गैजेट की खोज के लिए आर
8. लेखन या समकक्ष खोजना
अंत में, डेटा निकालने के लिए एक गैजेट की आवश्यकता है ताकि बाइनरी निकाला जा सके। और इस समय 2 तर्कों को नियंत्रित करना और rdx
को 0 से अधिक सेट करना संभव है।
इसके लिए तीन सामान्य फ़ंक्शन हैं जिनका दुरुपयोग किया जा सकता है:
puts(data)
dprintf(fd, data)
write(fd, data, len(data)
हालांकि, मूल पेपर में केवल write
का उल्लेख है, इसलिए इसके बारे में चर्चा करें:
वर्तमान समस्या यह है कि हमें पता नहीं है PLT के अंदर लेखन कार्य कहाँ है और हमें हमारे सॉकेट को डेटा भेजने के लिए कोई fd नंबर पता नहीं है।
हालांकि, हमें PLT तालिका कहाँ है और इसके व्यवहार के आधार पर लेखन को खोजना संभव है। और हम सर्वर के साथ कई कनेक्शन बना सकते हैं और एक उच्च FD का उपयोग करके उम्मीद कर सकते हैं कि यह हमारे कनेक्शनों में से किसी से मेल खाता है।
उन फ़ंक्शनों को खोजने के लिए व्यवहार हस्ताक्षर:
'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP
-> यदि डेटा प्रिंट होता है, तो पट्स मिल गया था'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP
-> यदि डेटा प्रिंट होता है, तो डीप्रिंट मिल गया था'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP
-> यदि डेटा प्रिंट होता है, तो लेखन मिल गया था
स्वचालित उत्पीड़न
संदर्भ
Last updated