Format Strings
Basic Information
C में printf
एक फ़ंक्शन है जिसका उपयोग किसी स्ट्रिंग को प्रिंट करने के लिए किया जा सकता है। इस फ़ंक्शन की पहली पैरामीटर जो अपेक्षित है वह है फॉर्मेटर्स के साथ कच्चा टेक्स्ट। अन्य पैरामीटर जो अपेक्षित हैं वे हैं कच्चे टेक्स्ट से फॉर्मेटर्स को बदलने के लिए मान।
अन्य संवेदनशील फ़ंक्शन हैं sprintf()
और fprintf()
।
संवेदनशीलता तब प्रकट होती है जब हमलावर टेक्स्ट को इस फ़ंक्शन के पहले तर्क के रूप में उपयोग किया जाता है। हमलावर एक विशेष इनपुट तैयार करने में सक्षम होगा जो printf फॉर्मेट स्ट्रिंग क्षमताओं का दुरुपयोग करके किसी भी पते (पढ़ने योग्य/लिखने योग्य) में कोई भी डेटा पढ़ने और लिखने के लिए। इस तरह से मनमाने कोड को निष्पादित करने में सक्षम होना।
Formatters:
उदाहरण:
कमजोर उदाहरण:
सामान्य उपयोग:
गायब तर्कों के साथ:
fprintf कमजोर:
Pointers तक पहुँचना
फॉर्मेट %<n>$x
, जहाँ n
एक संख्या है, printf को यह संकेत करने की अनुमति देता है कि n पैरामीटर (स्टैक से) का चयन करें। इसलिए यदि आप printf का उपयोग करके स्टैक से 4वें पैरामीटर को पढ़ना चाहते हैं, तो आप कर सकते हैं:
और आप पहले से चौथे पैरामीटर तक पढ़ सकते हैं।
या आप कर सकते हैं:
और सीधे चौथे को पढ़ें।
ध्यान दें कि हमलावर pr
intf
पैरामीटर को नियंत्रित करता है, जिसका अर्थ है कि उसका इनपुट printf
के कॉल होने पर स्टैक में होगा, जिसका अर्थ है कि वह स्टैक में विशिष्ट मेमोरी पते लिख सकता है।
एक हमलावर जो इस इनपुट को नियंत्रित करता है, स्टैक में मनमाने पते जोड़ने में सक्षम होगा और printf
को उन्हें एक्सेस करने के लिए मजबूर करेगा। अगले अनुभाग में इस व्यवहार का उपयोग कैसे करें, यह समझाया जाएगा।
मनमाना पढ़ना
फॉर्मेटर %n$s
का उपयोग करना संभव है ताकि printf
n स्थिति में स्थित पते को प्राप्त कर सके, इसके बाद और इसे एक स्ट्रिंग की तरह प्रिंट करे (जब तक 0x00 नहीं मिलता)। तो अगर बाइनरी का बेस पता 0x8048000
है, और हम जानते हैं कि उपयोगकर्ता इनपुट स्टैक में चौथी स्थिति से शुरू होता है, तो बाइनरी की शुरुआत को प्रिंट करना संभव है:
ध्यान दें कि आप इनपुट की शुरुआत में 0x8048000 का पता नहीं डाल सकते क्योंकि स्ट्रिंग उस पते के अंत में 0x00 पर कट जाएगी।
ऑफसेट खोजें
अपने इनपुट के लिए ऑफसेट खोजने के लिए आप 4 या 8 बाइट्स (0x41414141
) भेज सकते हैं उसके बाद %1$x
और मान बढ़ाएं जब तक कि A's
प्राप्त न हो जाएं।
Last updated