Format String Vulnerabilities
मनमानी memory पढ़ने और मनमाने addresses पर लिखने के लिए printf format strings का शोषण कीजिए।
Format String Vulnerabilities, CoddyKit पर Cyber Security Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Cyber Security Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Cyber Security Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
फ़ॉर्मैट स्ट्रिंग की कमजोरी क्या है
फ़ॉर्मैट स्ट्रिंग की कमजोरी तब होती है जब उपयोगकर्ता का इनपुट सीधे printf() या समान फ़ंक्शन के फ़ॉर्मैट स्ट्रिंग तर्क के रूप में भेजा जाता है। हमलावर मेमोरी पढ़ सकता है, स्टैक पतों का रिसाव कर सकता है और मनमाने मान लिख सकता है।
कमजोर पैटर्न
कमजोर बनाम सुरक्षित:
// VULNERABLE - user controls the format string:
printf(user_input);
fprintf(stderr, user_input);
// SAFE - user input is a data argument:
printf("%s", user_input);%x और %p से मेमोरी पढ़ना
संबंधित तर्कों के बिना फ़ॉर्मैट विनिर्देशक स्टैक से मान पढ़ते हैं:
# Input: %p.%p.%p.%p.%p
# Output: 0x7ffd12345678.0x400580.0x0.0x1.0x7f3a...
# Each %p prints the next value off the stack - leaking addresses!फ़ॉर्मैट स्ट्रिंग रिसाव से ASLR को दरकिनार करना
स्टैक में अक्सर लिबसी, स्टैक और बाइनरी के पॉइंटर होते हैं। %p या %lx विनिर्देशकों से इनका रिसाव करके हमलावर आधार पतों की गणना कर सकता है और ASLR को निष्प्रभावी कर सकता है — वह भी किसी अन्य कमजोरी के बिना।
%s से मनमानी मेमोरी पढ़ना
%s स्टैक मान को पॉइंटर मानता है और उस पते पर मौजूद स्ट्रिंग प्रिंट करता है। लक्ष्य पते को स्टैक की सही स्थिति में रखकर और पैरामीटर अभिगम (%7$s) का उपयोग करके हमलावर मनमाने मेमोरी स्थान पढ़ सकता है।
# Direct parameter access:
printf("%7$s") # prints string at 7th stack parameter
# If 7th param is an address you control, reads that memory%n से मेमोरी लिखना
%n अब तक प्रिंट किए गए वर्णों की संख्या को संबंधित तर्क द्वारा बताए गए पते पर लिखता है। इससे मनमाने पतों पर नियंत्रित मान लिखना संभव होता है — संभावित रूप से फ़ंक्शन पॉइंटर या रिटर्न पते को अधिलेखित किया जा सकता है।
व्यावहारिक लेखन तकनीक
%n का उपयोग करके कोई विशिष्ट मान लिखने के लिए:
- स्टैक पर ऐसा पॉइंटर नियंत्रित करें जो लक्ष्य पते की ओर संकेत करता हो
%Xc%N$nका उपयोग करके X वर्ण लिखें, फिर गणना को Nवें पैरामीटर (लक्ष्य पते) पर लिखें
प्वनटूल्स जैसे उपकरण फ़ॉर्मैट स्ट्रिंग एक्सप्लॉइट का निर्माण स्वचालित करते हैं।
फ़ॉर्मैट स्ट्रिंग की त्रुटियाँ खोजना
फ़ॉर्मैट स्ट्रिंग की कमजोरियों की जाँच:
# Test inputs:
%x.%x.%x
%p.%p.%p
%s%s%s
AAAA.%p.%p.%p.%p (looking for 0x41414141 in output)
# Automated testing with fuzzer:
python3 -c "print('%p.' * 20)" | ./vulnबचाव: कोड ठीक करें
समाधान बेहद सरल है: उपयोगकर्ता का इनपुट हमेशा डेटा तर्क के रूप में भेजें, फ़ॉर्मैट स्ट्रिंग के रूप में कभी नहीं।
// WRONG:
printf(buffer);
// RIGHT:
printf("%s", buffer);
// Compiler warning:
// gcc -Wformat-security will flag thisअन्य भाषाओं में फ़ॉर्मैट स्ट्रिंग
फ़ॉर्मैट स्ट्रिंग की कमजोरियाँ कई भाषाओं में होती हैं:
- C:
printf(input) - पायथन: यह समान नहीं है — लेकिन डिक्शनरी इनपुट के साथ
%फ़ॉर्मैटिंग से चर उजागर हो सकते हैं - Java:
String.format(input)— कम खतरनाक, मेमोरी अभिगम नहीं
वास्तविक दुनिया के उदाहरण
फ़ॉर्मैट स्ट्रिंग की त्रुटियों ने इन पर प्रभाव डाला है:
- प्रोएफ़टीपीडी — FTP कमांड के माध्यम से दूरस्थ कोड निष्पादन सक्षम किया
- डब्ल्यूयू-एफ़टीपीडी — फ़ॉर्मैट स्ट्रिंग के माध्यम से दूरस्थ रूट एक्सप्लॉइट
- 2000 के दशक से पहले के विभिन्न लिनक्स डेमन
आधुनिक कंपाइलर और FORTIFY_SOURCE सहायता करते हैं, लेकिन इस वर्ग को पूरी तरह समाप्त नहीं करते।
त्वरित जाँच: फ़ॉर्मैट स्ट्रिंग
फ़ॉर्मैट स्ट्रिंग हमले में किसी मनमाने मेमोरी पते पर लिखने के लिए किस फ़ॉर्मैट विनिर्देशक का उपयोग किया जा सकता है?
पाठ का पुनरावलोकन
फ़ॉर्मैट स्ट्रिंग की कमजोरियाँ तब होती हैं जब उपयोगकर्ता के इनपुट का उपयोग सीधे printf फ़ॉर्मैट स्ट्रिंग के रूप में किया जाता है। %p/%x स्टैक मेमोरी का रिसाव करते हैं; %s मनमाने पते पढ़ता है; %n मनमाने पतों पर लिखता है। समाधान एक वर्ण है: printf("%s", input)। इन त्रुटियों को पकड़ने के लिए कंपाइलर फ़्लैग में -Wformat-security सक्षम करें।
एआई शिक्षक के साथ Cyber Security Academy सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 76
- पाठ
- 303
अक्सर पूछे जाने वाले प्रश्न
क्या “Format String Vulnerabilities” पाठ निःशुल्क है?
हाँ — Cyber Security Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Format String Vulnerabilities” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Cyber Security Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Format String Vulnerabilities” में मैं क्या सीखूँगा?
मनमानी memory पढ़ने और मनमाने addresses पर लिखने के लिए printf format strings का शोषण कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Cyber Security Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Cyber Security Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Cyber Security Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Format String Vulnerabilities” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Cyber Security Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Cyber Security Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Stack Buffer Overflows
- Return-Oriented Programming (ROP)
- Format String Vulnerabilities
- Heap Exploitation: Use-After-Free और Heap Spraying