
गैर-HTTP प्रोटोकॉल को Burp और अन्य के माध्यम से इंटरसेप्ट और संशोधित करने का थोड़ा कम हैकिश तरीका।
गैर-HTTP प्रोटोकॉल को Burp और अन्य के माध्यम से SSL और TLS इंटरसेप्शन समर्थन के साथ इंटरसेप्ट और संशोधित करने का थोड़ा कम हैकिश तरीका। यह टूल शोधकर्ताओं और एप्लिकेटिव पेनिट्रेशन टेस्टर्स के लिए है जो थिक क्लाइंट सुरक्षा मूल्यांकन करते हैं।
शानदार mitm_relay प्रोजेक्ट का एक बेहतर संस्करण।
CyberArk Labs के शोध विभाग में अपने काम के भाग के रूप में, हमें TCP के माध्यम से SSL और TLS संचार का निरीक्षण करने और पैकेट की सामग्री को मक्खी पर संशोधित करने का विकल्प चाहिए था। ऐसा करने के कई तरीके हैं (उदाहरण के लिए, ज्ञात Burp Suite एक्सटेंशन NoPE), लेकिन उनमें से कोई भी कुछ मामलों में हमारे लिए काम नहीं आया। अंत में हम mitm_relay पर आ गए।
mitm_relay Burp Suite के प्रॉक्सी जैसे मौजूदा HTTP इंटरसेप्शन सॉफ्टवेयर के माध्यम से किसी भी TCP-आधारित प्रोटोकॉल का MITM करने का एक त्वरित और आसान तरीका है। यह विशेष रूप से थिक क्लाइंट सुरक्षा मूल्यांकन के लिए उपयोगी है। लेकिन यह हमारे लिए पूरी तरह से काम नहीं करता था, इसलिए हमें इसे अनुकूलित करने की आवश्यकता थी। बहुत सारे अनुकूलन के बाद, हर नए बदलाव के लिए बहुत काम करना पड़ता था, और अंत में हमने सब कुछ अधिक मॉड्यूलर तरीके से फिर से लिखा।
हम आशा करते हैं कि दूसरों को यह स्क्रिप्ट उपयोगी लगेगी, और हम आशा करते हैं कि कार्यक्षमता जोड़ना आसान होगा।
शुरुआत के लिए, श्रोताओं के पते और पोर्ट कॉन्फ़िगर किए जाने की आवश्यकता है। प्रत्येक श्रोता के लिए, एक लक्ष्य (पता और पोर्ट) भी कॉन्फ़िगर किया जाना चाहिए। श्रोता से प्राप्त प्रत्येक डेटा को "CLIENT_REQUEST" वाले URL के साथ एक HTTP POST अनुरोध के बॉडी में लपेटा जाएगा। लक्ष्य से प्राप्त प्रत्येक डेटा को "SERVER_RESPONSE" वाले URL के साथ एक HTTP POST अनुरोध के बॉडी में लपेटा जाएगा। ये अनुरोध एक स्थानीय HTTP इंटरसेप्शन सर्वर को भेजे जाते हैं।
एक HTTP प्रॉक्सी कॉन्फ़िगर करने और burp suite जैसे टूल को HTTP इंटरसेप्शन टूल के रूप में उपयोग करने और वहाँ संदेशों को देखने का विकल्प है। इस तरह, Burp के "Match and Replace", एक्सटेंशन या मैन्युअल रूप से भी संदेशों को संशोधित करना आसान है (याद रखें, इंटरसेप्ट किए गए प्रोटोकॉल का टाइमआउट तंत्र बहुत छोटा हो सकता है)।
संदेशों को संशोधित करने का दूसरा तरीका एक पायथन स्क्रिप्ट का उपयोग करना है जो HTTP इंटरसेप्शन सर्वर चलाएगा जब वह संदेश प्राप्त करता है।
HTTP इंटरसेप्शन सर्वर को भेजे गए संदेशों का बॉडी शेल पर प्रिंट किया जाएगा। यदि संशोधन स्क्रिप्ट दी गई है, तो संशोधन के बाद संदेश मुद्रित किए जाएंगे। सभी संशोधनों के बाद, इंटरसेप्शन सर्वर HTTP प्रतिक्रिया बॉडी के रूप में वापस गूंज भी देगा।
SSL/TLS संचार को डिक्रिप्ट करने के लिए, mitm_intercept को एक प्रमाणपत्र और एक कुंजी प्रदान करने की आवश्यकता है जिसे क्लाइंट श्रोता के साथ हैंडशेक शुरू करते समय स्वीकार करेगा। यदि लक्ष्य सर्वर को हैंडशेक के लिए किसी विशिष्ट प्रमाणपत्र की आवश्यकता है, तो एक प्रमाणपत्र और एक कुंजी देने का विकल्प है।
एक छोटा चार्ट जो सामान्य ट्रैफ़िक प्रवाह दिखाता है:

mitm_intercept पायथन 3 (पायथन 3.9) के नए संस्करणों के साथ संगत है और विंडोज (उदाहरण के लिए, socket.MSG_DONTWAIT विंडोज में मौजूद नहीं है) के साथ भी संगत है। हमने "STARTTLS" का उपयोग करने का विकल्प रखा है, और हमने इसे "मिक्स्ड" मोड कहा है। SSL कुंजी लॉग फ़ाइल का उपयोग अद्यतन किया गया है (इसे उपयोग करने का अंतर्निहित विकल्प पायथन 3.8 से नया है), और हमने sni हेडर को बदलने का विकल्प जोड़ा है। अब, आने वाले और जाने वाले संचार का प्रबंधन socketserver द्वारा किया जाता है, और सभी डेटा ThreadingHTTPServer के एक उपवर्ग को भेजा जाता है जो डेटा प्रतिनिधित्व और संशोधन को संभालता है। इस तरह, प्रतिक्रिया में संशोधन स्क्रिप्ट द्वारा लागू किए गए परिवर्तनों को देखना संभव है (Burp का उपयोग करने के लिए सुविधाजनक)। साथ ही, अब हम OpenSSL सिफर सूची प्रारूप का उपयोग करके स्क्रिप्ट द्वारा उपयोग किए जाने वाले उपलब्ध सिफर को बदल सकते हैं।
$ python -m pip install requestsusage: mitm_intercept.py [-h] [-m] -l [u|t:]<interface>:<port> [[u|t:]<interface>:<port> ...] -t
[u|t:]<addr>:<port> [[u|t:]<addr>:<port> ...] [-lc <cert_path>]
[-lk <key_path>] [-tc <cert_path>] [-tk <key_path>] [-w <interface>:<port>]
[-p <addr>:<port>] [-s <script_path>] [--sni <server_name>]
[-tv <defualt|tls12|tls11|ssl3|tls1|ssl2>] [-ci <ciphers>]
mitm_intercept संस्करण 1.6