hacktricks/mobile-pentesting/android-app-pentesting/webview-attacks.md

14 KiB
Raw Blame History

वेबव्यू हमले

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

WebView कॉन्फ़िगरेशन और सुरक्षा पर गाइड

WebView की कमजोरियों का अवलोकन

Android विकास का एक महत्वपूर्ण पहलू WebViews के सही हैंडलिंग में शामिल है। यह गाइड WebView उपयोग से जुड़े जोखिमों को कम करने के लिए मुख्य कॉन्फ़िगरेशन और सुरक्षा अभ्यासों पर प्रकाश डालता है।

WebView उदाहरण

WebViews में फ़ाइल एक्सेस

डिफ़ॉल्ट रूप से, WebViews फ़ाइल एक्सेस की अनुमति देते हैं। यह कार्य Android API स्तर 3 (कपकेक 1.5) से उपलब्ध setAllowFileAccess() मेथड द्वारा नियंत्रित होता है। android.permission.READ_EXTERNAL_STORAGE अनुमति वाले एप्लिकेशन फ़ाइल URL स्कीम (file://path/to/file) का उपयोग करके बाह्य संग्रह से फ़ाइल पढ़ सकते हैं।

पुरानी विशेषताएँ: यूनिवर्सल और URL से फ़ाइल एक्सेस

  • फ़ाइल URLs से यूनिवर्सल एक्सेस: यह पुरानी विशेषता फ़ाइल URLs से क्रॉस-ऑरिजिन अनुरोधों की अनुमति देती थी, जिससे संभावित XSS हमलों के कारण एक महत्वपूर्ण सुरक्षा जोखिम उत्पन्न होता था। एप्लिकेशन्स जो Android Jelly Bean और नए लक्ष्यित कर रहे हैं के लिए डिफ़ॉल्ट सेटिंग अक्षम (false) है।
  • इस सेटिंग की जांच करने के लिए, getAllowUniversalAccessFromFileURLs() का उपयोग करें।
  • इस सेटिंग को संशोधित करने के लिए, setAllowUniversalAccessFromFileURLs(boolean) का उपयोग करें।
  • फ़ाइल URLs से फ़ाइल एक्सेस: यह विशेषता भी पुरानी है, जो अन्य फ़ाइल स्कीम URLs से सामग्री तक पहुंच को नियंत्रित करती थी। यूनिवर्सल एक्सेस की तरह, इसकी डिफ़ॉल्ट सेटिंग सुरक्षा के लिए अक्षम है।
  • जांच करने के लिए getAllowFileAccessFromFileURLs() का उपयोग करें और सेट करने के लिए setAllowFileAccessFromFileURLs(boolean) का उपयोग करें।

सुरक्षित फ़ाइल लोडिंग

एक्स

webview.loadUrl("<url here>")

जावास्क्रिप्ट और इंटेंट स्कीम हैंडलिंग

  • जावास्क्रिप्ट: वेबव्यूज में डिफ़ॉल्ट रूप से अक्षम होता है, इसे setJavaScriptEnabled() के माध्यम से सक्षम किया जा सकता है। सावधानी बरतना चाहिए क्योंकि जावास्क्रिप्ट को सही सुरक्षा उपायों के बिना सक्षम करना सुरक्षा खतरे उत्पन्न कर सकता है।
  • इंटेंट स्कीम: वेबव्यूज intent स्कीम को हैंडल कर सकते हैं, जो सावधानीपूर्वक प्रबंधित नहीं किया गया हो सकता है, जिससे उत्पादन हो सकता है। एक उदाहरण भेद्यता में एक उदाहरण वेबव्यू पैरामीटर "support_url" शामिल था जिसका शोध लिया जा सकता था ताकि क्रॉस-साइट स्क्रिप्टिंग (XSS) हमले को क्रियान्वित किया जा सके।

वल्नरेबल वेबव्यू

adb का उपयोग करके शोषण उदाहरण:

{% code overflow="wrap" %}

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"

{% endcode %}

जावास्क्रिप्ट ब्रिज

एंड्रॉइड द्वारा एक सुविधा प्रदान की गई है जो वेबव्यू में जावास्क्रिप्ट को नेटिव एंड्रॉइड ऐप फंक्शन को आमंत्रित करने की सुविधा प्रदान करती है। इसे addJavascriptInterface विधि का उपयोग करके प्राप्त किया जाता है, जो जावास्क्रिप्ट को नेटिव एंड्रॉइड कार्यक्षमताओं के साथ एकीकृत करता है, जिसे वेबव्यू जावास्क्रिप्ट ब्रिज कहा जाता है। सावधानी बरतने की सलाह दी जाती है क्योंकि यह विधि वेबव्यू के सभी पृष्ठों को पंजीकृत जावास्क्रिप्ट इंटरफेस ऑब्ज

@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge को WebView में एक इंटरफेस जोड़कर सक्रिय किया जाता है:
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • संभावित शोषण JavaScript के माध्यम से, उदाहरण के लिए, एक XSS हमले के माध्यम से उजागरित जावा विधियों को बुलाने की संभावना प्रदान करता है:
<script>alert(javascriptBridge.getSecret());</script>
  • जोखिम को कम करने के लिए, JavaScript ब्रिज़ उपयोग को सीमित करें APK के साथ शिप कोड तक और रिमोट स्रोत से JavaScript लोड करने से रोकें। पुराने डिवाइस के लिए, न्यूनतम API स्तर को 17 पर सेट करें।

प्रतिबिम्ब-आधारित रिमोट कोड निष्पादन (RCE)

  • एक दस्तावेज़ीत विधि द्वारा रिफ्लेक्शन के माध्यम से RCE हासिल करने की अनुमति देती है एक विशिष्ट पेलोड को निष्पादित करके। हालांकि, @JavascriptInterface एनोटेशन अनधिकृत मेथड एक्सेस को रोकता है, हमले की सतह को सीमित करता है।

रिमोट डीबगिंग

  • रिमोट डीबगिंग Chrome Developer Tools के साथ संभव है, जो WebView सामग्री के भीतर अंतर्क्रिया और अर्बिट्रे JavaScript निष्पादन को संभव बनाता है।

रिमोट डीबगिंग सक्षम करना

  • एक एप्लिकेशन के सभी WebViews के लिए रिमोट डीबगिंग को सक्षम किया जा सकता है:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • डिबगिंग को शर्तानुसार सक्रिय करने के लिए आवेदन की डिबगेबल स्थिति पर निर्भर करें:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

विषयात्मक फ़ाइलों को बाहर निकालें

  • XMLHttpRequest का उपयोग करके विषयात्मक फ़ाइलों का बाहर निकालने का प्रदर्शन:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके: