कमांड और कोड इंजेक्शन
बैकएंड प्रणालियों में OS कमांड इंजेक्शन और मनमाने कोड के निष्पादन से संबंधित कमज़ोरियों की पहचान और शमन करना सीखें।
कमांड और कोड इंजेक्शन, CoddyKit पर सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कमांड और कोड इंजेक्शन क्या हैं?
स्वागत है! इस पाठ में हम कमांड और कोड इंजेक्शन, बैकएंड की दो गंभीर कमजोरियों, का अध्ययन करेंगे।
ये हमले आपके अनुप्रयोग को अनचाहे सिस्टम कमांड या अनुप्रयोग-स्तरीय कोड चलाने के लिए धोखा देते हैं, जिससे गंभीर सुरक्षा उल्लंघन हो सकते हैं।
- कमांड इंजेक्शन: OS कमांड चलाता है।
- कोड इंजेक्शन: अनुप्रयोग की प्रोग्रामिंग भाषा का कोड चलाता है।
OS कमांड इंजेक्शन की मूल बातें
OS कमांड इंजेक्शन तब होता है जब कोई हमलावर आपके अनुप्रयोग को होस्ट करने वाले सर्वर पर मनमाने ऑपरेटिंग सिस्टम कमांड चला सकता है।
ऐसा तब होता है जब कोई अनुप्रयोग बिना स्वच्छ किए उपयोगकर्ता द्वारा दिए गए इनपुट को सिस्टम शेल को भेजता है, अक्सर बाहरी प्रोग्राम चलाने वाले फ़ंक्शन के माध्यम से।
इसके बाद हमलावर ये कार्य कर सकते हैं:
- फ़ाइलें पढ़ना, लिखना या हटाना।
- दुर्भावनापूर्ण स्क्रिप्ट चलाना।
- सर्वर पर पूरा नियंत्रण प्राप्त करना।
कमजोर OS कमांड का उदाहरण
आइए Java का एक कमजोर उदाहरण देखें। मान लीजिए कि userInput सीधे किसी वेब फ़ॉर्म से आता है।
हमलावर कमांड विभाजकों (जैसे ; या &) का उपयोग करके मूल कमांड के अंत में नए कमांड जोड़ सकता है।
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class CommandInjectionDemo {
public static void main(String[] args) {
// Imagine 'userInput' comes from a web request parameter
String userInput = "my_file.txt; echo HELLO_INJECTED_COMMAND"; // Malicious input example
// For Windows: "my_file.txt & echo HELLO_INJECTED_COMMAND"
// VULNERABLE: Direct concatenation of user input into a system command
String command = "ls -l " + userInput; // Linux example command
// For Windows: String command = "dir " + userInput;
System.out.println("Executing: " + command);
try {
Process p = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
p.waitFor(); // Wait for the command to finish
} catch (Exception e) {
System.err.println("Error executing command: " + e.getMessage());
}
}
}इंजेक्शन कैसे काम करता है
पिछले उदाहरण में, ls -l my_file.txt; echo HELLO_INJECTED_COMMAND स्ट्रिंग शेल को भेजी जाती है।
Linux/Unix जैसी प्रणालियों में सेमीकोलन (;) कमांड विभाजक होता है। यह शेल को पहले कमांड और फिर दूसरे कमांड को चलाने के लिए कहता है।
यदि my_file.txt मौजूद न भी हो, तब भी echo कमांड चलेगा, जिससे इंजेक्शन प्रदर्शित होता है।
रोकथाम: इनपुट सत्यापन
OS Command Injection से बचाव का प्राथमिक उपाय कड़ा इनपुट सत्यापन है।
- अनुमत-सूची बनाना: यह सबसे सुरक्षित तरीका है। उपयोगकर्ता के इनपुट में कौन-से अक्षर, प्रारूप या मान स्वीकार किए जाएंगे, यह स्पष्ट रूप से निर्धारित करें। जो भी इनसे मेल न खाए, उसे अस्वीकार कर दें।
- अस्वीकृत-सूची से बचें: ज्ञात दुर्भावनापूर्ण अक्षरों (जैसे
;,&) को रोकने का प्रयास अक्सर विफल हो सकता है, क्योंकि अलग-अलग शेल व्याख्याओं या एन्कोडिंग की चालों से इसे दरकिनार किया जा सकता है।
निवारण: सुरक्षित API को प्राथमिकता दें
उपयोगकर्ता के इनपुट को सीधे कमांड स्ट्रिंग में जोड़ने के बजाय, ऐसे API का उपयोग करें जो तर्कों को कमांड के अलग-अलग तत्वों के रूप में भेजते हैं।
Java में, सही तरीके से उपयोग किए जाने पर ProcessBuilder, Runtime.getRuntime().exec() से अधिक सुरक्षित है, क्योंकि यह डिफ़ॉल्ट रूप से तर्कों की व्याख्या करने के लिए शेल शुरू नहीं करता।
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class SafeCommandExec {
public static void main(String[] args) {
// Imagine 'userInput' comes from a web request parameter
String userInput = "my_file.txt; echo HELLO_INJECTED_COMMAND"; // Malicious input attempt
// SECURE: Pass arguments as separate strings to ProcessBuilder
// The shell will NOT interpret '; echo HELLO_INJECTED_COMMAND' as a new command
ProcessBuilder pb = new ProcessBuilder("ls", "-l", userInput);
// For Windows: ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "dir", userInput);
System.out.println("Executing: " + String.join(" ", pb.command()));
try {
Process p = pb.start(); // Start the process
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
} catch (Exception e) {
System.err.println("Error executing command: " + e.getMessage());
}
}
}कोड इंजेक्शन को समझना
कोड इंजेक्शन Command Injection के समान है, लेकिन इसमें OS कमांड के बजाय एप्लिकेशन की प्रोग्रामिंग भाषा का मनमाना कोड चलाया जाता है।
ऐसा तब हो सकता है जब कोई एप्लिकेशन:
- उपयोगकर्ता द्वारा दिए गए इनपुट का मूल्यांकन निष्पादन योग्य कोड के रूप में करता है (जैसे, स्क्रिप्टिंग भाषाओं में
eval()या Java में Expression Languages का उपयोग करना)। - अविश्वसनीय डेटा को डीसीरियलाइज़ करता है, जिससे दुर्भावनापूर्ण ऑब्जेक्ट बनाए जा सकते हैं।
- असुरक्षित टेम्पलेट इंजन का उपयोग करता है।
कोड इंजेक्शन के परिदृश्य
OS Command Injection के विपरीत, जो ऑपरेटिंग सिस्टम के शेल को निशाना बनाता है, Code Injection एप्लिकेशन के रनटाइम वातावरण को निशाना बनाता है।
- गतिशील मूल्यांकन: यदि आपका एप्लिकेशन उपयोगकर्ता के इनपुट को लेता है और उसे
eval()जैसे फ़ंक्शन में उपयोग करता है (जो Python, PHP और JavaScript में आम है), तो हमलावर अपना कोड डाल सकता है। - असुरक्षित डीसीरियलाइज़ेशन: जब कोई एप्लिकेशन उचित सत्यापन के बिना अविश्वसनीय डेटा को डीसीरियलाइज़ करता है, तो हमलावर ऐसे दुर्भावनापूर्ण सीरियलाइज़्ड ऑब्जेक्ट बना सकता है जो डीसीरियलाइज़ेशन के दौरान कोड चलाते हैं।
Java एप्लिकेशन असुरक्षित डीसीरियलाइज़ेशन के प्रति विशेष रूप से संवेदनशील होते हैं।
कोड इंजेक्शन से बचाव
Code Injection को कम करने के लिए सावधानीपूर्वक डिज़ाइन और कड़े डेटा प्रबंधन की आवश्यकता होती है:
- गतिशील कोड निष्पादन से बचें: उपयोगकर्ता द्वारा दिए गए इनपुट का कोड के रूप में मूल्यांकन करने वाले फ़ंक्शन का कभी उपयोग न करें।
- डीसीरियलाइज़ किए गए डेटा का सत्यापन करें: केवल विश्वसनीय स्रोतों से प्राप्त डेटा को डीसीरियलाइज़ करें। डीसीरियलाइज़ किए गए किसी भी इनपुट के लिए कड़े प्रकार-जाँच और ऑब्जेक्ट सत्यापन लागू करें।
- सुरक्षित टेम्पलेट इंजन का उपयोग करें: सुनिश्चित करें कि इंजेक्शन रोकने के लिए आपका टेम्पलेट इंजन उपयोगकर्ता द्वारा दिए गए डेटा को स्वतः एस्केप करता है।
- न्यूनतम विशेषाधिकार: अपने एप्लिकेशन को केवल आवश्यक न्यूनतम अनुमतियों के साथ चलाएं।
अपनी जानकारी जाँचें
त्वरित जाँच का समय है! इंजेक्शन संबंधी कमजोरियों को रोकने वाली सबसे प्रभावी प्रक्रियाएं चुनें।
पुनरावलोकन: इंजेक्शन से बचाव
बहुत अच्छा! आपने Command और Code Injection के बारे में सीखा है।
- Command Injection हमलावरों को OS कमांड चलाने की अनुमति देता है।
- Code Injection हमलावरों को एप्लिकेशन-स्तरीय कोड चलाने की अनुमति देता है।
- मुख्य बचावों में कड़ा इनपुट सत्यापन (अनुमत-सूची बनाना), सुरक्षित API का उपयोग (जैसे अलग-अलग तर्कों के साथ
ProcessBuilder) और अविश्वसनीय स्रोतों से गतिशील कोड निष्पादन से बचना शामिल हैं।
उपयोगकर्ता के इनपुट को हमेशा अविश्वसनीय डेटा मानें!
एआई शिक्षक के साथ सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 12
- पाठ
- 48
अक्सर पूछे जाने वाले प्रश्न
क्या “कमांड और कोड इंजेक्शन” पाठ निःशुल्क है?
हाँ — सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कमांड और कोड इंजेक्शन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कमांड और कोड इंजेक्शन” में मैं क्या सीखूँगा?
बैकएंड प्रणालियों में OS कमांड इंजेक्शन और मनमाने कोड के निष्पादन से संबंधित कमज़ोरियों की पहचान और शमन करना सीखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“कमांड और कोड इंजेक्शन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- SQL इंजेक्शन की रोकथाम
- कमांड और कोड इंजेक्शन
- बैकएंड में क्रॉस-साइट स्क्रिप्टिंग (XSS)
- XML और LDAP इंजेक्शन की रोकथाम