
हथियारबंद ब्राउज़र-इन-द-मिडल (BitM) पेनिट्रेशन टेस्टर्स के लिए

प्रवेश परीक्षकों के लिए शस्त्रीकृत बहु-उपयोगकर्ता ब्राउज़र-इन-द-मिडिल (BitM)। यह हमला कई उच्च-मूल्य वाले वेब अनुप्रयोगों पर बहु-कारक प्रमाणीकरण को बायपास करने के लिए इस्तेमाल किया जा सकता है। यह उन अनुप्रयोगों पर भी काम करता है जो सत्र टोकन का उपयोग नहीं करते हैं, और इसलिए पारंपरिक टोकन चोरी हमलों का उपयोग करके शोषण योग्य नहीं होंगे। यह एक सामाजिक इंजीनियरिंग उपकरण है और लक्ष्य सेवा में किसी भी तकनीकी खामी का शोषण नहीं करता है।
यह उपकरण एक विशिष्ट वेब सर्वर है। इसे Debian 11 (Bullseye) Linux सर्वर पर चलाने के लिए डिज़ाइन किया गया है और प्रशासन कार्यक्षमता की सुरक्षा के लिए सार्वजनिक IP जानकारी पर निर्भर करता है। कुछ गंभीर बाधाओं को पार किए बिना स्थानीय रूप से परीक्षण करने की अपेक्षा न करें।
चेतावनी: Chromium ARM पर समर्थित नहीं है। हालांकि ARM क्रोमियम बाइनरी का उपयोग करने के लिए मजबूर करना तकनीकी रूप से संभव है, आप puppeteer-extra की सभी अतिरिक्त सुविधाओं/सुरक्षाओं को खो देंगे।
यह उदाहरण सेटअप TLS, SNI को संभालने और प्रत्येक अनुरोध में 'X-Real-IP' जैसे कुछ कस्टम हेडर जोड़ने के लिए Caddy का उपयोग करता है। Cuddlephish के साथ Caddy का उपयोग करना आवश्यक नहीं है, क्योंकि वही रिवर्स प्रॉक्सी Nginx, Apache आदि का उपयोग करके सेट किया जा सकता है। मुझे Caddy पसंद है क्योंकि इसे Docker के साथ स्थापित करना आसान है, और इसमें अधिकांश डोमेन रजिस्ट्रारों के लिए Letsencrypt प्रमाणपत्र प्रबंधित करने के लिए प्लगइन हैं। उदाहरण Caddyfile दिखाता है कि आप इसे Gandi के लिए कैसे सेट करेंगे। अपने रजिस्ट्रार के दस्तावेज़ देखें।
Docker, Node, XVFB और कुछ अन्य निर्भरताएँ स्थापित करें:
git clone https://github.com/fkasler/cuddlephish
cd cuddlephish
sudo bash install_deps.sh
फिर आप अपने रजिस्ट्रार के लिए वाइल्डकार्ड सर्ट प्लगइन के साथ Caddy बनाने के लिए Docker का उपयोग कर सकते हैं। उदाहरण Gandi के लिए है। दस्तावेज़ यहाँ और DNS प्रदाता मॉड्यूल की सूची यहाँ देखें। आप बनाने से पहले अपने रजिस्ट्रार के लिए Dockerfile को संशोधित कर सकते हैं:
sudo docker build -t caddy .
अब अपने डोमेन और Gandi (या अन्य रजिस्ट्रार) API कुंजी को बदलने के लिए Caddyfile को संशोधित करें, और Caddy शुरू करें। मैं इसे screen या tmux विंडो में शुरू करने की सलाह देता हूँ ताकि आप एक क्षण में दूसरी विंडो में Node सर्वर चला सकें:
sudo docker run -p 80:80 -p 443:443 -p 2019:2019 -v $PWD/Caddyfile:/etc/caddy/Caddyfile --network=host caddy:latest
Caddy के साथ 80 और 443 पर हमारे लिए ट्रैफिक संभालने के बाद, हम अंततः उपकरण चला सकते हैं!
Node निर्भरताएँ स्थापित करें:
npm install
कुछ कॉन्फ़िग ट्वीक: महत्वपूर्ण कदम: सुनिश्चित करें कि उदाहरण config.json को संशोधित करके प्रशासन पहुंच के लिए अपने स्वीकृत सार्वजनिक IP(s) जोड़ें। IPs की यह श्वेतसूची "/admin" वेब इंटरफ़ेस तक पहुंच निर्धारित करती है। आपको डिफ़ॉल्ट सॉकेट कुंजी को भी अधिक सुरक्षित में बदलना चाहिए।
उपकरण डिफ़ॉल्ट रूप से किसी भी लॉगिन को लक्षित करने के लिए सेट नहीं है, इसलिए आपको कुछ जोड़ने की आवश्यकता होगी। इस चरण को आसान बनाने के लिए एक 'add_target.js' स्क्रिप्ट है। बस स्क्रिप्ट चलाएँ और संकेत मिलने पर उस लॉगिन पोर्टल का URL पेस्ट करें जिसे आप लक्षित करना चाहते हैं:
node add_target.js
यह आपके लिए सेवा का नाम, टैब शीर्षक और फ़ेविकॉन प्राप्त करेगा और 'targets.json' में एक प्रविष्टि जोड़ेगा। आप इस स्क्रिप्ट को कई बार चला सकते हैं और यह आपके नए लक्ष्यों को जोड़ देगी। स्क्रिप्ट प्रत्येक सेवा का नाम डोमेन के आधार पर रखेगी, शीर्ष स्तर के बिना। इसलिए, 'https://www.example.com/login.php' के लिए सेवा सिर्फ 'example' होगी जब आप अपने लक्ष्य को निर्दिष्ट करेंगे जब आप...
इसे चलाएँ!
node index.js example
कुछ सेकंड के बाद, आपको कंसोल में एक संदेश दिखना चाहिए जब आपका पहला स्वचालित क्रोम इंस्टेंस websockets पर चेक इन करता है। अब आपके फ़िशिंग साइट के आगंतुकों को वह दिखना चाहिए जो लक्ष्य लॉगिन पृष्ठ प्रतीत होता है, लेकिन वास्तव में यह आपके स्वचालित ब्राउज़र इंस्टेंस का वीडियो फ़ीड है। वे आपके ब्राउज़र इंस्टेंस के साथ बातचीत भी कर सकते हैं और आपके लिए लॉग इन कर सकते हैं।
यदि आपने config.json में अपने प्रशासन IP(s) को ठीक से कॉन्फ़िगर किया है, तो आपको उपयोगकर्ताओं को ट्रैक करने, कुंजी लॉग देखने, लॉग इन किए गए ब्राउज़र इंस्टेंस पर नियंत्रण लेने, कुकीज़ चुराने और अवांछित ब्राउज़र इंस्टेंस को हटाने के लिए एक विशेष '/admin' वेब इंटरफ़ेस देखने में सक्षम होना चाहिए।
नोट: आपको प्रशासन पृष्ठ में तब तक कुछ नहीं दिखेगा जब तक आपके कुछ पीड़ित न हों। एक बार जब आपके पास कोई पीड़ित हो, तो उनका ब्राउज़र इंस्टेंस प्रशासन UI पर पॉप अप होना चाहिए।
मेरे पास कई लोगों ने "Blank White Page" के बारे में समस्या खोली है, जो कई संभावित समस्याओं का एक लक्षण है, और अपने आप में कोई समस्या नहीं है। कृपया अस्पष्ट लक्षण नामों के तहत समस्या न खोलें। इसके बजाय, यदि आपके पास उपयोगकर्ता पक्ष पर एक खाली पृष्ठ है, तो पहले निम्नलिखित में देखने का प्रयास करें:
उच्च स्तर पर, यदि आप फ्रंट-एंड पर सिर्फ एक खाली पृष्ठ देखते हैं, तो इसका मतलब है कि डेटा प्रवाह की श्रृंखला में "Start WebRTC" > "Select Tab to Broadcast" > "Negotiate ICE with Victim's Browser" > "Stream Video" में कुछ टूट-फूट हो रही है। उपरोक्त समस्या निवारण कदम आपको इस प्रक्रिया के माध्यम से डेटा का अनुसरण करने में मदद करने के लिए हैं। जब ठीक से काम कर रहा हो, तो आपको सर्वर पर निम्नलिखित के समान एक लॉग स्ट्रीम देखने की उम्मीद करनी चाहिए:
मुझे आशा है कि यह किसी भी समस्या में मदद करता है, और हमेशा की तरह, किसी समस्या को लगातार दोहराने के लिए पर्याप्त जानकारी आगे की जांच के लिए समस्या प्रस्तुत करने के लिए एक शर्त है।
JavaScript के माध्यम से पीड़ित के सिस्टम पर डाउनलोड करने के लिए मैन्युअल रूप से एक पेलोड ट्रिगर करें। प्रत्येक लक्ष्य एक परीक्षण पेलोड के रूप में 'payload.txt' से शुरू होता है। कस्टम पेलोड भेजने के लिए बस targets.json में फ़ाइल स्थान बदलें।