paint-brush
हवा से हमले - भयभीत करने वाला HTML इंजेक्शनद्वारा@jvictors
1,133 रीडिंग
1,133 रीडिंग

हवा से हमले - भयभीत करने वाला HTML इंजेक्शन

द्वारा Jesse Victors7m2023/08/19
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

13 जुलाई को, हमें एक दिलचस्प भेद्यता का पता चला। एक विशेष वेबपेज डिजिटल रेडियो चैटर पर नज़र रख रहा था और यह अपने स्टेशन पर क्या सुन रहा था इसका एक रनिंग लॉग प्रदर्शित करेगा। यदि आप इस प्रकार के काम में रुचि रखते हैं तो यह एक उपयोगी उपकरण है; आख़िरकार, यह जानना बहुत अच्छा है कि क्या आपकी कॉल सुनी जा रही हैं या क्या ऐसी बातचीत चल रही है जिसमें आप शामिल होना चाहेंगे। इस टूल ने जो कुछ भी सुन रहा था उसे कैप्चर कर लिया और उसे वेबपेज में डाल दिया। एक संदेश भेजें और कुछ सेकंड बाद यह वहां दिखाई देगा। यदि संदेश में HTML शामिल है, तो वह भी वेबपेज पर समाप्त हो जाएगा। क्लासिक HTML इंजेक्शन.
featured image - हवा से हमले - भयभीत करने वाला HTML इंजेक्शन
Jesse Victors HackerNoon profile picture
0-item

पुराने जमाने की फोन की सीटी वापस आ गई है!


ठीक है, लगभग, लेकिन नीचे दिया गया यह ऑडियो उतना दूर का नहीं है।


13 जुलाई को, हमें एक दिलचस्प भेद्यता का पता चला। एक विशेष वेबपेज डिजिटल रेडियो चैटर पर नज़र रख रहा था और यह अपने स्टेशन पर क्या सुन रहा था इसका एक रनिंग लॉग प्रदर्शित करेगा। यदि आप इस प्रकार के काम में रुचि रखते हैं तो यह एक उपयोगी उपकरण है; आख़िरकार, यह जानना बहुत अच्छा है कि क्या आपकी कॉल सुनी जा रही हैं या क्या ऐसी बातचीत चल रही है जिसमें आप शामिल होना चाहेंगे। इस टूल ने जो कुछ भी सुन रहा था उसे कैप्चर कर लिया और उसे वेबपेज में डाल दिया। एक संदेश भेजें और कुछ सेकंड बाद यह वहां दिखाई देगा। यदि संदेश में HTML शामिल है, तो वह भी वेबपेज पर समाप्त हो जाएगा। क्लासिक HTML इंजेक्शन.


यह कैसे काम करता है?

इस तरह का हमला करने के लिए, आपको वास्तव में इंटरनेट की बिल्कुल भी आवश्यकता नहीं है - आपको बस तार के एक लंबे टुकड़े की आवश्यकता है। फरवरी 2023 में प्रकाशित हमारी अटैक्स ओवर द एयर श्रृंखला में, हमने 913 मेगाहर्ट्ज पर संचालित नियंत्रक के साथ बास्केटबॉल स्कोरबोर्ड द्वारा प्रस्तुत वायरलेस मुद्दों पर चर्चा की। इस पोस्ट में, हम आवृत्ति में बहुत नीचे, शॉर्टवेव रेडियो बैंड में आगे बढ़ेंगे। यह अटैक 7.078 और 14.078 मेगाहर्ट्ज पर काम करता है।


यहां कई दिलचस्प डिजिटल सिग्नल हैं, और JS8 उनमें से एक है। JS8 शौकिया रेडियो के लिए एक लोकप्रिय कीबोर्ड-टू-कीबोर्ड चैटिंग टूल है। यह लंबी दूरी और बहुत खराब लिंक स्थितियों में भी सीधी बातचीत को सक्षम करने में बिल्कुल उत्कृष्ट है। JS8 स्वयं FT8 पर आधारित है, जो उन स्टेशनों के बीच सरल संपर्क बनाने के लिए एक बेहद लोकप्रिय उपकरण है जो मुश्किल से एक-दूसरे को सुन सकते हैं। रात और दिन, FT8 और JS8 लगातार उपयोग में रहते हैं।


(14.078 मेगाहर्ट्ज पर JS8 ट्रैफ़िक के पिछले 24 घंटे)


शॉर्टवेव बैंड में सिग्नल डाउन होने पर कई अजीब चीजें होती हैं। यह इतनी कम आवृत्ति है कि हमसे 100 मील ऊपर, पृथ्वी के आयनमंडल की ई और एफ परतें रेडियो सिग्नल को फिर से जमीन पर प्रतिबिंबित करना शुरू कर देती हैं। सिग्नल पृथ्वी और ज़मीन के बीच कई बार उछलते हैं, जैसे पानी से कोई पत्थर छूट रहा हो। यह हमें रात में ग्रह के दूसरी ओर वाणिज्यिक एएम स्टेशनों को सुनने की अनुमति देता है। दिन के दौरान, यह उछाल उच्च आवृत्तियों पर भी काम करता है, जिससे विशाल दूरी पर संचार संभव हो पाता है। मेरा पिछवाड़ा ट्रांसमीटर और वेबसाइट का स्टेशन 674 मील दूर हैं। एक उछाल से वह दूरी आसानी से तय हो जाती है।

तो आप शॉर्टवेव सिग्नल वाली वेबसाइट पर कैसे हमला करते हैं?

JS8 संदेश ASCII टेक्स्ट, सभी अपरकेस वर्णों में निर्मित होते हैं। अधिकांश संदेश व्यापक समूहों को भेजे जाते हैं, जैसे स्काईवार्न, JS8Chess, या, सभी को संदर्भित करने के लिए, बस ALLCALL। इसके बाद, संदेश कुछ भी हो सकता है। सबसे पहले हम संपादक में HTML पेलोड बनाते हैं। हमें कानूनी रूप से पहचान के लिए अपना शौकिया रेडियो कॉलसाइन प्रदान करना होगा (एक ऐसा कदम जिसे वास्तविक हमलावर द्वारा नजरअंदाज कर दिया जाएगा) और अंत में हमारा अंतिम संदेश इस तरह दिखता है:


KJ7YLS: @टेस्ट <DIV स्टाइल='चौड़ाई: 500PX;ऊंचाई:100PX;रंग:लाल;'>HTML इंजेक्शन!</DIV>

अब हम प्रसारित करने के लिए तैयार हैं। JS8 सॉफ़्टवेयर इस टेक्स्ट को बाइनरी में परिवर्तित करता है, फ़ॉरवर्ड त्रुटि सुधार जोड़ता है, और गॉसियन फ़्रीक्वेंसी शिफ्ट कीइंग, (GFSK) का उपयोग करके परिणाम को संशोधित करता है। अंतिम उत्पाद सुनने में अजीब सी सीटी की आवाज जैसा लगता है। यदि हम ऑडेसिटी का उपयोग करके ध्वनि खोलते हैं, और एक स्पेक्ट्रोग्राम खोलते हैं, तो यह इस तरह दिखता है:



करीब से देखने पर, आप GFSK मॉड्यूलेशन को धीरे-धीरे एक आवृत्ति से दूसरी आवृत्ति में परिवर्तित होते हुए देख सकते हैं। यह प्रत्येक आवृत्ति पर एक विशिष्ट अवधि के लिए भी रहता है। यहां आठ अलग-अलग आवृत्तियों का उपयोग किया जाता है और इस प्रकार प्रत्येक प्रतीक की आठ अलग-अलग अवस्थाएँ होती हैं। परिणामस्वरूप, प्रत्येक प्रतीक एक समय में तीन बिट्स ले जा सकता है। इसे कुछ लेबलों से दर्शाया गया है:



फिर हम सीटी की आवाज़ को रेडियो ट्रांसमीटर के माइक्रोफ़ोन में भेज सकते हैं। अधिकांश शौकिया और सैन्य संकेतों की तरह, ऑडियो ऊपरी-साइडबैंड मॉड्यूलेशन का उपयोग करके वितरित किया जाता है, जो एएम प्रसारण प्रकार के सिग्नल का एक खंड है। JS8 संदेशों को कई आवृत्तियों पर मानकीकृत किया गया है, और हमारा लक्ष्य 7.078 मेगाहर्ट्ज और 14.078 मेगाहर्ट्ज पर सुनता है। हम रेडियो को किसी भी आवृत्ति पर ट्यून करते हैं और 20 वाट बिजली का उपयोग करके हवा में लगभग 30 फीट की ऊंचाई पर 16-एडब्ल्यूजी तार में ऑडियो भेजते हैं। सिग्नल हवा में प्रसारित होता है, आयनमंडल से उछलता है और उनका एंटीना इसे प्राप्त करता है। उनका JS8 सॉफ़्टवेयर प्रक्रिया को उलट देता है और ASCII संदेश निकाल देता है। इसी बिंदु पर हम समस्या देखते हैं।

वेबसाइट (इसके लेखक के सम्मान में इस लेख में लिंक को रोक दिया गया है) JS8 ट्रैफ़िक लॉग करती है। हुड के तहत, यह JS8Net द्वारा संचालित है, एक उपयोगी पायथन टूल जो सीधे JS8 सॉफ़्टवेयर के एपीआई से बात करता है। रिपॉजिटरी में, मॉनिटर.py स्क्रिप्ट JS8 संदेशों को पकड़ती है और उन्हें वेबसाइट पर रखती है। लेखन के समय, इसमें पंक्ति 859 पर कोड की निम्नलिखित पंक्तियाँ शामिल हैं:


 # Text j['text']=j['stuff']['params']['TEXT'] key=str(j['stuff']['time']) j['id']=':'.join([fmcall,tocall,key,str(j['freq'])]) traffic[key]=json.dumps(j)


j['stuff']['params']['TEXT'] कलेक्टर.py से लिया गया ASCII JS8 संदेश है, जो JS8 सॉफ़्टवेयर के API से लिया गया है। इस चरण के बाद, ट्रैफ़िक[कुंजी] में टेक्स्ट को जावास्क्रिप्ट का उपयोग करके पृष्ठ पर रखा जाता है। ये कदम ठीक हैं. समस्या संदर्भ में परिवर्तन में होती है क्योंकि ऐसी धारणा है कि JS8 ट्रैफ़िक, जो पहले से ही JS8 सॉफ़्टवेयर द्वारा पूरी तरह से संसाधित है, जाने के लिए तैयार है और वेबपेज के संदर्भ को प्रभावित नहीं करेगा। यह वह व्यवहार है जिसका हम शोषण कर सकते हैं।


शुरू से अंत तक, हमारा आक्रमण इस प्रकार दिखता है:


कुछ मिनट बाद, हमारा संदेश वेबसाइट पर लॉग इन हो जाता है...


अंतिम परिणाम अधिकतर कॉस्मेटिक होता है। यह एक सार्वजनिक पृष्ठ है, इसलिए इसमें चोरी करने के लिए कोई सत्र कुकीज़ या धोखा देने के लिए नियंत्रण नहीं है। संग्रहीत XSS भी एक वास्तविक संभावना है, लेकिन एक निराशाजनक सुबह कई, कई समय लेने वाले पेलोड भेजने के बाद (प्रत्येक JS8 संदेश को भेजने में कई मिनट लगते हैं) हमें काम करने वाली जावास्क्रिप्ट नहीं मिल सकी जो पृष्ठ पर निष्पादित हो। मुझे संदेह है कि JS8net सॉफ़्टवेयर ने गलती से कई प्रमुख वर्णों और शब्दों को अवरुद्ध कर दिया है और हमारा समाधान सक्रिय नहीं हुआ है।


फिर भी, बर्प सुइट यहाँ काम आया। उस विशेष दिन आयनमंडल सहयोगी था और सिग्नल बहुत अच्छे से उछल रहे थे। मुझे अन्य उपकरणों से पता चला कि अन्य देशों के स्टेशन अमेरिका से JS8 ट्रैफ़िक सुन रहे थे। तो मेरा अगला पेलोड था

KJ7YLS: @ALLCALL <img src='http://727k2w1hfoamqewpm7rpiocu0l6cu2ir.oastify.com' alt='@HB DN13'>

यह यूआरएल बर्प सूट के सहयोगी टूल द्वारा संचालित डीएनएस और HTTP श्रोता को इंगित करता है, जिसका उपयोग हम अक्सर आउट-ऑफ-बैंड सूचना लीक का पता लगाने के लिए प्रवेश परीक्षणों के दौरान करते हैं। यह अलग नहीं था. कुछ ही मिनटों में, चिली में पेज पर आने वाले उपयोगकर्ताओं से DNS और HTTP ट्रैफ़िक को सहयोगी सर्वर द्वारा रिकॉर्ड किया गया था। मैंने इंजेक्शन का निरीक्षण करने के लिए पेज भी देखा और लॉग भी किया।


यह लगभग उतना ही था जितना मैं नैतिक रूप से इंजेक्शन के साथ जाना चाहता था। मैंने निवारण के सुझावों के साथ वेबसाइट के मालिक जेफ को समस्या की सूचना दी। वह अगले दिन मेरे पास वापस आया और बोला:


मैं स्वयं सुरक्षा में काम करता हूं (मैं बे एरिया में एक नेटवर्क सुरक्षा कंपनी के लिए आर एंड डी करता हूं), लेकिन मुझे यह स्वीकार करना होगा कि एक वेब साइट को हैक करने के लिए रेडियो के माध्यम से जेएस सबमिट करना मेरे रडार से पूरी तरह से बाहर था।

जब मैं पैच के लाइव होने का इंतजार कर रहा था, मैंने JS8Net README की कुछ पंक्तियों पर विचार किया:


 It's important to note that this part of the software is still very much in the development stage, and may have critical vulnerabilities that make exposing the exposed services to the open Internet a Very Bad Idea. While it certainly will work, it's intended for protected, internal LAN use at this time.


ईमानदारी से कहें तो यह सामान्य तौर पर एक उत्कृष्ट चेतावनी है, खासकर उन परियोजनाओं के लिए जो प्रगति पर हैं और जिनका पूरी तरह से परीक्षण नहीं किया गया है। इस बिंदु पर कमजोरियाँ एक "अज्ञात अज्ञात" हैं लेकिन लेखक मुख्य रूप से अपने सॉफ़्टवेयर में उजागर श्रोताओं और एपीआई के बारे में सोच रहा था। हालाँकि, हमने थोड़ी अलग प्रकार की समस्या का फायदा उठाया। README चेतावनी देता है कि सेवा को LAN के अंदर चलाया जाना चाहिए और यह वास्तव में दूसरों को HTML इंजेक्शन और वेबपेज के अपवित्र होने से बचाएगा। हालाँकि, सहयोगी पेलोड वाला एक पेलोड उनके निजी LAN के भीतर पृष्ठ देखने वाले किसी भी व्यक्ति के सार्वजनिक आईपी पते को लीक कर देगा, इसलिए इसे संबोधित करना थोड़ा कठिन है।

संक्षेप में, यह इंटरनेट पर किसी वेबपेज पर हमला करने वाला एक रेडियो सिग्नल है। किसी हमलावर को इंटरनेट पर अपनी पहचान छुपाने के लिए वीपीएन, टोर या बॉटनेट का सहारा लेने की ज़रूरत नहीं है। JS8 शोर तल के नीचे -24dB संदेश निकालने में इतना प्रभावी है (इस स्तर पर सीटी सचमुच नहीं सुनी जा सकती) कि दूर के स्टेशनों तक पहुंचने के लिए बहुत कम बिजली की आवश्यकता होती है। अच्छी आयनोस्फेरिक स्थितियों पर एक वाट ट्रांसमिशन पावर, पूरे अमेरिका में तट-से-तट तक जा सकती है। हमलावर दुनिया में कहीं भी हो सकता है. एक फटे हुए संदेश की ही आवश्यकता है, इसलिए दिशा-निर्धारण भी कठिन होगा। मुझे लगता है कि यह लगभग अप्राप्य के करीब है जितना आप इस तरह की किसी चीज़ से प्राप्त कर सकते हैं।


समयरेखा:

  • 13 जुलाई: समस्या का पता चला, जेफ को रिपोर्ट किया गया, सीवीई के लिए एमआईटीईआर में आवेदन किया गया
  • 14 जुलाई: जेफ ने जवाब दिया।
  • 22 जुलाई: जेफ़ ने Github पर JS8Net के लिए एक पैच लागू किया।
  • 25 जुलाई: पैच वेबसाइट पर लाइव होगा।
  • 18 अगस्त: ब्लॉग पोस्ट प्रकाशित हुआ।